允许对 http 和 https 的跨源请求

Posted

技术标签:

【中文标题】允许对 http 和 https 的跨源请求【英文标题】:Allowing cross origin requests for http and https 【发布时间】:2015-06-25 14:28:12 【问题描述】:

我的网站同时支持 http 和 https 协议。但是在 .htaccess 文件中使用下面的代码,我只能设置一个域来允许 CORS 请求:

Header set Access-Control-Allow-Origin: http://example.com

我想为我的网站的 http 和 https 版本(不仅仅是“*”)允许 CORS,并在此处尝试了解决方案: Access-Control-Allow-Origin Multiple Origin Domains?

但问题是所有解决方案都依赖于请求中的 Origin 标头,该标头可能不存在并且也不安全。 (任何人都可以在他们的请求中添加一个原始标头)

我想知道请求是否已通过 https 提供,并使用此信息设置正确的 CORS 标头。像这样的:

SetEnvIf servedOverHttps httpsOrigin=true
Header set Access-Control-Allow-Origin: https://example.me env=httpsOrigin

SetEnvIf notServedOverHttps httpOrigin=true
Header set Access-Control-Allow-Origin: http://example.me env=httpOrigin

我怎样才能知道它是一个 https 请求?

【问题讨论】:

【参考方案1】:

您是否尝试过使用HTTPS 变量?

对于所有 https 请求,它将被设置为 "on"。 你的 .htaccess 应该是这样的

Header set Access-Control-Allow-Origin: http://example.com             #default
Header set Access-Control-Allow-Origin: https://example.com env=HTTPS   #override if https

【讨论】:

如果从 php 文件以编程方式设置标题怎么办?

以上是关于允许对 http 和 https 的跨源请求的主要内容,如果未能解决你的问题,请参考以下文章

需要身份验证时,带有 JSON 中断的跨源 AJAX 请求

Ajax中的跨域请求(跨源请求)

http预请求 options

使用 CORS 过滤器的跨源请求

使用 AJAX、JQuery、Apache 和基本身份验证的跨源请求

跨源资源共享(CORS)-亲测理解,以及对http的状态,参数的理解和使用,对预检请求的触发和解决