在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"的副作用最小。
在CORS上下文中,您可以只关注服务器是否应该允许请求继续进行,而不是试图使短域名和完全限定域名的Origin值相同:
假设要允许跨来源请求,响应服务器只需要使用合适的Access Control allow origin响应标头进行响应,则可以使用通配符值进行响应,表示任何传入的来源都可以:
Access-Control-Allow-Origin: *
如果您的客户端需要一个特定的域而不是通配符,那么如果您选择允许请求继续进行,无论Origin值是什么,您都可以让Web服务器只回显传入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
如果您需要对Web服务器是否以这种方式包含Access control Allow Origin标头进行更精细的控制,您可以在SetEnvIf命令中设置一个限制性更强的regex,而不是使用.+
。