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) 生成第二个.