Origin
用法
浏览器会在跨源请求以及由特定方法或 API 触发的同源请求上附加 Origin 请求头。该头部标识请求的来源,为服务器提供实施访问控制策略所需的信息。
该头部出现在所有 CORS 请求(包括预检请求)、使用 POST 的表单提交,以及由 Fetch API 或 XMLHttpRequest 发起的请求中。浏览器不会在同源的 GET 或 HEAD 导航请求中包含该头部。
与 Referer 头部不同,Origin 从不包含路径或查询字符串,因此其值更有利于保护隐私。Sec-Fetch-Site 头部通过将请求分类为 same-origin、same-site、cross-site 或 none,提供了一个互补的信号。
scheme://host:port
由协议、主机名和端口构成的完整源。当协议使用默认端口时(HTTP 为 80,HTTPS 为 443),端口会被省略。
Origin: https://example.com
Origin: https://api.example.re:8443
null
当源涉及隐私敏感或为不透明源时发送。沙盒化的 iframe、data: URL,以及跨源重定向都会产生 null 值。
Origin: null
注意
依赖 null 进行访问控制的服务器会造成安全漏洞。多个互不相关的上下文共享同一个 null 源,因此信任该值就等于向所有这些上下文授予了访问权限。
示例
来自前端应用的跨源 POST 请求包含 Origin 头部,服务器会先验证调用方,再返回启用了 CORS 的响应。
请求
POST /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Content-Type: application/json
响应
HTTP/1.1 201 Created
Access-Control-Allow-Origin: https://shop.example.re
Vary: Origin
预检 OPTIONS 请求会携带源,并附带预期使用的方法和头部。
请求
OPTIONS /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type