在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
通过域策略设置。
我能想到的唯一解决方法是要求所有“来源”页面强制使用规范网址(即将//foo
重定向到//foo.intranet.example.com
),而“丑陋网址”的副作用最小。< / p>
答案 0 :(得分:0)
在CORS上下文中,您可以只关注服务器是否应该允许请求继续进行,而不是尝试将Origin值设置为短值和完全限定域名相同,而不是是否存在Origin值:
假设为了允许跨源请求,响应服务器只需要使用合适的Access-Control-Allow-Origin响应头响应,您可以使用通配符值来响应任何传入的Origin是正常的:
SetEnvIf Origin "(.+)" origin_header_value=$1
Header set Access-Control-Allow-Origin "%{origin_header_value}e" env=origin_header_value
如果您的客户端需要特定的域而不是通配符,那么如果您选择允许请求继续,则无论Origin值是什么,您都可以让Web服务器回显传入的Origin头的值。
e.g。在Apache中,使用SetEnvIf和Header模块编写包含原始值的环境变量(如果该值与特定正则表达式匹配),如果该变量存在,则使用环境变量的值写入Access-Control-Allow-Origin响应头:
.+
如果您需要更精细地控制Web服务器是否以这种方式包含Access-Control-Allow-Origin标头,您可以在SetEnvIf命令中设置更严格的正则表达式,而不是使用{{1}}。 / p>