Http 到 https 重定向被 CORS 策略阻止

Posted

技术标签:

【中文标题】Http 到 https 重定向被 CORS 策略阻止【英文标题】:Http to https redirect blocked by CORS policy 【发布时间】:2018-10-12 10:45:57 【问题描述】:

我正在尝试从运行在具有 https 的网站上的 chrome 开发人员工具控制台窗口向 localhost 服务器发出 GET(或 POST)请求(在本例中为 outlook.com,但对于任何 https 都是相同的)。如果我从在 http 上运行的网站运行相同的代码,它就可以正常工作。

我得到的错误:

无法加载 http://127.0.0.1:5000/:从“http://127.0.0.1:5000/”重定向到“https://127.0.0.1:5000/”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://outlook.live.com' 因此不允许访问。

我发现 https 到 http 通信是不可能的,但是在 https 上运行烧瓶服务器也没有帮助,在这种情况下 Flask 甚至无法识别传入的请求。

我有一个 Flask 应用程序正在运行,代码:

from flask import Flask
from flask import request
from flask_cors import CORS

app = Flask(__name__)

CORS(app)

@app.route("/", methods=['GET', 'POST'])
def foo():
    return "bar"


if __name__ == "__main__":
    app.run()

我用于请求的 javascript

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() 
    if (this.readyState == 4 && this.status == 200) 
        console.log(xhttp.responseText);
    
;
xhttp.open("GET", "http://127.0.0.1:5000/", true);
xhttp.send();

我知道有很多类似的问题,但是发布的解决方案都没有对我有用,如何从运行在 https 网站上的 chrome 开发人员工具创建成功的 GET 或 POST 请求到 localhost 服务器(最好是 Flask) ?

【问题讨论】:

【参考方案1】:

使用 ssl_context='adhoc' 运行 Flask 应用以使用 https 时:

是浏览器阻止了 https,因为证书不安全。

这个答案(发布here)对我有用:

不是为了生产

只需将其粘贴到您的 chrome 中即可:

chrome://flags/#allow-insecure-localhost 您应该会看到突出显示的文本:允许从本地主机加载的资源使用无效证书

点击启用。

另外,this blog post 解释了更多关于使用带有证书的 Flask。

【讨论】:

以上是关于Http 到 https 重定向被 CORS 策略阻止的主要内容,如果未能解决你的问题,请参考以下文章

XMLHttprequest 无法加载 [link]。从 [link] 重定向到已被 laravel 5 中的 CORS 策略阻止

“重定向已被 CORS 策略阻止”Vue Axios

CORS 请求重定向失败

尝试使用 next-connect 在 Next.js 中从 http://localhost:3000 重定向到 https://api.twitter.com 时出现 CORS 错误?

API 网关将 http 重定向到 https

如何解决“重定向已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头”?