HTTP协议的基本原理与机制

HTTP协议,对于web相关开发者来说极为重要。本文将带您分析HTTP协议的基本原理与机制

HTTP协议的用途

《HTTP协议的基本原理与机制》
HTTP协议用于客户端与服务器之间的通信,在通信线路两端,必定一端是客户端,另一端是服务器。
注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。

请求与响应

HTTP协议规定,由客户端发起请求,服务器响应请求并返回信息。《HTTP协议的基本原理与机制》
如图,反映了一次HTTP请求并接收一个HTML文件的过程与时间消耗(RTT)。客户端通过TCP连接发送请求报文,服务器收到请求后向其传输文件并返回响应报文

请求报文

    
        GET /index.html HTTP/1.1

        Host: www.cnblogs.com/ACFLOOD 

        Content-Length: 16

请求报文是由请求方法请求URI协议版本可选的首部字段以及内容实体构成。

本例中,GET表示请求方法,/index.jsp是请求URI,HTTP/1.1是协议版本,其余的是首部字段

响应报文


        HTTP/1.1 200 OK 
        
        Date: Mon, 10 May 2016 07:50:15 GMT
    
        Content-Length: 300
    
        Content-Type: text/html

响应报文基本上由协议版本状态码(返回请求成功或失败情况),对状态码的解释短语可选的首部字段以及内容实体构成。

本例中,HTTP/1.1表示协议版本,200表示状态码,OK是对状态码的描述,Date是响应日期,与Content-Length和Content-Type一样,都属于首部字段

HTTP是无状态协议

HTTP是一种无状态(stateless) 协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。

然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie

HTTP方法

下图展示了基本的HTTP方法。
《HTTP协议的基本原理与机制》

  • GET:获取资源。通过URI请求访问已被识别的资源,经过服务器解析后返回相应内容。

  • POST:传输实体。例如登录注册时表单的提交。

  • PUT:传输文件。类似于FTP协议中的文件上传,PUT方法要求在请求报文的主体包含文件,保存到指定URI的位置。由于PUT方法没有验证机制,存在安全性问题,所以必须配合采用安全标准(如REST)。

  • HEAD:获得报文首部。不返回报文主体,仅返回首部。

  • DELETE:删除文件。DELELTE方法请求删除服务器上的资源,同样存在安全性问题。所以必须有验证机制与之配合。

  • OPTIONS:询问服务器支持哪些方法。示例:

    请求报文

    
        OPTIONS * HTTP/1.1
        
        Host: www.cnblogs.com
    

    响应报文

    
        HTTP/1.1 200 OK
        
        Allow: GET, POST, HEAD, OPTIONS
    

    本例中,客户端通过OPTIONS *询问服务器支持的方法。响应报文最后返回了支持的 方法类型。

    • TRACE:追踪路径。发送请求时,通过在Max-Forwards首部字段中填入数值,每经过一个服务器数值减一,当减为零之后停止传输,最后收到请求的服务器发出响应。

    • CONNECT:通过与代理服务器建立隧道,使用隧道协议加密之后,与服务器进行TCP通信。常用的隧道协议有SSL(Secure Socket Layer)以及TLS(Transport Layer Security)

非持久连接 和 持久连接

在实际的应用中,客户端往往会发出一系列请求,接着服务器端对每个请求进行响应。对于这些请求|响应,如果每次都经过一个单独的TCP连接发送,称为非持久连接。反之,如果每次都经过相同的TCP连接进行发送,称为持久连接

非持久连接在每次请求|响应之后都要断开连接,下次再建立新的TCP连接,这样就造成了大量的通信开销。例如前面提到的往返时间(RTT) 就是在建立TCP连接的过程中的代价。

非持久连接给服务器带来了沉重的负担,每台服务器可能同时面对数以百计甚至更多的请求。持久连接就是为了解决这些问题,其特点是一直保持TCP连接状态,直到遇到明确的中断要求之后再中断连接。持久连接减少了通信开销,节省了通信量。
《HTTP协议的基本原理与机制》图 持久化连接节省通信开销

总结

本文分析了基本的HTTP运行机制与原理,通过一些实例分析了HTTP请求与响应的过程,以及常见的HTTP方法。对于HTTP连接的特性与机制也进行了探讨。当然这些只是简单的建立起基础的概念。后续的系列我还会对Cookie与session的原理,请求发起的过程以及Socket(套接字)的研究,HTTP解析的过程进行深入思考和剖析。

作者: Project_Li

专栏编程梦工厂

参考资料:《图解HTTP协议》 《计算机网络:自顶向下方法》 etc

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果您觉得本文对您有所帮助,就给俺点个赞吧!

    原文作者:HTTP
    原文地址: https://segmentfault.com/a/1190000006191160
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞