简介:
http协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,所有的WWW文件都必须遵循这个标准。http是基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。
http协议工作于客户端-服务端架构上,浏览器作为Http客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
HTTP特点:
- 支持客户/服务器模式。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST等。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户与服务器之间的http连接是一种一次性连接,我们在每一次连接中只能处理一个请求,当服务器返回本次请求的应答后边立即关闭连接,下次请求需要重新建立连接。这种一次性连接主要是考虑到WWW服务器是面对互联网中成千上万个用户,且只能提供有限个连接,所以服务器不能让一个连接处于等待状态,及时的释放连接可以提高服务器的执行效率。
每次连接只处理一个请求,采用这种方式可以节省传输时间,并且节省连接资源。但现在的网页越来越复杂,我们在客户端浏览器访问的某个html或者其他类型的Web页中包含有其他的web资源(如javascript文件,图像文件,CSS文件等),每遇到这样的一个web资源,浏览器就需要重新建立一个http会话,可见这种短连接的形式已经不适合当前的环境。在最早http/0.9版本上,使用的就是这种一次性连接,在http/1.0中仍然是使用这种一次性链接的方式,但是已经开始有了长连接也就是持久连接的概念,并且有了初步的支持。到1999年的http/1.1已经默认支持长连接,使用长连接的http协议,会在响应头加入Connection:keep-alive。在别的博主那里有了解到,真正的长连接短连接指的并不是http连接,因为http只是一种简单的请求-响应协议,真正意义上的连接指的是TCP的连接。TCP连接是一个双向通道,他是可以保持一段时间不关闭的。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
TCP短连接长连接都由客户端发起,而TCP长连接的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务端器端检测到这种半开放的连接。也因为短连接、长连接的实现在HTTP之外,与HTTP无关。