HTTPS and HTTP CORS

14

我的问题很简单,但我找不到答案,也没有任何资源来测试它。

  • 我能够从一个域名发起 HTTPS CORS 请求到另一个 HTTPS 域名吗?
  • 我能够从一个域名发起 HTTP CORS 请求到另一个 HTTPS 域名吗?

我知道我可以从一个域名发起 HTTP CORS 请求到另一个 HTTP 域名,但是我不知道使用 HTTPS 是否有什么不同。

2个回答

14

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

唯一的区别在于HTTPS是一个安全源,因此只能调用安全源,而不是HTTP,浏览器将通过以下消息阻止它:

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

警告:如果允许HTTP请求调用您的HTTPS网页,则会变得不安全,因为这意味着攻击者可以使用受害者的Cookie强制请求您的HTTPS网页并读取回答。


我不确定我是否理解您的意思,我无法从HTTP向HTTPS发出请求? - Raiper34
4
从一个不安全的 HTTP 页面,你可以向 HTTP 和 HTTPS 发送请求。从一个安全的 HTTPS 页面,出于安全原因,你只能向 HTTPS 发送请求(请参阅混合内容)。 - Tom
1
@Tom 如果我想从 https 到 https(2) ,但是 https(2) 是一种 xyz.local 域,因为它在浏览器中没有显示绿色栏,也被阻止了,还有其他的方法吗? - user818117
是否有任何变通方法来允许通信即使它不安全? - Charith Jayasanka
1
@CharithJayasanka 解决在安全上下文中调用http的方法是使用服务器代理:您使用https调用代理,该代理在后端调用http终端点。 - Tom
1
谢谢Tom。我已经成功地使用Let's Encrypt和Nginx将本地端口反向代理到HTTPS。现在我的问题得到了解决。 - Charith Jayasanka

1

如果你仍需要支持IE8/IE9并使用XDomainRequest,要注意它不支持跨协议请求。根据MDN:

源安全协议必须与请求的URL匹配。(http到http,https到https)。如果不匹配,则请求将出错"Access is Denied"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接