1. 程式人生 > >HTTP報文格式詳解

HTTP報文格式詳解

HTTP報文傳過來都是一堆的0x ASCII碼,諸如“41 63 63 65 70 74” 對應的是“accept” 單詞的十六進位制ASCII碼。

這些十六進位制的數字經過瀏覽器或者專用工具比如wireshark的翻譯,可以得到HTTP的報文結構。

Request報文

以下是wireshark抓出來的一段HTTP請求報文

GET /admin_ui/rdx/core/images/close.png HTTP/1.1
Accept: */*
Referer: http://xxx.xxx.xxx.xxx/menu/neo
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: xxx.xxx.xxx.xxx
Connection: Keep-Alive
Cookie: startupapp=neo; is_cisco_platform=0; rdx_pagination_size=250%20Per%20Page; SESSID=deb31b8eb9ca68a514cf55777744e339

HTTP的請求報文包括:請求行(request line)、請求頭部(header)、空行 和 請求資料(request data) 四個部分組成。

請求行包括: 請求方法,URL(包括引數資訊),協議版本這些資訊(GET /admin_ui/rdx/core/images/close.png HTTP/1.1)

請求頭部是一個個的key-value值,比如

  • Accept-Encoding: gzip, deflate
  • User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)

請求資料:GET方法沒有攜帶資料

Response報文

下面是wireshark抓出來的一段響應報文

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xacbbb9d800005133
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+f8b5e5b521b3644ef7f3455ea441c5d0
Date: Fri, 12 Oct 2018 06:36:28 GMT
Expires: Fri, 12 Oct 2018 06:36:26 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1433_21112_18560_26350_27245_22158; path=/; domain=.baidu.com
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

<!DOCTYPE html>
<!--STATUS OK-->

HTTP的響應報文包括:狀態行,響應頭,空行,資料(響應體)

狀態行包括:HTTP版本號,狀態碼和狀態值組成。

響應頭類似請求頭,是一系列key-value值

  • Cache-Control: private
  • Content-Encoding: gzip
  • Server: BWS/1.1
  • Set-Cookie: delPer=0; path=/; domain=.baidu.com

空白行

響應體:響應的data,本例中是一段HTML