【问题标题】:CORS - cross domain POST to HTTP from HTTPSCORS - 从 HTTPS 跨域 POST 到 HTTP
【发布时间】:2014-05-02 08:31:22
【问题描述】:

我正在尝试使用从 HTTPS 加载的页面到使用 HTTP url 的不同域的 XmlHTTPRequest POST。 HTTP 服务器是本地(家庭)服务器,因此它不能是 HTTPS。 (这是一个原型/演示 - 家庭 HTTP 服务器可能在机顶盒中)。我的服务器返回:

'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE, OPTIONS'

当我发布时,浏览器似乎取消了请求。我在控制台中看到了这个警告:

'https://xxx.html' 的页面通过 HTTPS 加载,但显示来自'http://localhost:10293/yyy' 的不安全内容:此内容也应通过 HTTPS 加载。

有没有办法让它工作?

非常有趣的是,我可以向 HTTP 服务器发送一个 DELETE,它可以工作,只是不能 POST! (服务器处理 'OPTION' 请求,并返回上面的 'Access' 标头。DELETE 也会导致警告吐出,但请求被发送,不像 POST,请求被浏览器取消。

服务器是一个基本的 node.js 服务器。

【问题讨论】:

  • 您是否曾经能够从 https 端点向您的家庭 HTTP 服务器发送有效的 POST/GET 请求?我有同样的问题

标签: javascript ajax https cors


【解决方案1】:

我能够通过在我的 HTTP 服务器中处理 OPTIONS 请求来完成这项工作:

    response.writeHead(200, {
        'Content-Type': 'text/html', 
        'Access-Control-Allow-Origin': '*', 
        'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE, OPTIONS'
    });
    response.end();

只有 POST 失败的问题是一个红鲱鱼 - 我现在忘记了确切的情况,我上面的评论说了一些关于 POST 之后的 setTimeout 的内容。不确定,但它现在可以工作了。

【讨论】:

  • 其实我刚刚重新测试过,最新版的Chrome浏览器是不允许的。我现在得到的错误是:混合内容:“zzzzzz”处的页面是通过 HTTPS 加载的,但请求了一个不安全的 XMLHttpRequest 端点“xxxxx”。此请求已被阻止;内容必须通过 HTTPS 提供。
猜你喜欢
  • 2012-01-14
  • 2013-11-02
  • 2013-11-01
  • 2020-12-02
  • 2013-09-30
  • 2015-03-21
  • 2021-12-01
  • 2014-03-13
  • 2019-07-21
相关资源
最近更新 更多