一篇让你彻底了解 http 请求报文和响应报文的结构
1.序
用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP 报文本身是由多行数据构成的字符串文本。HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行来划分。通常,并不一定要有报文主体。
2.请求报文
HTTP 的请求报文由四部分组成(请求行+请求头部+空行+请求体):
真实数据
①是请求方法,GET 和 POST 是最常见的 HTTP 方法,除此以外还包括 DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持 GET 和 POST,Spring 3.0 提供了一个 HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的 HTTP 方法(实际上还是通过 POST 提交表单)。服务端配置了 HiddenHttpMethodFilter 后,Spring 会根据_method 参数指定的值模拟出相应的 HTTP 方法,这样,就可以使用这些 HTTP 方法对处理方法进行映射了。
请求方法详解一篇让你彻底搞定 HTTP 方法与状态码
②为请求对应的 URL 地址,它和报文头的 Host 属性组成完整的请求 URL,
③是协议名称及版本号。
④是 HTTP 的报文头 ,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
Client-IP:提供了运行客户端的机器的 IP 地址
From:提供了客户端用户的 E-mail 地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求 URI 的文档的 URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端 CPU 的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的 cookie 版本
⑤是报文体,它将一个页面表单中的组件值通过 param1=value1¶m2=value2 的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求 URL 也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
3.响应报文
HTTP 的响应报文也由四部分组成( 响应行+响应头+空行+响应体):
真实数据
①报文协议及版本;
②状态码及状态描述;
状态码详解https://mp.weixin.qq.com/s/xxxS5qG244F6L10Y_ZxyGQ
③响应报文头,也是由多个属性组成;
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对 HTML 文档来说,就是 HTML 文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与 Set-Cookie 类似
WWW-Authenticate:来自服务器的对客户端的质询列表
④响应报文体,即我们真正要的“干货”。
参考资料 :
1.https://my.oschina.net/megan/blog/269968
2.《图解 HTTP》
原文地址:mp.weixin.qq.com/s/CLMr69mYx…
推荐阅读
纳尼?SpringCloud要被淘汰了?IT行业下一个趋势是什么?
看完三件事
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 Java 斗帝 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀
评论