HTTP协议

作者: 正规程序员 | 来源:发表于2019-04-26 23:17 被阅读3次

    HTTP(超文本传输协议) 是基于TCP/IP协议的应用层协议,通信方式为“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。

    HTTP协议特点

    • 简单快速:客户端向服务器请求服务时,只需要传送请求方法和路径。由于HTTP协议简单,因而服务器规模较少,通信速度快。
    • 灵活:HTTP允许传输任意类型的数据,类型由Content-Type标记。
    • 无连接:每次连接只处理一个请求服务,服务器应答完毕就断开连接。
      HTTP/1.1版本通过Connection:keep-alive 进行的长连接实质是TCP层的长连接,一次TCP连接可进行多个HTTP请求,但应用层HTTP每次请求仍单独发送header,从应用层角度说仍是无连接。
    • 无状态:HTTP的每次请求都是独立的。缺点是需要重复的数据需要重新请求传输,优点是服务器应答效率高。

    请求报文和响应报文

    请求报文分为:请求行、请求报头、空行、请求数据。如下:

    POST http://meme.php/home/user/login HTTP/1.1 //请求行:方法名 Request-URI 协议版本    
    Host: 114.215.86.90                                 
    Cache-Control: no-cache                                 
    Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed     
    Content-Type: application/x-www-form-urlencoded     
        
    tel=13637829200&password=123456                     
    

    如上1行为请求行,2-5行为请求报头,6为空行(回车符/换行符),7行为请求数据。

    响应报文分为:状态行、响应报头、空行、响应数据。如下:

    HTTP/1.1 200 OK                                                         
    Date: Sat, 02 Jan 2016 13:20:55 GMT                                 
    Server: Apache/2.4.6 (CentOS) PHP/5.6.14                                    
    X-Powered-By: PHP/5.6.14                                            
    Content-Length: 78                                      
    Keep-Alive: timeout=5, max=100                      
    Connection: Keep-Alive                                  
    Content-Type: application/json; charset=utf-8           
    
    {"status":202,"info":"\u6b64\u7528\u6237\u4e0d\u5b58\u5728\uff01","data":null}
    

    如上 1行为状态行,2-8行为响应报头,9行为空行,10行为响应数据。

    空行处的回车符或换行符用于告知服务器以下部分不会有请求报头。

    HTTP常用方法

    • GET:获取Request-URI标识的资源;
    • POST:获取在Request-URI标识的资源后附加新的数据;
    • HEAD:获取Request-URI标识的资源的响应报头数据;
    • PUT:请求服务器存储资源数据,以Request-URI为资源标识;
    • DELETE:请求服务器删除标识为Request-URI的资源;
    • TRACE:请求服务器回执请求信息,用于测试或诊断;

    Get与Post区别

    本质就是参数是放在请求行中还是放在请求数据中。当然无论用哪种都能放在请求行中,但一般在请求行中放一些发送端的常量。

    • GET在请求URL地址后面以?形式添加参数,多个参数以&拼接。POST通过数据包形式上传,也可像GET那样传参。
    • GET提交数据长度有上限,因浏览器对URL的长度有限制。POST提交数据无限制;
    • GET有安全隐患,传递参数在URL中可见,且可被浏览器保存记录。POST不会被缓存,参数隐藏在请求报文的请求数据中。

    HTTPS和HTTP的区别

    HTTP是应用层协议,TCP是传输层协议。在应用层和传输层之间,增加了一个安全套接层SSL/TLS,就是Https的产生。

    • https协议需要到CA申请证书。
    • http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    HTTPS主要作用:

    • 认证用户和服务器,确保数据发送到正确的客户机和服务器;(验证证书)
    • 加密数据以防止数据中途被窃取;(加密)
    • 维护数据的完整性,确保数据在传输过程中不被改变。(摘要算法)

    HTTPS请求步骤

    一个HTTPS请求实际上包含了两次HTTP传输,如下:

    1. 客户端向服务器发起Http请求,连接到服务器的443端口;
    2. 服务器将非对称加密的密钥对的公钥发送给客户端;
    3. 客户端检验服务器传回的公钥(即数字证书)的合法性。
      若公钥合格,客户端生成一个随机值的对称加密的密钥,即客户端密钥,并用服务器公钥加密该密钥;
    4. 客户端发起HTTPS中的第二个Http请求,将非对称加密后的客户端密钥发送给服务器;
    5. 服务器收到客户端发送的密钥后,用服务器的非对称加密的私钥解密,得到客户端密钥;
    6. 服务器用客户端密钥加密数据,并发送给客户端;
    7. 客户端接收服务器返回的数据,并用客户端密钥解密,最终得到服务器发送的数据。

    服务端密钥用来非对称加解密客户端密钥,客户端密钥用来对称加解密数据。

    我们可以看到服务器端会有一个证书,在交互过程中客户端需要去验证证书的合法性,对于权威机构颁发的证书当然我们会直接认为合法。对于自己造的证书,那么我们就需要去校验合法性了。

    Cookie和Session

    Cookie是服务器生成的,存储在客户端的用于辨识用户身份。Session是存储在服务器用于跟踪用户状态。

    1. 客户端将身份信息以报文形式发送到服务器;
    2. 服务器验证客户端身份信息,并将认证状态与Session ID绑定后记录在服务器,通过响应报文的Set-Cookie传给客户端;
    3. 客户端接收服务器传回的Session ID,将其作为Cookie 保存在客户端。后续向服务器发送请求,会自动发送Cookie,服务器通过检验Session ID区分用户身份;

    Cookie和Session的区别:

    • Cookie数据存放在客户端,Session数据存放在服务器,Session的生成对Cookie有一定的依赖关系;
    • Cookie不太安全,存储在客户端有被串改的风险;Session在服务器访问量增多时,影响性能;
    • Cookie的有效期可以手动设置,Session在浏览器关闭时就会过期;

    相关文章

      网友评论

        本文标题:HTTP协议

        本文链接:https://www.haomeiwen.com/subject/sjbcnqtx.html