HTTPS 和 HTTP CORS

Posted

技术标签:

【中文标题】HTTPS 和 HTTP CORS【英文标题】:HTTPS and HTTP CORS 【发布时间】:2016-09-01 04:31:07 【问题描述】:

我的问题很简单,但我找不到答案,而且我没有任何资源可以自己测试。

我可以从一个域向另一个 HTTPS 域发出 HTTPS CORS 请求吗? 我可以从一个域向另一个 HTTPS 域发出 HTTP CORS 请求吗?

我知道我可以从一个域向另一个HTTP域进行HTTP CORS请求,但是我不知道我使用HTTPS时是否有任何区别。

【问题讨论】:

【参考方案1】:

是的,您可以从一个 HTTPS 域向另一个 HTTPS 域发出 CORS 请求。

唯一的区别是因为 HTTPS 是安全源,你只能调用安全源,所以不能调用 HTTP,浏览器会阻止它,并显示如下消息:

混合内容:“https://example.com/index.html”处的页面通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“http://example2.com/endpoint”。此请求已被阻止;内容必须通过 HTTPS 提供。

警告:如果您允许http请求调用您的https网页,这将是不安全的,因为这意味着攻击者可以使用受害者的cookie强制请求您的https网页并阅读答案

【讨论】:

我不知道你是否理解,我不能从HTTP请求到HTTPS? @Raiper34 从不安全的 http 页面,您可以向 http 和 https 发出请求。出于安全原因,您只能从安全的 https 页面向 https 发出请求(请参阅混合内容) @Tom 如果我想从 https 到 https(2) 怎么办,但是 https(2) 是某种 xyz.local 域,因为它没有在浏览器中显示绿条,它也被阻止,还有其他方法吗? @CharithJayasanka 从安全上下文调用 http 的解决方法是使用服务器代理:您使用 https 调用代理,而该代理在后端调用 http 端点。 谢谢汤姆。我设法使用 let encrypt 和 nginx 将本地端口反向代理到 HTTPS。现在我的问题解决了。【参考方案2】:

如果您仍然需要支持 IE8/IE9 并且正在使用 XDomainRequest,请注意,因为它不支持跨协议请求。根据MDN:

源的安全协议必须与请求的 URL 相匹配。 (http 到 http,https 到 https)。如果这些不匹配,请求将错误“访问被拒绝”。

【讨论】:

以上是关于HTTPS 和 HTTP CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net core 中启用 CORS

从 go-swagger UI 访问 API 时 Golang 中的 CORS 问题

HTTPS和HTTP有啥区别?

HTTP和HTTPS的区别?

http和https

HTTPS和HTTP有啥区别