Http请求头分析

http协议在传输的时候是用2进制传输文本数据的,客户端和浏览器交互是http请求报文和响应报文

http报文格式是


一个常见的请求头格式如:

POST http://localhost:3000/api HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 0
User-Agent: ApiPOST Runtime/V2.6.1 +https://www.apipost.cn
Sec-Fetch-Site: none
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Accept: */*

{"a":2}

请求行

我们可以看到第一行就是请求行,分为Method,URI,和Version三个部分,每个部分用空格隔开
然后就是请求头,请求头部分是多行的,行之间用一个换行符隔开,
最后是数据体体,数据体和请求行是两个换行符隔开,看起来就像中间有个空行。

请求头

每个请求头部分的格式是:

  • [字段名][分隔符]]字段值][换行符]
    字段名是不区分大小写的,不能含有空格(有空格chrome请求失败)
    字段名和分隔符之间不能有空格
    字段值无限制

实体

具体传输的数据,是转化成为字符串之后的数据,POST请求有实体,而GET没有,因为GET不能用body传参数。

实体是请求报文空行之后的数据。

比如传递的参数是

{
    a:1,
    b:2
}

比如使用json形式传递参数,实体字符串是:

// JSON格式化后的字符串
{a:1,  b:2}

比如使用x-www-urlunencode形式传递参数,实体字符串是:

a=1&b=2

比如使用formdata形式传递参数,实体字符串是:

------WebKitFormBoundaryBwrgOMvARdTvF69I
Content-Disposition: form-data; name="a"

1
------WebKitFormBoundaryBwrgOMvARdTvF69I--
Content-Disposition: form-data; name="b"

2
------WebKitFormBoundaryBwrgOMvARdTvF69I--

你可能感兴趣的:(Http请求头分析)