Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask-为什么有些端点不是HTTPS?_Python_Nginx_Flask_Https_Gunicorn - Fatal编程技术网

Python Flask-为什么有些端点不是HTTPS?

Python Flask-为什么有些端点不是HTTPS?,python,nginx,flask,https,gunicorn,Python,Nginx,Flask,Https,Gunicorn,我正在使用Flask构建一个web应用程序。目前,我使用Gunicorn为应用程序提供服务,使用nginx作为反向代理。Chrome开发工具抱怨一个端点不是HTTPS: 混合内容:处的页面通过HTTPS加载,但请求了不安全的XMLHttpRequest端点。此请求已被阻止;内容必须通过HTTPS提供 在app.py中,我为Flask设置了HTTPS: context = ('ssl/server.crt', 'ssl/server.key') app.run(host='0.0.0.0', po

我正在使用Flask构建一个web应用程序。目前,我使用Gunicorn为应用程序提供服务,使用nginx作为反向代理。Chrome开发工具抱怨一个端点不是HTTPS:

混合内容:处的页面通过HTTPS加载,但请求了不安全的XMLHttpRequest端点。此请求已被阻止;内容必须通过HTTPS提供

在app.py中,我为Flask设置了HTTPS:

context = ('ssl/server.crt', 'ssl/server.key')
app.run(host='0.0.0.0', port=443, ssl_context=context, threaded=True, debug=True)
我正在执行gunicorn的以下任务:

gunicorn --bind 0.0.0.0:8282 app:app
为了简洁起见,我的nginx配置省去了所有SSL设置:

server {
    listen 88 ssl;
    server_name example.com www.example.com;
    root /var/www/app/;
    index index.html;

location / {
    proxy_pass         http://192.168.1.5:8282/;
    proxy_redirect     off;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-Host $server_name;
           }
}
我注意到我只在一个端点/geo2上看到这个错误。我的应用程序设置为在/geo接收POST请求时重定向到此端点。其代码为:

返回“重新加载索引”的重定向URL\u,坐标=坐标

POST请求由Ajax发送:

$.ajax({
    type: "POST",
    url: "/geo",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(coordinates),
    dataType: "json",
    success: function(response) {
        console.log(response);
    },
    error: function(err) {
        console.log(err);
    }
});
考虑到Flask被设置为使用HTTPS,我不明白为什么任何端点都是HTTP。我错过了什么?在过去的几个月里,我自学了所有这些,所以很可能我忽略了一些东西。

阅读与代理讨论这个问题的文章

Flask不知道代理服务器使用的是什么协议。您可以通过在nginx配置文件中设置适当的头来告诉Flask:

proxy_set_header   X-Forwarded-Proto $scheme;
然后使用中间件修复您的请求:

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
阅读与代理讨论此问题的文章

Flask不知道代理服务器使用的是什么协议。您可以通过在nginx配置文件中设置适当的头来告诉Flask:

proxy_set_header   X-Forwarded-Proto $scheme;
然后使用中间件修复您的请求:

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

我之前说过,在Flask中设置首选的URL方案解决了这个问题,但事实上并没有。我已经在app.py中添加了中间件代码,但是Chrome开发控制台仍然在阻止HTTP请求。我的HTTPS证书有一个问题,需要在继续对此进行故障排除之前解决。我还得到一个405不允许的错误,并且对飞行前请求的响应未通过访问控制检查错误。我怀疑这是因为我当前的证书与我的域不匹配。添加“Access Control Allow Origin”标题无法解决此问题。@AndyForceno:对不起,我弄错了。我只使用了中间件,并假设PREFERRED_URL_方案会像文档所暗示的那样。如果请求是通过HTTP发送的,则不必选择HTTPS,只有在您自己创建请求对象的情况下才能选择HTTPS。HTTP 405是不允许的方法,它似乎不相关。我会解决证书问题。我之前说过,在Flask中设置首选的\uURL\u方案解决了这个问题,但事实上并没有。我已经在app.py中添加了中间件代码,但是Chrome开发控制台仍然在阻止HTTP请求。我的HTTPS证书有一个问题,需要在继续对此进行故障排除之前解决。我还得到一个405不允许的错误,并且对飞行前请求的响应未通过访问控制检查错误。我怀疑这是因为我当前的证书与我的域不匹配。添加“Access Control Allow Origin”标题无法解决此问题。@AndyForceno:对不起,我弄错了。我只使用了中间件,并假设PREFERRED_URL_方案会像文档所暗示的那样。如果请求是通过HTTP发送的,则不必选择HTTPS,只有在您自己创建请求对象的情况下才能选择HTTPS。HTTP 405是不允许的方法,它似乎不相关。我会解决证书问题。