HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
HTTP Response
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
HTTP1.0 vs 1.1对比
功能 | http1.0 | http1.1 |
---|---|---|
长连接 | 默认关闭,在http头加入”Connection: Keep-Alive”,才能启用 | 默认开启,加入”Connection: close “,才关闭 |
缓存 | 使用Expire头域来判断资源的fresh或stale;定义了Pragma:no-cache头域不使用缓存;If-Modified-Since头域使用的是绝对时间戳,精确到秒; | 缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活;引入了一个ETag头域用于重激活机制 |
节约带宽 | 不支持断点续传 | 请求消息中引入了range头域,它允许只请求资源的某个部分,支持断点续传 |
头部Host域 | 不支持 | 支持 |
消息传递 | 头域Content-MD5校验,不支持分块 | 引入Chunkedtransfer-coding,支持分块 |
错误码 | 16个 | 新增24个 |
HTTP1.1 vs 2.0对比
功能 | http1.1 | http2.0 |
---|---|---|
多路复用 | 不支持,必须得开多个TCP连接 | 支持同一个连接并发处理多个请求 |
数据压缩 | 支持数据部分压缩,不支持头部压缩 | 支持头部压缩,支持数据压缩 |
服务推送 | 不支持,只能客户端主动从服务器获取资源 | 支持服务端推送资源给浏览器 |
传输方式 | 文本的方式传输数据 | 二进制数据传输 |
安全 | 不支持加密,得用HTTPS | HTTP2.0使用了TLS的拓展ALPN做为协议升级,对tls的安全性做了近一步加强 |