如果你还搞不懂HTTP报文

组成

HTTP报文由三部分组成:

  1. 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
  2. 报文头:起始行后面有零个或多个字段。每个字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔,首部以一个空行结束
  3. 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体是要发送给服务器的数据;响应主体是要返回给客户端的数据。起始行和报文都是文本且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频)。当然,主体中也可以包含文本。

请求报文

一个请求报文起始行的例子:

GET /dir/index.html HTTP/1.1
  • GET:这里指明请求方法是GET,还有其它方法比如POST、DELETE、HEAD、OPTIONS、PUT、TRACE
  • /dir/index.html:这里指明URL,它和报文头的Host属性组成完整的请求URL
  • HTTP/1.1:这里指明协议名称及版本号

报文头里有很多的字段,具几个常见的例子:

  • Host:请求的服务器地址,比如www.google.com
  • Accept: 指明客户端可以接受的数据类型,比如text/html
  • Cookie:携带的Cookie信息
  • Cache-Control:对缓存进行控制,指明一个请求希望响应返回的内容在客户端要被缓存多久或是否缓存

还有非常多的字段,可以查阅文档,例如 HTTP MDN

最后举一个请求主体的例子:

name=ning&age=24

这里的请求主体就是我们提交的表单里的数据。

响应报文

一个响应报文起始行的例子:

HTTP/1.1 200 OK

跟请求报文比,响应报文的起始行里多了一个状态码来告诉客户端本次请求的处理结果。以下是状态码的类型:

图片描述

例如:
200 OK
303 See Other
304 Not Modified
404 Not Found
500 Internal Server Error

关于响应报文头里面的各种字段,可以查阅文档 HTTP MDN

总结

这些就是关于HTTP报文的基本知识点,其实内容最多地方是报文头里各种字段的用法,比如很多字段是用来做浏览器缓存控制的。因为涉及字段的内容太多了,更具体的字段用法可以查阅文档 HTTP MDN

法国留学的前端菜狗子,想跟大家一起成长。

2.6k 声望
3k 粉丝
0 条评论
推荐阅读
React中富文本编辑器的技术选型调研
富文本编辑器是项目中不可或缺的部分,目前市面上可以选择的富文本编辑器种类繁多,如何在项目中选择一款集轻量,美观,稳定,坑少,满足需求的富文本编辑器变成了团队中一个重要的问题。

刘宁Leo15阅读 7.6k评论 2

基于QUIC协议的HTTP/3,你了解多少?
前言了解一下HTTP发展史:HTTP/0.9-HTTP/1.0-HTTP/1.1-HTTP/2.0多个TCP连接 {代码...} Keep-alive {代码...} 管线化 {代码...} 多路复用 {代码...} {代码...} 并行多路复用的请求和响应不会相互阻塞尽管传输多个...

Henryk2阅读 1.1k评论 1

gitlab-ce将https修改为http
索性我们禁用gitlab的https功能,将期恢复为http。后期我们再在部署一个nginx进行数据转发,然后在nginx上起用https并设置证书。这样应该就规避了gitlab的证书错误问题。

myskies1阅读 615

设计模式那些事(3)——使用建造者模式封装go的http库
{代码...} 具体实现 {代码...} 使用 {代码...}

爆裂Gopher1阅读 752

封面图
Hertz 性能持续优化,如何准确进行 Hertz 压测?这里有一份性能测试指南
2021 年 9 月 8 日,字节跳动宣布正式开源 CloudWeGo。CloudWeGo 是一套字节跳动内部微服务中间件集合,具备高性能、强扩展性和稳定性的特点,专注于解决微服务通信与治理的难题,满足不同业务在不同场景的诉求。...

CloudWeGo1阅读 685

封面图
为什么使用 golang http包 会把 linux 句柄打满?
请求 https 的地址,为了绕过 tls ,加上了 TLSClientConfig: &tls.Config{InsecureSkipVerify: true} 配置

阿兵云原生阅读 784

封面图
从ABNF读懂HTTP协议格式
HTTP(Hyper Text Transfer Protocol)超文本传输协议HTML( Hyper Text Markup Language)超文本标记语言URI(Uniform Resource Identifier)用于标识某一互联网资源名称的字符串(uri 包括了 url,url 用于全网...

一颗冰淇淋阅读 693

法国留学的前端菜狗子,想跟大家一起成长。

2.6k 声望
3k 粉丝
宣传栏