http 标头的威力以及你之前不知道的 4 个示例

2025-06-09

http 标头的威力以及你之前不知道的 4 个示例

这篇文章最初发布于此处

Hello Http(标头)

网络上的几乎所有内容都是通过http发送的,甚至非开发人员在使用互联网作为 URL 或链接中的关键字时也见过它

Http 代表超文本传输​​协议,它使我们能够在浏览器和服务器之间传输超文本。
这是一项伟大的技术,几乎自 Web 发明以来就已存在,并且不断发展,提供越来越多的强大功能。

什么是Http 标头

作为开发者,你可能听说过 http 标头,至少在听说 CORS 策略的时候听说过。
在开发网站时,你肯定听说过这个问题。
但是,http 标头究竟是什么?还有什么其他用途呢?

让我们首先了解它们的作用以及如何使用它们。

当浏览器请求资源(例如本博客的页面)时,它会向服务器发出请求。
该请求如下所示:

fetch("https://www.lorenzweiss.de/race_conditions_explained/", {
  credentials: "include",
  headers: {
    accept:
      "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "accept-language": "en,en-US;q=0.9,de-DE;q=0.8,de;q=0.7",
    "cache-control": "max-age=0",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "same-origin",
    "sec-fetch-user": "?1",
    "upgrade-insecure-requests": "1",
  },
  referrerPolicy: "no-referrer-when-downgrade",
  body: null,
  method: "GET",
  mode: "cors",
});
Enter fullscreen mode Exit fullscreen mode

因此,您可以看到资源的 URL 或位置、一些有关请求的信息以及许多包含请求信息的标头。
浏览器通过这些标头向服务器提供更多关于请求的信息。例如,它接受哪种数据类型,或者
客户端如何处理缓存。

发送请求后,服务器会回复,并且还会在回复中设置一些标头,如下所示:

:authority: www.lorenzweiss.de
:method: GET
:path: /race_conditions_explained/
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding: gzip, deflate, br
accept-language: en,en-US;q=0.9,de-DE;q=0.8,de;q=0.7
cache-control: max-age=0
cookie: _ga=GA1.2.1173972759.1584812492; _gid=GA1.2.2076192721.1594044231
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Enter fullscreen mode Exit fullscreen mode

还有一些信息是服务器想要告诉浏览器如何处理资源的,例如,
如果有 cookie,则必须确定使用了哪种编码等

基本上,在 http 上下文中,浏览器和服务器通信的标头用于扩展简单的
资源请求。您可以将其视为您从在线商店订购的包裹顶部附加的一张纸,它
为您提供有关上下文和所订购资源的更多信息。
大多数标头都有相当不错的默认设置,您无需费心考虑,但有些标头可能
非常重要,例如 CORS 标头。此外,还有许多您可能从未听说过的标头,它们非常有用
,了解如何使用它们对您大有裨益。

你不知道的标题

不用担心,本文不会讨论 CORS 标头。以下 HTTP 标头很少使用,但它们
非常强大,有助于显著改善服务器和浏览器之间的通信。

那么,让我们深入研究一下。以下是一些您可以设置的标题,它们非常有用且实用。

如果范围

什么?为什么?

假设你开始下载一个大型资源,例如视频、图片等,但由于连接问题中途停止。
If-Range可以告诉服务器,如果表示形式未发生改变,则发送 Range 中请求的部分。
这意味着只发送缺失的部分,而不是全部内容。

这在处理大量资源且移动设备等网络连接不稳定时非常有用。
因为即使连接中断,资源也可以分部分下载。

如何使用

它既可以与资源最后修改的日期一起使用,也可以与ETag一起使用,后者是帮助判断资源是否无效的关键。

If-Range: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
If-Range: <etag>
Enter fullscreen mode Exit fullscreen mode

例子

If-Range: Wed, 21 Oct 2015 07:28:00 GMT 
Enter fullscreen mode Exit fullscreen mode

各不相同

Vary起源于 Web 或 HTTP 被用于各种用途(而不仅仅是网页)的时代。

它基于使用 HTTP 以多种不同格式交换信息的理念。
它是如何做到这一点的呢?嗯,它告诉服务器在哪个标头中查找信息,以及如何呈现信息。

如今,如果您为不同的客户(例如
移动设备、平板电脑或台式机)提供不同的资源,这将非常有帮助
。想象一下,同一资源的三张不同大小的图片存储在服务器上,具体取决于设备。
那么您只需使用Vary标头即可告诉服务器检查设备,然后确定要发送的图片大小。

例子

对于与设备相关的图像的示例,您可以简单地传递“用户代理”来告诉服务器
它应该检查用户代理以获取设备信息。

Vary: User-Agent
Enter fullscreen mode Exit fullscreen mode

如何使用

Vary: <header>
Enter fullscreen mode Exit fullscreen mode

只需输入标头,服务器必须检查后才能决定发送哪个资源。

内容处置

如果我们回到向服务器发出请求的例子,例如加载某个网站,浏览器显然
必须显示响应的资源。
但也可能出现服务器发送资源,浏览器应该自动下载到用户电脑的情况,
例如图片或 PDF 等。
服务器可以通过标头告诉浏览器应该如何处理附加的资源Content Disposition

例子

通过定义,Content-disposition浏览attachment器就知道这是一个需要下载的资源,而不仅仅是
显示。

Content-Disposition: attachment; filename="data.pdf"
Enter fullscreen mode Exit fullscreen mode

如何使用

您可以将标题定义为inlineattachment,其中 `inline 始终是默认值。


Content-Disposition: <inline | attachment>

功能策略

这是一个相当新的标头,因此只有现代浏览器支持(抱歉,所有 IE 用户)。不过,
我还是想提一下,因为我认为它在某些用例中确实很有帮助。

基本上,就是要使用的 iframe。feature-policy tells the browser which features or apis the browser should provide to the document and its

例如,它可以禁止该网站内的所有脚本或 iframe 等,以允许摄像头或麦克风等敏感 API。

如何使用

Feature-Policy: <directive> <allowlist>
Enter fullscreen mode Exit fullscreen mode

directive是该功能的名称。您可以在此处查看完整的功能列表。
allowlist定义了允许使用该指令的来源。

例子

假设我们希望网站不使用麦克风或摄像头。使用此标头,
文档或包含的 iframe 将无法访问这些功能。

Feature-Policy: microphone 'none'; camera 'none'
Enter fullscreen mode Exit fullscreen mode

更多标题:

这里还有一些值得一提的标题:

结论

HTTPS 标头很棒,也很有用!但有时它们可​​能非常复杂,很难一目了然地了解哪些标头可用以及它们带来的好处。
此外,在开发网站时,尤其是在前端开发中,你不会经常接触它们,除非使用 CORS 标头。
但我认为这忽略了一些可能性。HTTP 标头更好地代表了服务器和
客户端之间的通信,我们都知道,沟通是良好关系的关键。

我希望我能帮你揭开 HTTP 标头的神秘面纱。如果我遗漏了什么有用的标头,
请随时给我发邮件或以任何方式联系我。

链接:https://dev.to/loweisz/the-power-of-https-headers-and-4-examples-you-did-not-know-before-10be
PREV
Metrics v3.0,美化您的 GitHub 个人资料的终极工具!
NEXT
为何选择 Kafka?事件驱动架构开发者指南