浏览器不会在Origin标头中发送FQDN

时间:2015-11-04 01:40:32

标签: http cross-domain cors fqdn

在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>

1 个答案:

答案 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>