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

Hal*_*yon 21 javascript https xmlhttprequest cors

我正在尝试从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和JSONp的后备,IE <= 9

Hal*_*yon 11

好的,我明白了.我用于HTTPS域的证书是自签名和未验证的.将其添加到受信任的第三方机构列表中为我修复了它.

您可以通过IE在Windows 7中安装证书.这对我有用:http : //productforums.google.com/forum/#!topic/chrome/bds-Ao9LigA%5B1-25%5D post by zacharysyoung 2/11/09 确保以管理员身份运行IE(9),否则安装将失败 - 虽然它说它安装正确.

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

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