HTTP协议的基本原理与机制

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

HTTP协议的用途

image
HTTP协议用于客户端与服务器之间的通讯,在通讯线路两端,一定一端是客户端,另外一端是服务器。
注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,创建在传输层协议TCP之上。客户端经过与服务器创建TCP链接,以后发送HTTP请求接收HTTP响应都是经过访问Socket接口来调用TCP协议实现。git

请求与响应

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

请求报文web

GET /index.html HTTP/1.1

        Host: www.cnblogs.com/ACFLOOD 

        Content-Length: 16

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

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

响应报文安全

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协议的简单性,从而可以快速处理大量的事务,提升效率。session

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

HTTP方法

下图展现了基本的HTTP方法。
image

  • 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链接状态,直到遇到明确的中断要求以后再中断链接。持久链接减小了通讯开销,节省了通讯量。
image图 持久化链接节省通讯开销

总结

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


做者: Project_Li

专栏编程梦工厂

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

著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

若是您以为本文对您有所帮助,就给俺点个赞吧!

相关文章
相关标签/搜索