• element-ui + vue + node.js 与 服务器 Python 应用的跨域问题


    跨越问题解决的两种办法:

    1. 在 config => index.js 中配置 proxyTable 代理:

        proxyTable: {
          '/charts': {
            target: 'http://localhost:5001',
            changeOrigin: true,
            pathRewrite: {
              '^/charts':'/charts'
            }
          }
        }

    说明: /charts:以其开头的所有路径请求转发,.changeOrigin 参数为true: 本地会虚拟一个服务器接收请求,并转发该请求

    2. 在 config => dev.env.js 中配置BASE_API,由后端应用解决

    module.exports = {
      NODE_ENV: '"development"',
      ENV_CONFIG: '"dev"',
      BASE_API: '"http://localhost:5001"'
    }

    在Python应用中处理跨域问题:

    • 方法1:使用 flask_cors
    from flask_cors import CORS  # 解决跨域问题
    from flask import Flask
    
    app = Flask(__name__)
    app.config.from_object(base_conf.config["development'])
    
    # CORS(app, resources={"/charts/*",{"origins": "*"})
    CORS(app, supports_credentials=True)
    •  方法2: 对 请求头部添加信息
    @app.after_request
    def af_request(resp):     
        """
        #请求钩子,在所有的请求发生后执行,加入headers。
        :param resp:
        :return:
        """
        resp = make_response(resp)
        resp.headers['Access-Control-Allow-Origin'] = '*'
        resp.headers['Access-Control-Allow-Methods'] = 'GET,POST'
        resp.headers['Access-Control-Allow-Headers'] = 'x-requested-with,content-type'
        return resp
    •  nginx 
    server {
        listen 8001;
    
        access_log /var/log/openresty/access.log basic;
        location / {
            proxy_pass http://127.0.0.1:9527;
            # proxy_pass http://node;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_redirect off;
        }

      

        location /charts {
          proxy_pass http://127.0.0.1:5000;
          proxy_set_header Host $http_host;
          proxy_cookie_path /charts /charts;
        }

    }

    或者,打包之后:

    server {
        listen 80;
        access_log /var/log/openresty/access.log basic;
    
        location / {
            root /opt/app/reports-web/dist;
            index  index.html index.htm;
        }
    
        location /charts {
                proxy_pass http://127.0.0.1:5000;
                proxy_set_header Host $http_host;
                proxy_cookie_path /charts /charts;
                #proxy_cookie_domain localhost:80 http://127.0.0.1:5000;
        }
    }
    • Python
    from flask import render_template, Flask
    import os
    
    print(os.path.abspath(os.curdir))
    app = Flask(__name__, static_folder="F:/workspace/reports/web/dist/static",
                template_folder="F:/workspace/reports/web/dist")
    
    
    @app.route('/')
    def index():
      return render_template('index.html')
    
    """
    其他与前端交互的接口与视图
    """
    
    @app.route('/')
    def favicon():
      return app.send_static_file("web/favicon.ico")
    
    
    if __name__ == '__main__':
      app.run(host='0.0.0.0', port=8000, debug=True)
  • 相关阅读:
    ORACLE 当字段中有数据如何修改字段类型
    ORACLE 语句
    对接支付宝支付接口开发详细步骤
    生成uuid
    DataGrip如何连接和移除MySQL数据库
    iOS提交AppStore被拒原因
    swift系统学习第二章
    swift系统学习第一章
    iOS开发:JavaScriptCore.framework的简单使用--JS与OC的交互篇
    iOS开发:微信支付
  • 原文地址:https://www.cnblogs.com/spaceapp/p/10334646.html
Copyright © 2020-2023  润新知