从HTTP到HTTPS的跨域请求立即中止

Cross domain request from HTTP to HTTPS aborts immediately

本文关键字:请求 HTTP HTTPS      更新时间:2024-04-07

我正在尝试从HTTP页面向HTTPS服务进行跨域Web服务调用。

我已经在服务器上设置了正确的CORS头(它可以与HTTP-HTTP和HTTPS-HTTPS一起使用)。

如果我将请求更改为JSONp,则确实有效。

我在Chrome和Firefox中看到的是HTTPS请求从未发送过,它立即被中止,服务器也从未看到该请求。

值得注意的是,飞行前OPTIONS请求被中止(并且它没有到达服务器)。

我找不到任何来源来解释这确实是不可能的(HTTP到HTTPS),更好的是:解释为什么。我可以理解HTTPS到HTTP是不安全的,但其他方式应该可以,对吧?这在我看来很傻,因为JSONp是有效的(但它很混乱)。

钞票

我还将withCredentials设置为true,并发送一些自定义标头和一个自定义Content-Type:application/json

我正在使用常规的XMLHTTPRequest,它会回退到用于IE<9

好吧,我想通了。我用于HTTPS域的证书是自签名的,未经验证。将其添加到受信任的第三方权威机构列表中为我修复了它。

你可以通过IE在Windows 7中安装证书。这对我很有效:http://productforums.google.com/forum/#!主题/铬/bds-Ao9LigA%5B1-25%5Dzacharysyoung 2/11/09发布请确保您以管理员身份运行IE(9),否则即使它说安装正确,安装也会失败。

  1. 打开Internet Explorer(IE)并导航到承载自签名证书的网站
  2. IE应该显示一个页面警告,"此网站的安全证书有问题。"
  3. 单击"继续访问此网站(不推荐)"链接
  4. 页面加载后,请查看地址栏的右侧。应该可以看到一个红色/粉色按钮,标签为"证书错误"。点击那个按钮
  5. 将出现一个名为"不受信任的证书"的弹出窗口。单击弹出窗口底部的"查看证书"链接
  6. 将出现另一个名为"证书"的弹出窗口。单击"安装证书…"按钮
  7. 将启动"证书导入向导"。单击"下一步"按钮
  8. **对于XP:a.保留"自动选择证书…"选项,然后单击"下一步"按钮。**对于Vista:a。选择"将所有证书放入以下存储"选项,然后单击"浏览"按钮。b.单击"显示物理商店"复选框。c.扩大"第三方根证书""文件夹,然后选择"本地计算机"。单击"确定"按钮d.单击"下一步"按钮
  9. 这将显示"完成证书导入向导"对话框。单击"完成"按钮
  10. 将出现"安全警告"弹出窗口。警告通知您证书的来源实际上无法验证。你应该知道证书的来源。如果需要,请单击"是"按钮以安装证书
  11. 将显示最后一个弹出窗口,通知您"导入成功"。单击"确定"按钮
  12. 重新启动/打开Chrome并导航到有问题的网站。您不应该受到安全警告页面的欢迎

除此之外,我想我可能在Chrome中发现了一个错误。请参阅:https://code.google.com/p/chromium/issues/detail?id=141839

设置easyXDM之类的东西可能更容易。它很快就开始了,并将为您提供所有的向后兼容性(一直到IE6)。这可能不是你正在寻找的本土解决方案,但如果你想匆忙跨域(在那里你可以访问双方),它是符合要求的。

你可以随时编写自己的iframe(postMessage)接口,但为什么要重新发明轮子(如果你使用不同的子域,别忘了设置你的document.domain)。