1

在 CORS 的上下文中,是否可以强制浏览器始终发送带有 FQDN 的 Origin 标头?目标服务应该看到Origin: http://website.intranet.example.com/page.html而不是Origin: http://website/page.html.

正如示例所暗示的,这是一个 Intranet 环境,目标是按子域过滤请求来源,以允许托管在域机器 ( *.intranet.example.com) 上的任何页面向也托管在同一域中的服务发出跨域请求。问题(如果您愿意的话)是 Intranet 站点通常被处理为http://website/连接特定 DNS 后缀所暗示的其余部分:intranet.example.com通过域策略设置。

我能想到的唯一解决方法是要求所有“原始”页面强制规范 URL(即重定向//foo//foo.intranet.example.com),而“丑陋 URL”的副作用最小。

4

1 回答 1

0

在 CORS 上下文中,与其尝试为短域名和完全限定域名获取相同的 Origin 值,您可以只关注服务器是否应允许请求继续进行,无论是否存在任何 Origin 值:

假设要允许跨域请求,响应服务器只需要使用合适的 Access-Control-Allow-Origin 响应头进行响应,您可以使用通配符值进行响应以说明任何传入的 Origin 都可以:

Access-Control-Allow-Origin: *

如果您的客户端需要一个特定的域而不是通配符,那么如果您选择允许请求继续进行,您可以让网络服务器回显传入的 Origin 标头的值,而不管 Origin 值所说的是什么。

例如,在 Apache 中,使用 SetEnvIf 和 Header 模块编写包含原始值的环境变量,如果该值与特定的正则表达式匹配,则如果该变量存在,则使用环境变量的值写入 Access-Control-Allow-Origin 响应标头:

SetEnvIf Origin "(.+)" origin_header_value=$1
Header set Access-Control-Allow-Origin "%{origin_header_value}e" env=origin_header_value

如果您需要更精细地控制网络服务器是否以这种方式包含 Access-Control-Allow-Origin 标头,您可以在 SetEnvIf 命令中设置更严格的正则表达式,而不是使用.+.

于 2015-11-04T06:58:53.670 回答