HTTP报文分析

Posted Zeker62

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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头告诉浏览器定时刷新浏览器

以上是关于HTTP报文分析的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议图--HTTP 报文首部之首部字段(重点分析)

HTTP报文分析(转载)

HTTP协议报文结构及抓包报文分析示例

http 请求的请求与响应的报文分析

HTTP报文分析

常用http响应报文分析