Nginx+Flask+Ajax跨域请求问题处理

写在前面

  还是和上一篇同一个项目,不过遇到的问题不同,所以分成两篇blog了(假装很高产hhh),这次是Ajax带来的跨域问题,场景是对子域名sub.a.cn发出的请求(80端口)要转发到服务器的1024端口上,对于非Ajax请求没有问题,但Ajax请求会在浏览器控制台抛出错误:SEC7120: [CORS] 原点“http://XXX”未在“http://XXXXXX”的 cross-origin 资源的 Access-Control-Allow-Origin response header 中找到“http://XXX”

Ajax跨域问题

  什么是跨域呢?当客户端通过Ajax方式向服务端发送Ajax请求时,如果客户端和服务端不在一个域(如协议、端口、域名不一致),浏览器出于安全考虑,会对Ajax请求做校验,不通过时会抛出跨域错误(所以是浏览器的锅,并不是服务端的原因

解决方案:

  1. 禁止浏览器做跨域校验(不实际,需要每个用户对浏览器进行操作)
  2. Nginx反向代理做设置,对返回给浏览器的响应加header(让浏览器认为是同个域下的)
  3. 服务端修改,让服务端返回给nginx的响应支持跨域

实现:

  1. nginx(代理)设置:
server{
    listen 80;
    server_name sub.a.cn;

    location / {
        proxy_pass http://localhost:1024;
        add_header Access-Control-Allow-Methods * always;
        add_header Access-Control-Max-Age 3600 always;
        add_header Access-Control-Allow-Credentials true always;


        add_header Access-Control-Allow-Origin $http_origin always;
        add_header Access-Control-Allow-Headers $http_access_control_request_headers always;
    }
}
  1. flask(服务端)设置:
    (1)安装跨域模块pip install flask-cors
    (2)导入模块并设置跨域
from flask import Flask
from flask_cors import *  # 导入模块
app = Flask(__name__)
CORS(app, supports_credentials=True)  # 设置跨域

参考

[1] ajax跨域完全讲解
[2] Ajax跨域问题详解
[3] Flask允许跨域

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于 CentOS 操作系统的 Nginx + Uwsgi + Flask 部署服务的详细操作步骤: 1. 安装必要的软件包 ```bash yum install epel-release yum install nginx yum install python3 python3-pip pip3 install uwsgi flask ``` 2. 创建 Flask 应用程序 在服务器上创建 Flask 应用程序,例如: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run() ``` 3. 创建 uwsgi 配置文件 在服务器上创建一个 uwsgi 配置文件,例如: ```ini [uwsgi] module = wsgi:app master = true processes = 5 socket = /tmp/uwsgi.sock chmod-socket = 660 vacuum = true die-on-term = true ``` 其中,`module` 参数指定 Flask 应用程序所在的模块和变量名,`socket` 参数指定 uwsgi 与 Nginx 通信的 Unix 套接字文件位置。 4. 创建 Nginx 配置文件 在服务器上创建一个 Nginx 配置文件,例如: ```nginx server { listen 80; server_name your-domain.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } } ``` 其中,`listen` 参数指定监听的端口,`server_name` 参数指定服务器的域名或 IP 地址,`location` 参数指定请求 URL 的路径,`uwsgi_pass` 参数指定 uwsgi 与 Nginx 通信的 Unix 套接字文件位置。 5. 启动服务 在服务器上启动 uwsgi 和 Nginx 服务: ```bash uwsgi --ini uwsgi.ini & systemctl start nginx ``` 6. 测试服务 在浏览器中输入服务器的域名或 IP 地址,应该能够看到 Hello, World! 的输出。 以上就是在 CentOS 上使用 Nginx + Uwsgi + Flask 部署服务的详细操作步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值