HTTP 的请求报文是指从客户端发送给服务器的报文,如下图:
一个 HTTP 请求报文由请求行(request line)、请求头部(header)、空行和请求数据(请求主体body)4个部分组成。如下图:
请求行由三部分组成:请求方法,请求URL(不包括域名),HTTP 协议版本
请求方法:HTTP协议提供了多个请求方法,分别为 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中 GET 和 POST 方法最常用。
请求URL:该 URL 用来告知服务器我们需要获取那个资源,例如:/images/default.png
HTTP协议版本:用来告诉服务器我们采用的 HTTP 什么版本,如:HTTP/1.1
HTTP请求报文请求行下紧接着就是请求头,请求头格式如下:
请求头名称: 请求头具体值
客户端可以通过 HTTP 报文请求头传递更多的信息给服务器,服务器根据客户端传递的请求进行相应的动作。可以说,请求头就是用来和服务器进行通信、协商用的。例如:
Accept 请求头指定客户端可以接收到的消息内容,例如:Accept: text/plain
Accept-charset 请求头指定游览器可以接受的字符编码,例如:Accept-charset: utf-8
Accept-Encoding 请求头指定web服务器可以返回的压缩编码类型,例如:Accept-charset: gzlp
Accept-Language 请求头游览器可接受语言,例如:Accept-Language: en,zh
Accept-Ranges 请求头指定可以请求网页实体的一个或者多个子范围字段
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。
请求数据不在 GET 方法中使用(GET 方法使用 URL 传递参数),而在 POST 方法中使用。POST 方法适用于需要客户填写表单的场合,与请求数据相关的最长使用的请求头部是 Cntent-Type 和 Content-Length。
下面是通过 Fiddler 软件抓包中某一个 HTTP 包的请求头,如下:
GET http://localhost/moban5718/ HTTP/1.1 Host: localhost Connection: keep-alive sec-ch-ua: "Chromium";v="21", " Not;A Brand";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost/ Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8