HTTP报文分析
HTTP协议:
HTTP (HyperText Transfer Protocol, 超文本传输协议)是浏览器与Web服务器之间的通信协议,是传递消息的规范和要求。
- HTTP请求页面如果是以html为后缀名,则直接发送给请求者
- 如果是PHP、asp的后缀名,则返回运行结果(运行结果仍然是html页面)
HTTP报文
- 客户端发送的叫请求报文
- 服务器发送的叫响应报文
两种报文都分为报文首部和报文主体
请求报文和响应报文结构差异:
- 请求行:请求报文里面有
- 状态行:响应报文里面有
- 首部字段:通用
- 其他:比如HTML页面。
实例分析:
请求报文
GET /adu.gif?channelid=stub.firefox.com.cn&fxversion=90.0.2&ceversion=2021.7&ver=2_2&pk=%7Bfc73e7f6-7e2c-40fb-bc0b-5534bb0db452%7D&uk=%7B33db2b58-6dee-461d-bd8f-38555ee9aa2e%7D&cehome=true&locale=zh-CN&age=1&default=false&defaultHttp=false&flash=&tracking=3&now=1628642707377 HTTP/1.1
Host: adu.g-fox.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
GET /canonical.html HTTP/1.1
Host: detectportal.firefox.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Pragma: no-cache
Connection: close
如上两个报文都是一个报文:区别在于:第一个报文时真正的url内容:
adu.gif?channelid=stub.firefox.com.cn&fxversion=90.0.2&ceversion=2021.7&ver=2_2&pk=%7Bfc73e7f6-7e2c-40fb-bc0b-5534bb0db452%7D&uk=%7B33db2b58-6dee-461d-bd8f-38555ee9aa2e%7D&cehome=true&locale=zh-CN&age=1&default=false&defaultHttp=false&flash=&tracking=3&now=1628642707377
第二个报文则时以HTML的形式显示的
/canonical.html
分析简化,以第二个报文为主:
状态行
GET /canonical.html HTTP/1.1
首部字段;
Host: detectportal.firefox.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Pragma: no-cache
Connection: close
所以可见:请求报文中含有自己的一些信息,比如支持语言、编码、缓存等。
响应报文
GET / HTTP/1.1
Host: home.firefoxchina.cn
Cookie: Hm_lvt_dd4738b5fb302cb062ef19107df5d2e4=1628583584,1628584261,1628592256,1628641975; acw_tc=65c86a0b16286419756212704ea0388a03b8b5fc96d3da1a0abfa938ec89a5
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Te: trailers
Connection: close
不难发现,响应报文在原有报文的基础上加了一些内容,其中包括Cookie信息。
但是在真正的响应报文中,还会附带如下的报文返回内容:
使用这个方法可以看到我们请求的内容:
curl -i -s -k -X $'GET' \
-H $'Host: g1.dfcfw.com' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0' -H $'Accept: image/webp,*/*' -H $'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' -H $'Accept-Encoding: gzip, deflate' -H $'Connection: close' -H $'Referer: http://same.eastmoney.com/' \
$'http://g1.dfcfw.com/g3/201905/20190514163924.jpg'
可以看到,后面的乱码请求的是:
'http://g1.dfcfw.com/g3/201905/20190514163924.jpg'
请求报文字段代表:
- get是最常用的方法,通常用于请求服务器发送的某个资源
- post方法可以向服务器提交参数及表单,包括文件流等
- head方法与get方法类似,但是在服务器响应中只返回首部
- put方法与get方法从服务器读取文档相反,put方法会向服务器写入文档
- trace回显浏览器的请求
- options方法请求web服务器告知其支持的各种功能
- delete方法请求服务器删除请求URL所指定的资源
响应报文的状态码:
- 100-199信息性状态码
- 200-299成功状态码
- 300-399重定向状态码
- 400-499客户端错误状态码
- 500-599服务器错误状态码
响应报文字段:
server:服务器指纹
set-Cookie:向浏览器端设置cookie
last-Modified:服务器通过这个头信息告诉浏览器,资源的最后修改时间
content-length:请求正文的长度
location:重定向目标页面
refresh:服务器通过refresh头告诉浏览器定时刷新浏览器
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15167791.html