HTTP 协议规定了请求和响应的格式和行为,这里通过分析百度首页的请求和响应,来了解请求和响应中的各种参数。浏览器为Chrome。
请求
位置:Chrome ,Network,Headers,Request Headers
GET / HTTP/1.1 //请求行
Host: www.baidu.com //请求的服务器的主机和端口号,从URL中截取
Connection: keep-alive //表示服务器和客户端是否保持连接
Pragma: no-cache //用于指定缓存指令
Cache-Control: no-cache //用于指定缓存指令,通常这两个合用
Upgrade-Insecure-Requests: 1 //告诉服务器客户端支持自动升级http到https,并且响应的时候应该返回https
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 //用户代理,就是指浏览器,表示浏览器的类型、版本
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 //告诉服务器应该响应什么格式的文件,用逗号隔开,";q="表示优先级
DNT: 1 //DO NOT TRACK,1表示开,提示服务器不要跟踪记录用户信息,对应的,0表示关,即跟踪
Accept-Encoding: gzip, deflate, br //告诉服务器浏览器支持的编码格式,并以这这种格式响应
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4,ar;q=0.2,ja;q=0.2,en-US;q=0.2 //告诉服务器浏览器支持的语言,并响应这些语言的文件
Cookie: xxx //cookie随着请求一起发送个服务器
响应
位置:Chrome ,Network,Headers,Response Headers
响应的消息体在 Chrome ,Network,Preview或Response中可以看到
HTTP/1.1 200 OK //响应行,对应请求行,状态码200,表示成功
Bdpagetype: 2 //这里应该是百度自己定义的Bd即baidu,pagetype页面类型
Bdqid: 0xcefff6d900bbab4b //同理 baidu q id
Bduserid: 124652654 //同理,baidu user id
Cache-Control: private //表示仅客户端还可以缓存,代理服务器不能缓存
Connection: Keep-Alive //对应请求
Content-Encoding: gzip //对应请求,返回gzip格式的文件
Content-Type: text/html;charset=utf-8 //对应请求,返回html文件,编码为utf-8
Date: Sun, 24 Sep 2017 02:04:02 GMT //响应创建时间
Expires: Sun, 24 Sep 2017 02:04:02 GMT //设置一个过期时间
Server: BWS/1.1 //服务器的名称和版本
Set-Cookie: xxx //服务器设置的cookie
Strict-Transport-Security: max-age=172800 //再次访问时,间隔时间在设置的172800s之间,会强制以https形式访问,之后则恢复正常,跟随URL
X-Ua-Compatible: IE=Edge,chrome=1 //推荐使用那些引擎来渲染页面
Transfer-Encoding: chunked //表示输出内容长度不能确定,这跟http传输过程中的分块技术有关
这样大致就分析完了,这里做个小结。
请求中,Host 表示请求的主机和端口,由浏览器自动从URL中截取
响应除了满足请求的条件,还可以“随意”设置一些字段
请求 <===>响应
按照请求,响应内容。
- 请求行 ——> 响应行
- Accept: text/html ——> Content-Type: text/html
- Accept-Encoding: gzip ——> Content-Encoding: gzip
缓存相关 - If-None-Match ——> Etag
- If-Modified-Since ——> Last-Modified
还有一些没有提到的字段
请求
- Client-IP,客户端IP
- From,客户端邮箱地址
- Referer,提供了包含当前请求URI的文档的URL,即告诉服务器自己来自哪个页面
- Accept-Charset,告诉服务器能够发送的字符集
- ...
响应
- Allow,列出了可用的请求方法
- Location,用于重定向
- Content-MD5,主体的MD5校验和
- ...