【问题标题】:MixedContent when I'm loading https page through ajax, but browser still thinks it's httpMixedContent当我通过ajax加载https页面时,但浏览器仍然认为它是http
【发布时间】:2015-03-27 15:56:41
【问题描述】:

在网页上安装 SSL 证书后,我遇到了使用 https 服务的页面需要使用 ajax 的 http 端点的问题。 我正在使用restangular,并将基本网址更改为https。

    var uri = location.protocol + "//" + location.host;
    RestangularProvider.setBaseUrl(uri);

有趣的是,当我在 chrome 开发人员工具中看到请求时,我看到了

Request URL:https://theaddress.com/api/endpoint
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Referer:https://theadress.com/somepage
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36
X-Requested-With:XMLHttpRequest

所以请求应该是 https 的,但我仍然得到:

Mixed Content: The page at 'https://theaddress.com/somepage' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://theadress.com/api/endpoint'. This request has been blocked; the content must be served over HTTPS.

另外我应该提到,这发生在 prod 服务器上,但在我的本地测试中,在我使用包含 https 的基本 url 后它工作正常(我有自签名的 ssl 证书)。

可能是什么问题?

【问题讨论】:

  • https 请求的响应是什么?也许有一个 HTTP 302 重定向到 http 端点?
  • 这是带有 200 响应的常规 json。没有重定向。

标签: javascript angularjs https restangular


【解决方案1】:

我刚刚花了整整 4 个小时试图解决一个类似的问题。这是解决我的问题:

总结:在您的请求中添加尾随“/”

我发现this post 对解决我的问题很有用。基本上,服务器不关心您是否发送带有尾随“/”的请求,因为如果您不添加它,它会在内部路由到“/”。但是,如果路由发生在内部(例如 nginx 将请求传递给本地进程),您会得到一个 http 重定向,这将使您的请求失败。

【讨论】:

  • 你帮我省了1个小时,我已经找了3个小时了
【解决方案2】:

我尝试了@Kadi 的添加斜杠的修复方法,它成功了,但对我来说更优雅的解决方案是将请求从 GET 更改为 POST,这也解决了问题。

仍然不确定根本原因是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多