跳到主要内容

7. HTTP Origin 头字段

7. HTTP Origin 头字段​

本节定义 HTTP Origin 头字段.

7.1 语法​

Origin 头字段具有以下语法:

origin              = "Origin:" OWS origin-list-or-null OWS
origin-list-or-null = %x6E %x75 %x6C %x6C / origin-list
origin-list = serialized-origin *( SP serialized-origin )
serialized-origin = scheme "://" host [ ":" port ]
; <scheme>, <host>, <port> from RFC 3986

7.2 语义​

当包含在 HTTP 请求中时, Origin 头字段表示 "导致" 用户代理发出该请求的一个或多个源; 具体由触发用户代理发出该请求的 API 定义.

例如, 考虑一个代表各源执行脚本的用户代理. 如果其中某个脚本导致用户代理发出 HTTP 请求, 用户代理可以 (MAY) 使用 Origin 头字段告知服务器: 该脚本导致用户代理发出请求时所处的安全上下文.

在某些情况下, 多个源共同导致用户代理发出 HTTP 请求. 在这些情况下, 用户代理可以 (MAY) 在 Origin 头字段中列出所有这些源. 例如, 如果 HTTP 请求最初由一个源发出, 但随后由另一个源重定向, 用户代理可以 (MAY) 告知服务器有两个源参与导致用户代理发出该请求.

7.3 用户代理要求​

用户代理可以 (MAY) 在任何 HTTP 请求中包含 Origin 头字段.

用户代理不得 (MUST NOT) 在任何 HTTP 请求中包含多个 Origin 头字段.

每当用户代理从 "隐私敏感" 上下文发出 HTTP 请求时, 用户代理必须 (MUST) 在 Origin 头字段中发送值 "null".

注: 本文档不定义隐私敏感上下文的概念. 生成 HTTP 请求的应用可以将上下文指定为隐私敏感, 以限制用户代理生成 Origin 头字段的方式.

生成 Origin 头字段时, 用户代理必须 (MUST) 满足以下要求:

  • 语法中的每个 serialized-origin 产生式都必须 (MUST) 是某个源的 ascii-serialization.

  • 语法中任意两个连续的 serialized-origin 产生式不能相同. 特别是, 如果用户代理将生成两个连续的 serialized-origin, 则用户代理不得 (MUST NOT) 生成第二个.