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头信息(二)——请求头信息(一)

前言

请求头信息是发送请求时专用的头信息,本节将会介绍:

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Proxy Authorization
  • Expect
  • From
  • Host
  • Max-Forwards
    10种头信息的用法,含义及作用

下面的‘用户代理’指的是浏览器,代理服务器,缓存服务器等代替人类用户发送请求的软件/服务器

1. Accept

<!--
客户端接受:
1.html,权重为1
2.xml,权重为0.9
3.任何文件,权重为0.8
-->
Accept:text/html,application/xml;q=0.9,*/*;q=0.8

Accept字段表明了用户代理能够处理的文件媒体类型,及其优先级。一次可以指定多个类型,用,分割

  • 媒体类型采用type/subtype的形式表明
  • 优先级采用q=xx表明,权重值在0~1之间(可精确到小数点后3位),1最高,0最低(表示不接受)。默认为1
  • 优先级与其指代的媒体类型之间用;分割
    服务器从候选的列表中优先选择权重高的文件类型,并在响应头中使用Content-Type标明

2. Accept-Charset

<!--接受使用:iso-8859-5和unicode-1-1字符集编码的文件-->
Accept-Charset:iso-8859-5,unicode-1-1;q=0.8

Accept-Charset表明用户代理支持的字符集及他们的相对优先顺序,用q表示优先级。一次性可指定多个字符集,用,隔开
服务器在列表中优先选择权重值高的字符集。并使用Content-Type标明

3. Accept-Encoding

<!--内容可以使用gzip或者deflate压缩-->
Accept-Encoding:gzip,deflate;q=0.8

Accept-Encoding字段表明了用户/代理可以接受的内容编码方式。
一些编码的方式的例子:

  • gzip:表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式。
  • compress:采用 Lempel-Ziv-Welch (LZW) 压缩算法。
  • deflate:采用 zlib 结构和 deflate 压缩算法。
  • br:表示采用 Brotli 算法的编码方式。
  • identity:不压缩。除非特别指明,这个标记始终可以被接受。
  • *:任意编码方式

4. Accept-Language

<!--可以接受以下语言:
	1. 中文(大陆)
	2. 中文,权重0.9
	3. 英语(美国),权重0.8
	4. 英语,权重0.7
	5. 任意语言,权重0.5
-->
Accept-Language:zh-cn, zh;q=0.9, en-us;q=0.8, en;q=0.7, *;q=0.5

Accept-Language表明用户代理可使用理解的自然语言。更多的语言编码参考:语言代码表
服务器会有限选择其中权重值较高的语言,使用Content-Language响应头标明其选择

5.Authorization

<!--使用基本验证类型的凭证-->
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

Authorization用于用户身份验证。通常会在服务器返回401 Unauthorized状态码以及WWW-Authenticate 响应头信息之后在后续请求中发送此请求头信息
语法:

Authorization: <type> <credentials>
  • <type>:验证类型。 常见的是 “基本验证(Basic)” 。其他类型包括
  • <credentials>:凭证
    如果使用“基本验证”方案,凭证通过如下步骤生成:
    • 用冒号将用户名和密码进行拼接(如:aladdin:opensesame)
    • 将第一步生成的结果用 Base64 方式编码(YWxhZGRpbjpvcGVuc2VzYW1l)

6. Proxy Authorization

Proxy-Authorization: <type> <credentials>

Authorization的不同点在于,这个首部适用于客户端向代理服务器认证,通常是在接收到代理服务器返回的407 Proxy Authentication Required状态码后添加

7. Expect

<!--希望服务器可以返回100状态码-->
Expect: 100-continue

Expect字段表示一个期望条件。HTTP 1.1版本中只有一个取值100-continue。啥意思?看例子:

PUT /somewhere/fun HTTP/1.1
Host: origin.example.com
Content-Type: video/h264
Content-Length: 1234567890987
Expect: 100-continue

客户端:接下来我想发送一个视屏文件给你,这个视频文件有1234567890987字节这么大,你能不能接收?能的话就返回100 contine状态码给我
如果服务器可以接收就会返回100 contine状态码,否则返回417 Expectation Failed状态码

8.From

<!--发起这个请求的人类的电子邮箱是webmaster@example.org-->
From: webmaster@example.org

该头信息包含一个电子邮箱地址,这个电子邮箱地址属于发送请求的用户代理的实际掌控者(人类用户)。通常,其目的就是为了显示搜索引擎等用户代理的负责人的电子邮箱地址。

如果你在运行一个机器人代理程序(比如爬虫),那么 Form 首部应该随请求一起发送,这样的话,在服务器遇到问题的时候,例如机器人代理发送了过量的、不希望收到的或者不合法的请求,站点管理员可以联系到你。

9. Host

Host: <host>:<port>
  • host:主机名
  • port:端口,可省略。默认端口号:如果是HTTP请求,则是80。如果是HTTPS请求,则是443

例子:

Host: xxx.example.com

该首部告知服务器请求的资源所在的互联网主机名和端口号(其实就是URL)。

有同学可能有疑问:URL不是已经在浏览器地址栏写了吗,为什么还要用Host指定。这就牵扯到一个问题,浏览器是如何根据URL来找到目标主机的?

浏览器并不是根据URL来找目标主机的,而是根据IP地址,一个主机只有一个IP地址。所以就需要一个中间者将URL转变为IP地址。这个中间者叫做:DNS服务器。

当我们在浏览器输入URL,并开始发起请求时。浏览器首先会向DNS服务器发送请求,将URL转变为IP地址。然后根据IP地址寻找目标主机。

这就存在一个问题:如果一个服务器上部署了多个站点,每个站点都有不同的URL怎么办?比如:
www.X1.comwww.X2.com在同一个主机上,这个主机的IP地址是123.123.123.123。经过DNS解析,www.X1.comwww.X2.com的IP地址都是123.123.123.123

浏览器找到了这个主机,说我想要XX资源
主机:你想要谁的XX资源
浏览器:我也不知道,我就要XX资源
主机:(沙雕),拜拜了您呐。

所以知道Host的作用了吧。Host头信息在HTTP 1.1版本中是唯一一个要求必须包含在请求头信息中的头信息。如果请求头信息中没有包含Host头信息或者不止一个Host首部,很大概率会收到400 Bad Requst响应。

为什么是很大概率,而不是一定会?
因为并不是每个人都会遵守协议

如果服务器未设定主机名,可以给个空值:

Host:

10. Max-Forwards

<!--最多转发10次-->
Max-Forwards:10

该字段指定请求最多可以经过几个服务器,每经过一个,就会把值减一,当值为0时,返回响应

这篇到此结束,下篇将介绍:

  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Range
  • Refer
  • TE
    9个请求头信息。
    关注我,获取最新的更新

Reference

[1]. HTTP Headers

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

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