跨域资源共享 (CORS) 是不是区分 HTTP 和 HTTPS?

Posted

技术标签:

【中文标题】跨域资源共享 (CORS) 是不是区分 HTTP 和 HTTPS?【英文标题】:Does Cross-Origin Resource Sharing(CORS) differentiate between HTTP AND HTTPS?跨域资源共享 (CORS) 是否区分 HTTP 和 HTTPS? 【发布时间】:2013-11-01 17:18:18 【问题描述】:

我有两个网站:https//:www.domain-only-uses-https.com 和 www.domain-uses-both-http-and-https.com

现在我在前者的页面中向后者发出2个ajax GET请求,一个是

https://www.domain-uses-both-http-and-https.com/some-path  (using the HTTPS scheme) 

另一个是

http://www.domain-uses-both-http-and-https.com/some-other-path (using the HTTP scheme)

我确实将“https//:www.domain-only-uses-https.com”设置为服务器“www.domain-uses-”中“Access-Control-Allow-Origin:”标头的值http-和-https.com”。

但现在看来 Chrome 只允许请求 1,而请求 2 被禁止。

所以我的问题是:“Access-Control-Allow-Origin”标头是否区分 HTTP 和 HTTPS? 希望我已经说清楚了..

【问题讨论】:

我很确定你想写http:// 而不是http//:,并且与https.. 相同 【参考方案1】:

是的,HTTP 和 HTTPS 的来源不同。

originhostnameportscheme 的组合。

  http://foo.example.com:8080/
  ^^^^   ^^^^^^^^^^^^^^^ ^^^^
   ||           ||        ||
 scheme      hostname    port

如果不是所有这些字段在两个资源之间都匹配,则这些资源来自不同的来源。因此,您必须明确指定资源是可以从使用 HTTP 方案的源还是使用 HTTPS 方案的源访问。

某些浏览器只允许Access-Control-Allow-Origin 标头包含与每个响应一起发送的准确的一个来源(或*);但是,您的服务器可以检测到请求的 Origin 标头并在 CORS 响应中发送相同的来源。

【讨论】:

可以是hostnameIP。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin

以上是关于跨域资源共享 (CORS) 是不是区分 HTTP 和 HTTPS?的主要内容,如果未能解决你的问题,请参考以下文章

跨域解决方案 - 跨域资源共享cors

CORS跨域资源共享漏洞初探

跨域资源共享CORS

跨域资源共享 - CORS

CORS(跨域资源共享)

Cors -- HTTP访问控制