CORS - 从 HTTPS 跨域 POST 到 HTTP
Posted
技术标签:
【中文标题】CORS - 从 HTTPS 跨域 POST 到 HTTP【英文标题】:CORS - cross domain POST to HTTP from HTTPS 【发布时间】: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 请求?我有同样的问题 【参考方案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 提供。以上是关于CORS - 从 HTTPS 跨域 POST 到 HTTP的主要内容,如果未能解决你的问题,请参考以下文章
带有 CORS 的跨域 POST 请求返回 access-control-allow-origin 丢失