本系列第一节,咱们回顾了与HTTP协议有关的基本术语和概念,本文将分析HTTP协议的基本原理与机制html
HTTP协议的用途
HTTP协议用于客户端与服务器之间的通讯,在通讯线路两端,一定一端是客户端,另外一端是服务器。
注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,创建在传输层协议TCP之上。客户端经过与服务器创建TCP链接,以后发送HTTP请求与接收HTTP响应都是经过访问Socket接口来调用TCP协议实现。安全
请求报文服务器
GET /index.html HTTP/1.1 Host: www.cnblogs.com/ACFLOOD Content-Length: 16
请求报文是由请求方法,请求URI,协议版本,可选的首部字段以及内容实体构成。session
本例中,GET表示请求方法,/index.jsp是请求URI,HTTP/1.1是协议版本,其他的是首部字段。响应报文less
HTTP/1.1 200 OK Date: Mon, 10 May 2016 07:50:15 GMT Content-Length: 300 Content-Type: text/html
响应报文基本上由协议版本,状态码(返回请求成功或失败状况),对状态码的解释短语,可选的首部字段以及内容实体构成。jsp
本例中,HTTP/1.1表示协议版本,200表示状态码,OK是对状态码的描述,Date是响应日期,与Content-Length和Content-Type同样,都属于首部字段。加密
HTTP是无状态协议3d
HTTP是一种无状态(stateless) 协议,HTTP协议自己不会对发送过的请求和相应的通讯状态进行持久化处理。这样作的目的是为了保持HTTP协议的简单性,从而可以快速处理大量的事务,提升效率。代理
然而,在许多应用场景中,咱们须要保持用户登陆的状态或记录用户购物车中的商品。因为HTTP是无状态协议,因此必须引入一些技术来记录管理状态,例如Cookie。code
HTTP方法
在第一节,咱们曾辨析过GET与POST方法。实际上经常使用的HTTP方法远不止这些,下图展现了基本的HTTP方法。OPTIONS:询问服务器支持哪些方法。示例
请求报文
OPTIONS * HTTP/1.1 Host: www.cnblogs.com
响应报文
HTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS本例中,客户端经过OPTIONS *询问服务器支持的方法。响应报文最后返回了支持的 方法类型。
CONNECT:经过与代理服务器创建隧道,使用隧道协议加密以后,与服务器进行TCP通讯。经常使用的隧道协议有SSL(Secure Socket Layer)以及TLS(Transport Layer Security)。
非持久链接 和 持久链接
在实际的应用中,客户端每每会发出一系列请求,接着服务器端对每一个请求进行响应。对于这些请求|响应,若是每次都通过一个单独的TCP链接发送,称为非持久链接。反之,若是每次都通过相同的TCP链接进行发送,称为持久链接。
非持久链接在每次请求|响应以后都要断开链接,下次再创建新的TCP链接,这样就形成了大量的通讯开销。例如前面提到的往返时间(RTT) 就是在创建TCP链接的过程当中的代价。
非持久链接给服务器带来了沉重的负担,每台服务器可能同时面对数以百计甚至更多的请求。持久链接就是为了解决这些问题,其特色是一直保持TCP链接状态,直到遇到明确的中断要求以后再中断链接。持久链接减小了通讯开销,节省了通讯量。
图 持久化链接节省通讯开销
总结
本文分析了基本的HTTP运行机制与原理,经过一些实例分析了HTTP请求与响应的过程,以及常见的HTTP方法。对于HTTP链接的特性与机制也进行了探讨。固然这些只是简单的创建起基础的概念。后续的系列我还会对Cookie与session的原理,请求发起的过程以及Socket(套接字)的理,HTTP解析的过程进行深刻思考和剖析。
做者: I'm coding
连接:ACFLOOD
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
若是您以为本文对您有所帮助,就给俺点个赞吧!