21

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

我已经在服务器上设置了正确的 CORS 标头(它适用于 HTTP-HTTP 和 HTTPS-HTTPS)。

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

我在 Chrome 和 Firefox 中看到的是 HTTPS 请求永远不会发送,它会立即中止,并且服务器永远不会看到该请求。

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

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

笔记

我也withCredentials设置了true并且我正在发送一些自定义标题和自定义Content-Typeapplication/json

我正在使用常规 XMLHTTPRequest 并在 IE<=9 中回退到 JSONp

4

2 回答 2

11

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

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

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

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

于 2012-08-10T12:32:33.233 回答
1

设置类似easyXDM的东西可能更容易。它上手相当快,并且会为您完成所有向后兼容性(一直到 IE6)。它可能不是您正在寻找的本土解决方案,但如果您想要快速跨域(您可以访问双方),它符合要求。

您总是可以编写自己的 iframe (postMessage) 界面,但为什么要重新发明轮子(如果您使用不同的子域,请不要忘记设置您的 document.domain)。

于 2012-07-27T15:11:56.510 回答