flask 重定向 "XMLHttpRequest cannot load..." 错误本地主机
flask redirect "XMLHttpRequest cannot load..." error localhost
运行 本地烧瓶,尝试调用:
@app.route('/foo_route', methods=['POST'])
@cross_origin(origin='*')
def foo():
return redirect("https://www.google.com/")
我收到以下错误:
XMLHttpRequest cannot load https://www.google.com/. No
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://127.0.0.1:5000' is therefore not allowed
access
我试过这样使用 CORS:
app = Flask(__name__)
CORS(app)
以及我路线上的@cross_origin()。这里出了什么问题?我正在阅读这可能是 chrome 本地 运行 时的错误?
.
我也遇到了同样的问题!这不是 Chrome 错误,它内置于 chrome 以确保安全。 (跨源资源共享)是一个必须存在于 apache httpd.conf or apache.conf or .htaccess
配置文件中的 header。如果你在 NGINX 上,你必须编辑 defaults.conf or nginx.conf file
它基本上使 web 服务器接受来自它自己域以外的地方的 HTTP 请求。 "real" 修复它的方法是实际进入 Web 服务器(通过 ssh)并编辑适用的 .conf 以包含此 header。如果您使用的是 apache,则可以在文件顶部添加 Header set Access-Control-Allow-Origin "*"
。执行此操作后,重新启动 apache 以确保保存更改 (service httpd restart
)。如果您使用的是 NGINX,请使用此配置:
#
# Wide-open CORS config for nginx
#
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
现在,我想,根据您的示例,您无权访问 Web 服务器(因为您将 google 的 url 放在 URL 中)。这就是它变得棘手的地方。
您的选择之一是使用 http://www.whateverorigin.org/。它绕过 CORS 并有效地检索数据。要使用它,您需要 运行:
$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
alert(data.contents);
});
无论网络服务器上是否存在 CORS,这都会检索响应。
如果您不想更改任何现有代码并且正在使用 Google Chrome,则有一种解决此 CORS 问题的方法。您可以做的一件事是安装此浏览器扩展程序:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=plus
你可以绕过 CORS 和 运行 你的程序。
希望这对你有用!
我决定做的是将 url 传递给客户端,然后让客户端重定向。
@app.route('/foo_route', methods=['POST'])
@cross_origin(origin='*')
def foo():
return "https://www.google.com/"
然后在客户端(javascript):
window.location.href = serverSentUrl;
运行 本地烧瓶,尝试调用:
@app.route('/foo_route', methods=['POST'])
@cross_origin(origin='*')
def foo():
return redirect("https://www.google.com/")
我收到以下错误:
XMLHttpRequest cannot load https://www.google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:5000' is therefore not allowed access
我试过这样使用 CORS:
app = Flask(__name__)
CORS(app)
以及我路线上的@cross_origin()。这里出了什么问题?我正在阅读这可能是 chrome 本地 运行 时的错误? .
我也遇到了同样的问题!这不是 Chrome 错误,它内置于 chrome 以确保安全。 (跨源资源共享)是一个必须存在于 apache httpd.conf or apache.conf or .htaccess
配置文件中的 header。如果你在 NGINX 上,你必须编辑 defaults.conf or nginx.conf file
它基本上使 web 服务器接受来自它自己域以外的地方的 HTTP 请求。 "real" 修复它的方法是实际进入 Web 服务器(通过 ssh)并编辑适用的 .conf 以包含此 header。如果您使用的是 apache,则可以在文件顶部添加 Header set Access-Control-Allow-Origin "*"
。执行此操作后,重新启动 apache 以确保保存更改 (service httpd restart
)。如果您使用的是 NGINX,请使用此配置:
#
# Wide-open CORS config for nginx
#
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#
# Om nom nom cookies
#
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
现在,我想,根据您的示例,您无权访问 Web 服务器(因为您将 google 的 url 放在 URL 中)。这就是它变得棘手的地方。
您的选择之一是使用 http://www.whateverorigin.org/。它绕过 CORS 并有效地检索数据。要使用它,您需要 运行:
$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
alert(data.contents);
});
无论网络服务器上是否存在 CORS,这都会检索响应。
如果您不想更改任何现有代码并且正在使用 Google Chrome,则有一种解决此 CORS 问题的方法。您可以做的一件事是安装此浏览器扩展程序:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=plus 你可以绕过 CORS 和 运行 你的程序。
希望这对你有用!
我决定做的是将 url 传递给客户端,然后让客户端重定向。
@app.route('/foo_route', methods=['POST'])
@cross_origin(origin='*')
def foo():
return "https://www.google.com/"
然后在客户端(javascript):
window.location.href = serverSentUrl;