服务器

Posted 小小小梅子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器相关的知识,希望对你有一定的参考价值。

#服务器
web引用:浏览器向服务器发送一个请求,服务器再响应给浏览器。
#####2台计算机之间交互要遵守的条约(协议):
 1. TCP/IP协议有4层  简化版       //OSi是它的前身,协议有七层
 2. 
  协议组(每一组都是协议):
   第一层:引用层:http协议;
   第二层:传输层 又分:①TCP协议:安全协议,会经过三次握手和另一台计算机传送。②VDP协议:不安全协议,传输效率高(例直播)
   第三层:网络层   IP协议:把当前的地址做一个IP的封装。
   第四层:链路层   负责把数据的每一届传递到另外一台计算机上。
    另外一台计算机首先接触到的是链路层-网络层-传输层-引用层
   ??TCP协议:每一台电脑都支持,最为广泛。
#####引用层http协议:全名:超文本传输语言
######特性:
1. 基本请求响应模型  
 (浏览器向服务器发送一个请求,服务器再响应给浏览器。如果没有请求,就不会响应)    客户端与服务器,如果安装了软件,只要安装了;客户端的内部自己有协议,我们自己不用点,它会主动发过来,例QQ。。。        
2.      短(无)链接(链接一次就断开,链接太频繁了);
3.      无状态:每一次访问,都认为是新的,记忆短
#####http协议的访问流程:
1. 当我们先给浏览器发起请求。
2. 交给域名解析(浏览器会把我们输入的网址进行解析)。怎么解析:用域名服务器解析 。域名服务器解析挂了之后的现象:输入网址,进不了网站,但是可以QQ上网。
3. 经过三次握手建立链接。
4. 发送请求数据
5. 服务器响应数据
6. 浏览器接收数据后关闭链接。
#####http协议的内容: 1封装  2 解封装
    请求信息:封装(4部分)  浏览器安装http协议来封装,发送给服务器
    第一部分:请求行:包含了请求方法(get/post);包含了请求路径;包含了协议的版本;
    第二部分:请求头:以键值对的形式存在;包含了浏览器的版本和浏览器的相关信息;
    第三部分:空行
    第四部分:请求消息体(除了get)。
    
    相应信息:4个部分;
    第一部分:状态行(包含状态码;包含状态描述);
    第二部分:响应头:以键值对的形式寻在,服务器发给浏览器的设置信息。(响应头: 里面的东西,浏览器是不会显示出来的)
    第三部分:空行
    第四部分:响应消息体。
    (状态码:100-199 内部状态,少见 ; 200-299正确状态;300-399资源备已走,用缓存302代表已走,304资源缓存;400-499错误状态,客户端状态,404找不到页面;500-599错误状态,服务器出错,503服务器崩溃。
                
###Node.js    (2009年之前,前端只写html和css;2009年之后出现Node.js)
#####Node.js原理:
    Node.js是一个基于chromeV8引擎javascript运行环境。
    Node.js使用了一个事件驱动,非阻塞式I10的模型,使其轻量又高效。(解释:一个线程负责接收所有的请求,然后放入事件队列中,让其他线程来处理;)
    Node.js的包管理器nmp,是全球最大的开源库生态系统

    引入Node.js模板:const require("模板")   fs 文件系统处理   path路径
    path.resolve()拼接得到绝对路经,从右往左处理。
    fs.statSync()返回一个文件信息,参数是路径
    fs.unlink 异步删除文件
    fs.unlinkSync 同步删除文件
    fs.rmdir删除文件
    变量名.isFile 是否是一个文件
    fs.isDirectory是否是一个目录
    变量名.readdirsync 返回一个数组

##### http搭建服务器

```js
    const http = require("http");//引入模块前面不加.\,但是引入自己的文件,必须写,并且是相对路径
    //创建服务器
    let server = http.creatServer(function(req,res){
        res.write("<h1>搭建服务器</h1>")
        res.end();
    });
    //启动服务器
    server.listen(3000,function(){
        console.log(12);
    })
```
查看本机:
1. 127.0.0.1.端口号(某个应用程序的窗口,并且保持其唯一性)    
2. localhost:端口号
 (多个应用程序不可用同一个端口,但是一个应用程序可有多个端口
  url网址)
    1. url.parse()将解析路径成一个对象
    
    ```js
    let urlObj = url.parse(req.url);
    urlObj.pathname//获取路径名
    urlObj.query//获取参数
    ```
    2. querystring.parse()该方法会把一个 URL 查询字符串 str 解析成一个键值对的集合
    
### express插件(可以运用到判定浏览器向服务器请求的是静态网页还是动态网页,然后做出相应的响应)
    1. 获取参数
        1. let phone = req.query.phone(form表单提交方式为get)
        2. let phone = req.body.phone(form表单提交方式为post)
    2. 重新定向一个新页面
        1. response的方法
            1. res.redirect("path")重定项
            2. res.send("")发送字符串
            3. res.location("path")作用同redirect
               res.sendStatus(302);


###    GET和POST区别
        1. GET请求参数放到?后面、POST请求参数放到请求消息体后面
        2. GET的请求参数是有限制的,它整个url不能超过255个字符,POST无限制
        3. GET请求可看见、POST请求数据不可见
        4. GET请求参数是缓存过的,POST提交的请求参数是不会被浏览器缓存的

#AJAx
作用:在不刷新页面的情况下可以与服务器进行交互(局部刷新)。
Jquery实现AJAX的方法:
(先引入jquery,js 放在public 里面)
    ```js
    方法1:
    window.onload = function (){
        phone.onblur = function (){
            $.get("/user/isPhoneExist",{phone:phone.value},function(data)
                $("#phoneInfo").html(data);

    });

    ```

    ```js
    方法2:
    window.onload = function (){
        $.ajax({
            type:"post"    //get/post
            url:"/users/isPhoneExist",
            data:{phone:phone.value},
            success:function(data){
                $("#phoneInfo").html(data);
        });
    });

    ```


###数据库:本身也是一个引用程序
1. 关系型数据库(不适合做大型数据的存放,做增删改查) 语言SQL:mysql SQLServer DB2  Oracle
2. 文档型数据库:
3. NoSQL:
4. mongoDB:JSON对象  1.先安装mangoDB ,启动;2 链接工具(命令行连接/可视化连接)
5. 
 #####mongoDB的包含关系:
mongoDB 包含数据库 ;(如果没有,写一个use f46,它自己就建立连接了)
数据库包含集合;
集合包含文档;
文档包含字段
 (插入,查看,查询,删,更新)
db.users.find()查看      
### mongoDB命令行连接:
db.users.find()查看
db.users.insert({})插入  例: db.ussers.insert({phone:"12345678912",pwd:"123"}
db.users.update({})修改   例:db.users.delete({根据它来修改},{$set{修改后的值}})  ==db.users.delete({phone:"123"},{$set{pwd:"456"}})    
db.users.remove({带条件删除 }) 删除  // db.users.remove({ })如果括号里不指定删除那个对象,它就会清空所有的对象
正则表达式:db.users.find({phone:/1/})     db.users.find({phone:{$regex:"2"}})

### mongoDB可视化连接:
1. 先下载npm i ykt-mongo --save-dev     //老师封装的
2. 在package.json里面加一条数据 :
```js
    "db":{
        "url":"mongodb://127.0.0.1:27017",
        "dbname":"f46"    //"f46"随便取的
     }
```

###Rest(资源状态表述转移) 
 
任何一个外部的都可以对资源进行增删改查。
rest所有的东西都可以想象成资源。
rest基于http协议访问

1. 获取 GET    users  复数
获取某一段(id ): GET    users/id    例:users/123
获取其他条件查询: GET   users/id ?name... 只有GET(获取)id才有?
2. 增加:Post          users   增加在消息体
3. 修改 :Put      users/id    修改的内容也在消息体
4. 删除  :delete     users/id  消息体

reload  与AJAX一样在不刷新页面的情况下,把数据库里面的数据渲染在页面上。


###分页
分页分两种:
1. 数据库分页:查找出来的时候就已经分好页了。 优点:对内存消耗小。坏处:   。一般情况下采用数据库分页。
2. 在程序代码上分页: 查出所有代码。优点:通用性。 缺点:通用性。

当前页:
每页显示数:显示出来的
总页数:总数/每页显数 (除不尽的,向上取整)
总数:
Limit与skip方法:
Limit 限制取几条  例:db.students.find({}).limit(3);   //limit(3)显示前3条
Limit的值算法:(当前页-1)X 每页显示的数
服务器分页代码:.findByPage(page,rows)          //有2个参数   page当前页 rows 每页显示的数
easyui的方法:html
pagination:true   //设置
显示分页
pageList:[5,10,12,20]      //设置每页显示的条数


skip跳过 ,默认为0  例:db.students.find({}).limit(3).skip(6);

###session :用来维持状态 
1. session是服务器当中的一个对象    //对象可以保存任何东西
2. session 又称会话   //会话的时间靠匹配来决定
3. 每个session 对象都有一个唯一的session ID值
4. session ID 作为服务器传给浏览器
5. session ID是经过cookie传递的

注:
1. 浏览器不同就会产生不同的session对象。浏览器不同,cookie不会共享,所有就会产生不同的seseeion ID ;2. 浏览器相同,产生一个新的标签页,session ID相同

let user = req.session.user || {};   //获取
res.send(user);  //返回
###上传图像

1. ajaxfileupload:jquery中用于上传及转码的插件
```js
$.ajaxFileUpload({
    fileElementId: "image",    //需要上传的文件域的ID。
    url: "/users/upImg", //后台方法的路径
    type: ‘post‘,   //当要提交自定义参数时,这个参数要设置成post
    dataType: ‘string‘, //服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
    secureuri: false,   //是否启用安全提交,默认为false。
    async: true,   //是否是异步
    success: function (data) {   //提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
        console.log(data);
    },
    error: function (data, status, e) {  //提交失败自动执行的处理函数。
        console.log(e);
    }
});    
```

2. multiparty:服务器端用于保存上传的文件并建立新的名字的插件
```js
  //生成multiparty对象,并配置上传目标路径
  var form = new multiparty.Form({ uploadDir: ‘./upImages‘ });
  //上传完成后处理
  form.parse(req, function (err, fields, files) {
    var inputFile = files.file;
    var uploadedPath = inputFile.path;
    var dstPath = ‘./upImages/‘ + inputFile.originalFilename;
    fs.rename(uploadedPath, dstPath, function (err) {
      if (err) {
        res.send(err);
      } else {
        res.send(dstPath);
      }
    });
```

###https:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

###前后端分离

#####为什么选择前后端分离
可以很好的解决前后端分工不均的问题,将更多的交互逻辑分配给前端来处理,而后端则可以专注于其本职工作,比如提供API接口,进行权限控制以及进行运算工作。而前端开发人员则可以利用nodejs来搭建自己的本地服务器,直接在本地开发,然后通过一些插件来将api请求转发到后台,这样就可以完全模拟线上的场景,并且与后台解耦。前端可以独立完成与用户交互的整一个过程,两者都可以同时开工,不互相依赖,开发效率更快,而且分工比较均衡。
###面试常问Amd 和 cmd 的区别 ;和require.js和sea.js的区别:
1. Amd 和 cmd 都是规范;(es6没有出现是都非常火爆, Amd 是国外的, cmd是国内的)
2. require.js和sea.js是实现规范


###require.js和sea.js的区别:
#####相同点:
1.都是模块加载器;
2. 都是采用define函数来定义模块;
3. 都是解决了前端模块化的时候全局命令空间污染和解析依赖问题。

#####不同点:
1.  两者定位上有差异,reqire.js专注于浏览器端,只有异步加载;sea.js既可以用在浏览器端也可以用在服务器端,支持异步也支持同步;
2.  两者遵循的标准不一样,require.js遵循的是Amd规范,而sea.js遵循的是cmd规范;
3.  两者对第三库的支持也有差异,require.js强势让第三方修改代码来遵循它;而sea.js不强推第三方库,采用一套成熟的封装机制。
4. require.js更加专注于国外的使用率高,而sea.js是由国人开发的,包容性强,语言上没有障碍,所有国内使用率高。
###模块化:
引入的方法:import   // 例 import 变量 from “相对路径”
导出的方法: export  
  //例 export {方法名 as default}  //导出一个
//例  export {A ,  B , C}  //导出多个
$("#main").load(路径,function(){});--远程加载

#####单页(应用)
1. 概念:整个页面只有一个系统。只有一个Web 页面的应用,是加载单个html页面并在用户与应用程序交互时动态更新该页面的web应用程序。
2. 好处:交互性比多页应用好
3. 缺点:开发难度提高了
#####多页(应用)
1. 概念:2个页面及以上组成的页面。

#####easyui的效果使用单页应用加载出来的办法:$.parser.parse() ;   //解析页面































































































































































































































































































以上是关于服务器的主要内容,如果未能解决你的问题,请参考以下文章

代理服务器怎么设置 网络代理服务器设置方法介绍

服务器方面知识总结

WEB服务器应用程序服务器HTTP服务器区别

AJAX之服务器

高防秒解服务器|香港服务器|美国高防服务器

什么是轻量级应用服务器?