简单的HTTP协议
- HTTP协议规定,请求从客户端发出,最后由服务器端响应该请求并返回。
请求报文
请求报文由请求方法、请求URI、协议版本、可选的首部字段和内容尸体构成。
- 可选的首部字段表示的意思是HTTP具有很多首部字段,可以从这些首部字段中选出一些放在报文首部,而不是首部字段对于报文是可填可不填的(至少Host字段必须加上)。
- 请求URI的填写方法
- 资源URI为完整的请求URI
- 在首部字段Host中写明域名或IP地址
- 如果不是请求资源,而是对服务器本身发起请求,可以使用 * 来代替请求URI
响应报文
响应报文是由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成
- 接下来我们来看一个实例
- 客户端向百度发送了一个HEAD请求(HEAD请求和GET请求很类似,但是只要求服务器端返回首部信息,在后面我们会详细解释),由于是HTTP/1.0,所以客户端加上了keep-alive要求进行HTTP持久连接。
- 百度服务器向客户端返回了200 OK(了解状态码,可以看另一篇文章返回结果的HTTP状态码)
HTTP是不保存状态的
HTTP是一种不保存状态的,即无状态 (stateless) 协议
- HTTP的无状态性质使得它可以更快的处理大量事务。
- HTTP的无状态性质也带来了一些问题,如当用户登录到一家购物网站,如果用户跳转到其他的页面,也应该能够保存登录状态(但是由于HTTP是无状态的,所以在不做另外处理的情况下,网站并不能掌握跳转到其他页面的是哪一个用户,也就无法保存用户的状态了),我们可以使用Cookie技术帮助HTTP管理状态。
告知服务器意图的HTTP方法
GET:获取资源
GET方法用来请求已被URI识别的资源。
POST:传输实体主体
POST方法用来传输实体的主体。
PUT:传输文件
PUT方法用来传输文件。
- PUT方法要求在请求报文的报文主体位置包含文件内容,然后保存到请求URI指定的位置。
- 由于安全问题,一般的Web网站并不支持PUT方法。
DELETE:删除文件
DELETE方法用来删除文件。
- DELETE方法按请求URI删除指定的文件。
- 由于安全问题,一般的Web网站并不支持DELETE方法。
OPTIONS:询问支持的方法
OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
TRACE:追踪路径
TRACE方法使得客户端可以对请求消息的传输路径进行追踪。
- 在发送TRACE请求时,向首部字段Max-Forwards中填入数值,每经过一个服务器转发就将该数值减一,当数值刚好减到0时,就停止继续转发,最后收到请求的服务器返回状态码200 OK的响应。
- TRACE方法容易引发跨站追踪攻击(XST,Cross-Site Tracing)。
持久连接节省通信量
- 在HTTP最初的版本中,每进行一次HTTP通信都需要断开一次TCP连接。
- 这使得当客户端请求一个包含多个图片的网页时(购物网站),请求HTML文档需要断开一次TCP连接,等到请求图片1又需要进行TCP连接,使得TCP连接频繁的建立和断开。
HTTP持久连接
HTTP持久连接解决了上述问题,它的特点是只要任意一方没有明确提出断开连接,则保持TCP连接。
- HTTP/1.1中所有连接默认都是持久连接,而HTTP/1.0中如果要进行持久连接,那么需要添加首部字段Connection: keep-alive
管线化
管线化技术建立于HTTP持久连接之上,它使得客户端不用等待服务器响应就直接发送下一个请求。
- 但只有接收到上一批请求的响应,客户端才会发送下一批请求,这就可能引起队头阻塞。