Origin Header

Baseline 已广泛支持

此特性已经十分成熟,可在许多设备和浏览器版本上使用。自 2020 年 7 月以来,它已在各大浏览器中可用。

HTTP Origin 请求头指示了导致该请求的方案、主机名和端口)。例如,如果用户代理需要请求页面中包含的资源,或由其执行的脚本获取的资源,则页面的源可能会包含在请求中。

头类型 请求头
禁止请求头

语法

http
Origin: null
Origin: <scheme>://<hostname>
Origin: <scheme>://<hostname>:<port>

指令

null

源是“隐私敏感”的,或是不透明源(特定情况列在描述部分)。

<scheme>

所使用的协议。通常是 HTTP 协议或其安全版本 HTTPS。

<hostname>

源服务器的域名或 IP 地址。

<port> 可选

服务器监听的端口号。如果没有给出端口,则从方案推断出请求服务的默认端口(例如,HTTP URL 的80)。

描述

Origin 头与 Referer 头类似,但它不公开路径,并且可能为 null。它用于为源请求提供安全上下文,除非源信息敏感或不必要。

一般来说,用户代理会向以下请求添加 Origin 请求头:

上述规则有一些例外;例如,如果在no-cors 模式下发出跨域 GETHEAD 请求,则不会添加 Origin 头。

在许多情况下,Origin 头的值可能为 null,包括(但不限于):

  • 方案不是 httphttpsftpwswssgopher 之一的源(包括 blobfiledata)。
  • 跨域图像和媒体数据,包括 <img><video><audio> 元素中的数据。
  • 使用 createDocument() 以编程方式创建的文档,从 data: URL 生成的文档,或者没有创建者浏览上下文的文档。
  • 跨域重定向。
  • 使用 Content-Security-Policysandbox 指令(其值不包含 allow-same-origin)提供的文档。
  • 具有 sandbox 属性(其值不包含 allow-same-origin)的 iframe
  • 网络错误的响应。
  • 对于非 cors 请求模式(例如,基本表单提交),Referrer-Policy 设置为 no-referrer

注意: Stack Overflow 上有一个更详细的列表,列出了可能返回 null 的情况:浏览器何时发送 Origin 头?浏览器何时将 Origin 设置为 null?

示例

http
Origin: https://mdn.org.cn
http
Origin: https://mdn.org.cn:80

规范

规范
Web Origin 概念
# 第 7 节
Fetch
# Origin-Header

浏览器兼容性

另见