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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【深入浅出HTTPS】理解HTTP -> 正文阅读

[网络协议]【深入浅出HTTPS】理解HTTP

本文参考:
【深入浅出HTTPS】(作者:虞卫东)书籍,github地址:https://github.com/ywdblog/httpsbook

【MDN】中文译文地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept
【MDN】英文原文地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept

HTTP的定义

HTTP:超文本传输协议,它是在互联网中在客户端和服务器进行通信的一种规则,它规定了客户端以何种方式去向服务器请求资源,和服务器以何种方式把资源返回给客户端。

HTTP语义

HTTP消息包括两个部分:HTTP语义HTTP实体
http 消息由三部分组成:

  • 请求行或响应行
  • HTTP 头部(请求头、响应头)
  • HTTP 实体 (请求实体、响应实体)

请求行、响应行和HTTP头部,都属于 HTTP 语义信息,客户端和服务器用HTTP语义信息进行交流。
HTTP实体,由浏览器处理后展示在页面上。

请求消息

这里是墨刀网站某个页面的某个请求接口内容。
谷歌浏览器F12打开控制台,点击Network或者网络,随意点开一个接口,就可以看到这种请求消息。
请添加图片描述

请求行

请求行由请求方法URLHTTP版本组成。

GET /app/adfdsff?xx=dgg HTTP/1.1

GET: 请求方法,用于获取互联网资源的方法
/app/adfdsff?xx=dgg:URL,服务器根目录下的app/adfdsff文件,携带了xx=dgg的参数
HTTP/1.1:使用的协议是HTTP的1.1版本

请求头

Accept:

用于描述客户端希望接收的响应体的数据类型,希望服务器返回什么类型的数据。
举例:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;
text/html: HTML格式
application/xhtml+xml: XHTML格式
application/xml: XML数据格式
image/avif: avif图片格式
image/webp: webp图片格式
image/apng: apng图片格式
image/avif: avif图片格式
*/*: 任意格式
q: 相对质量值,表示偏好,值越大,就越希望优先获取某个数据格式,表示该格式被响应的排序越靠前。使用的值按照相对质量值(称为权重)表示的偏好顺序排列。

Accept-Ecoding:

表示客户端支持的压缩算法,客户端希望从服务器返回以该种压缩算法压缩的数据。

HTTP 请求头 Accept-Encoding 会将客户端能够理解的内容编码方式——通常是某种压缩算法——进行通知(给服务端)。通过内容协商的方式,服务端会选择一个客户端提议的方式,使用并在响应头 Content-Encoding 中通知客户端该选择。
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *

* 匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序

// 多种算法存在时, 可以使用相对质量值来给算法做权重排序:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5

MDN链接跳转:Accept-Ecoding | MDN

Accept-Language:

表示客户端支持的语言
MDN链接跳转:Accept-Language | MDN

Connection:

表示连接方式,保持连接或是关闭连接。keep-alive保持连接,close关闭连接。通常默认是keep-alive
MDN链接跳转:Connection | MDN

Cookie:

表示服务器发送到客户端,并保留在客户端本地的一小块数据。这块数据用于,客户端再次向同一个服务器发送请求时,携带上这份服务器留在客户端的数据,告诉服务器两次请求,是来自同一个客户端。可用于保持用户的登录状态。
MDN链接跳转:Cookies | MDN

Host:

表示请求将要发送到某个服务器主机名的某个端口
Host: :
Host: free.modao.cc =====> 发送的服务器主机名是 free.modao.cc
如果没有包含端口号,会自动使用被请求的服务器的默认端口,HTTPS的URL默认端口是443,HTTP的URL默认端口是80。

所有HTTP/1.1 请求报文中必须包含一个Host头字段。对于缺少 Host头或者含有超过一个 Host头的HTTP/1.1 请求,可能会收到 400 状态码(Bad Request)

MDN链接跳转:Host | MDN

Sec-Fetch-Dest:

获取元数据标头:表示指示请求的目的地,即如何使用获取的元数据
Sec-Fetch-Dest: document
返回的数据将会以 HTML 的 document 文档的形式呈现。(个人理解)
MDN链接跳转:Sec-Fetch-Dest | MDN

只要包含前缀 Sec- ,都属于应用程序禁止修改的 HTTP 消息头,用户代理保留全部对它们的控制权

Sec-Fetch-Mode:

获取元数据标头:表示一个请求的模式.
这使得服务器能够区分: 来自用户在 HTML 页面之间导航的请求,以及加载图像和其他资源的请求。例如,
Sec-Fetch-Mode: navigate ,此标头用于顶级导航请求,而无 cors 用于加载图像(不会因为跨域问题导致无法加载图片)。(个人理解)
原文:

Broadly speaking, this allows a server to distinguish between: requests originating from a user navigating between HTML pages, and requests to load images and other resources. For example, this header would contain navigate for top level navigation requests, while no-cors is used for loading an image.

中文译文-MDN链接跳转:Sec-Fetch-Mode | MDN
英文原文-MDN链接跳转:Sec-Fetch-Mode | MDN

Sec-Fetch-Site:

获取元数据标头:表示请求发起者的来源与目标资源来源之间的关系,即我在 www.baidu.com 页面,发送了一个获取图片的请求到 image.baidu.com 的服务器主机,www.baidu.com 和 image.baidu.com 两个服务器是什么关系。

Sec-Fetch-Site: cross-site =====> 不同域名,跨域了
Sec-Fetch-Site: same-origin =====> 同源(协议+主机名+端口 都相同,https://www.baidu.com:443)
Sec-Fetch-Site: same-site =====> 同站(二级域名+有效顶级域名 相同,比如www.baidu.com和image.baidu.com,有效顶级域名是.com,二级域名是 .baidu,www.baidu.com和image.baidu.com 都是 baidu.com,所以同站)
Sec-Fetch-Site: none ====> 这一请求与任意上下文无关,例如站点、源,或者框架。当用户采用某些方式发起请求时该值会被使用,例如:直接在地址栏中输入URL、打开一个书签,或者往浏览器窗口中拖放一个文件。

参考来源:彻底搞懂「同源same-origin」和「同站same-site」的区别 - 掘金 - 作者:乔珂力

MDN链接跳转:Sec-Fetch-Site | MDN

Sec-Fetch-User:

获取元数据标头:表示一个导航请求是否由用户激活触发
Sec-Fetch-User: ?0
Sec-Fetch-User: ?1
?0:导航请求由用户激活触发。
?1:导航请求由用户激活以外的原因触发。

中文译文-MDN链接跳转:Sec-Fetch-User | MDN
英文原文-MDN链接跳转:Sec-Fetch-User | MDN

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:32:39  更:2022-05-24 18:32:49 
 
开发: 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年12日历 -2024/12/29 11:44:16-

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