IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【经典回顾】HTTP 的请求与响应报文 -> 正文阅读

[网络协议]【经典回顾】HTTP 的请求与响应报文

前言

  1. 基于 HTTP1.1,也就是目前最常用的 HTTP 协议版本,涉及部分 HTTP/2。

请求报文

让我们先来看一看基本的请求报文格式。注意的是,所有的内容均用 ASCII 码书写
在这里插入图片描述
请求报文由三部分内容组成:请求行,首部行,实体主体。

请求行

首先是请求行,它又由三个内容组成,分别是方法,URL 和 版本。其中 sp 表示空格,crlf 表示回车换行。

方法

首先方法,是指请求方法,在 HTTP1.1 中,一共有种请求方法,它们分别是 GETPOSTHEADPUTDELETEOPTIONSTRACECONNECT。其中最常用的也还是 GET 和 POST。
在这里插入图片描述

我们这里仅仅谈谈 GET 和 POST 方法,对于其它的方法,大家可以去 RFC 2616 这个文档中深入了解。

对于 GET 方法来说,它的作用就是请求指定资源,并且你所提交的查询信息会以键值对的形式出现在 URL 地址栏中。例如我们通过表单以 GET 的方式提交一个人关于姓名和年龄的信息,这个样子 /example/person_form.html?name=lili&age=12

显而易见,这暴露了一个问题,那就是一些敏感信息出现在了地址栏,所以一般我们并不使用 GET 来提交含敏感信息的内容,而是用 POST。

另外还要注意的一点是使用 GET 方法提交的信息,并不会使用实体主体,也就是说,实体主体为空。

URL

请求行的第二个内容就是 URL,URL 表示你要请求的对象。说道对象,这里不得不强调一下,所有的请求的资源都是对象,例如,我们请求一个 HTML 网页,网页上有三个图片,那么整个请求过程中就有个对象(即一个网页+三张图片)。

一个完整的 URL 结果是这样的: <协议>://<主机>:<端口>/<路径>

比如这是我的 CSDN 头像的 URL https://profile-avatar.csdnimg.cn/2b5de51bcc274a788d72fd8e4ef4f805_qq_34902437.jpg!1

通常在 HTTP 请求报文的源码中会省略显示协议,主机和端口,仅出现路径的部分,如 /example/temp.jpg

版本

然后是版本,这里指的是 HTML 的版本,目前最流行的版本是 HTTP/1.1,最新的版本是 HTML/2,一些网站现在也采用 HTML/2 协议。

比如,谷歌搜索就是采用 HTML/2 的版本。
在这里插入图片描述

首部行

首部行是一系列键值对的组成,它表明了携带的请求信息。

  • User-Agent:表明了浏览器身份标识字符串。例如 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
  • Connection:该浏览器想要优先使用的连接类型。例如 Connection: close
  • Host:请求头指明了请求将要发送到的服务器主机名和端口号。例如 Host: www.baidu.com

更多的的请求信息,你可以通过下面的 RFC 2616 或者 MDN HTTP Header 了解。

当然,现代浏览器中,我们有时会看到类似 :authority: msg.csdn.net 这样的请求头字段,事实上,这是 HTTP/2 中新增的一类特殊伪标头字段,主要是针对 HTTP/1.x 中的起始行的替代,具体可见这个链接

实体主体

一般来说,如果使用的是 POST 方法,则实体主体部分为 POST 提交的信息。

响应报文

在这里插入图片描述
响应报文也是由三部分组成:状态行首部行实体主体

状态行

状态行有三个字段,分别是版本(HTTP 版本),状态码(如 200)和短语(如,OK)。

常见的状态码如 200 表示成功,其对应短语为 OK。如果你想要查看所有的状态码和对应短语,请访问这个链接

首部行

它的作用同请求报文中的首部行作用相同,只不过字段不同罢了。下面举了一些例子:

  • connection: close 表示发送完响应报文后,关闭 TCP 链接。
  • date: Mon, 23 May 2022 09:07:55 GMT 表示发送响应报文的时间。
  • server: gws 表示使用的服务器是什么,这里的 gws 是谷歌网页服务器(Google Web Server)。
  • content-type: application/json; charset=UTF-8 表明发送的数据为 json 格式,字符编码为 UTF-8。
    更多的响应报文字段,请访问这个链接

实体主体

实体主体为报文的实际内容。

响应报文示例
在这里插入图片描述

参考与拓展

  1. 《计算机网络 - 自顶向下》
  2. 《计算机网络 - Andrew 著》
  3. RFC 1945:涉及 HTTP/1.0
  4. RFC 2616:涉及 HTTP/1.1
  5. RFC 7540:涉及 HTTP/2
  6. RFC 7541:涉及 HTTP/2
  7. HTTP Request Methods
  8. HTTP 请求头字段大全| HTTP Request Headers
  9. HTTP Headers【MDN】:常见的 HTTP Headers,包括 HTTP/2 中的新增内容。
  10. authority http header - in chrome dev tools
  11. Sec-Fetch-*请求头,了解下?
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:24:43  更:2022-05-26 15:25:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:45:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码