HTTP协议与TcP的关系

发布时间:2020-07-07 17:09:17   来源:网络


虽然HTTP10和HTTP11协议本身没有规定支持其传输的底层协议是哪种协议,但通常情况下都是架构在TCP传输协议之上的,有时出于安全的考虑,HTTP还需要经过TLS或者SSL层的封装,架构在SSL层之上的HTTP协议通常称为https( hypertext transfer protocol over secure socketLayer)协议。
 
HTTP客户端(比如浏览器)首先发起建立与服务器的TCP连接。一旦建立连接,客户端和服务器的HTTP进程就可以通过各自的套接字(Socket)来访问下层的TCP(比如TcP连接建立后,在客户端和服务器端各有一个套接字,此套接字包含了IP地址和端口号)。不管是客户端还是服务器端,套接字都是相应HTTP进程和TCP连接之间的接口。客户端可以通过套接字发送HTTP请求消息,也从自己的套接字接收HTP响应消息;类似的,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户端或服务器端HTTP进程一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务,这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTP响应消息最终也将无损地到达客户端。我们可从中看到分层网络体系结构的一个明显优势—HTTP不必担心数据会丢失,也无须关心TCP如何从数据的丢失和错序中恢复出来的细节。
 
HTTP协议是一个无状态的协议,即客户端向服务器端发送出请求时,服务器并没有存储关于该客户端和请求的任何状态信息。即便同一个客户端在几秒钟内再次请求同一个对象,服务器也不会响应说自己刚刚给它发送了这个对象。相反,服务器会重新发送这个对象,因为它已经彻底忘记自己早先做过什么,同一个客户端的这次请求和上次请求没有任何关系。
 
上面提到了客户端在发出HTTP请求时需建立好相应的TCP连接,又由于HTTP协议是无状态协议,每次的请求和响应都是独立的,所以在HTTP1.0中,HTTP使用的是非持久连接,非持久连接过程:
 
①客户端(比如浏览器)通过HTTP进程发起一个与服务器主机www..com的TCP连接。服务器使用端口号80监听来自客户端的HTTP请求。
 
②客户端向与所建TcP连接相关联的本地套接字发出一个HTP的请求消这个消息中包含一个路径名 ettv/movie/movie. shtml。
 
③服务器经由与TCP连接相关联的本地套接字接收这个请求消息后,从服务器主机的内存或硬盘中取出对象letit/movie/movie shtm1,经由同一个套接字发出包含该对象的响应消息,服务器同时告知TcP关闭TCP连接。
 
④客户端通过套接字接收这个响应消息后,向服务器端终止TCP连接。
 
⑤客户端对收到的/Letiti m/movie. shtml对象进行分析,发现其中含有包括JPEG在内的多个对象的引用。因此,对/Letty/ 1movie/ movie. shtml1中引用的其他对象重复步聚①~④。
 
以上步骤称为使用非持久连接,即TCP连接在每一次HTTP请求和响应完成后就关闭,如果客户端还要请求其他对象,需要重新为每个对象建立TCP连接。当一个Wcb页面内包含多个对象并全部显示时,客户端需要与服务器端建立的TCP连接数较多,对整个时延和网络流量造成了较大的影响。针对HTTP10中TCP连接不能重复利用的情况,HTTP11采用了效率更高的持续连接机制即客户端和服务器端建立TCP连接后,后续相关联的HTTP请求可以重复利用已经建立起来的TCP连接,不仅整个Web页面(包括基本的HTML文件和其他对象)可以使用这个持续的TCP连接来完成HTTP请求和响应,而且同一个服务器内的多个Web页面也可以通过同一个持续TCP连接来请求和响应。
 
通常情况下,这个持续的TCP连接会在空闲一段特定的时间后关闭,而这个最大空闲时间是可以设置的。持续连接的TCP连接一般可以分为两类:带流水线和不带流水线。在不带流水线的持续连接下,用户的 HTTP请求只能在上一个请求得到响应后才能发出;带流水线的持续连接则没有这个限制,客户端在Web页面发现引用时就可以发起HTTP请求,无须考虑上一个请求的响应消息是否已经收到。在HTTP1.1中,客户端和服务器都默认支持持续的带流水线的TCP连接。如果客户端使用HTTP1.1协议而又不希望使用持续的TCP连接,则可以将请求消息中Connection头的值设置为close;同理,使用HTTP1.I的服务器如果不希望使用持续的TCP连接,也可以将响应消息中的Connection头的值设置为close。只要请求或者响应中包含了close值,TCP连接将在本次HTTP请求和响应结束后关闭,下一次HTTP请求必须重新发起一个TCP连接。
 
CDN互联专业提供国内外高防cdn加速服务
 
猜你喜欢
上一篇:如何避免DDos攻击 下一篇:CDN性能监控
CDN话题