• flask创建的http服务支持跨域CORS的处理


    对于web前端页面,如果访问的地址与域名不一致时,就会出现跨域问题,这种情况,每次js的请求发起时,浏览器会自动发送一个OPTIONS请求进行验证。
    在这里插入图片描述
    可以看到,每个请求都会发送两个,其中一个是浏览器发送的。如果服务不支持跨域,就会提示如下CORS policy的错误:

    Access to XMLHttpRequest at 'http://127.0.0.1:8092/' from origin 'http://192.168.10.135:38312' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    
    • 1

    这就是服务不支持跨域了。使用flask创建的服务支持跨域有如下两种方法。

    1 使用flask_cors

    flask框架有个自带的支持的跨域的模块,在创建的服务的时候调用这个,就能很方便的支持跨域操作,代码如下:

    from flask import Flask
    from flask import request
    from flask_cors import *
    
    
    app=Flask(__name__)
    #支持跨域
    CORS(app, resources=r'/*')
    
    @app.route('/',methods=['GET','POST','OPTIONS'])
    def post():
        return 'success'
    
    if __name__=='__main__':
    
        app.run(host='0.0.0.0',port='8092',debug=False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    重新进行测试,可以看到没有跨域的错误了。
    在这里插入图片描述

    2 增加响应头

    第二种方法是增加响应头,因为跨域的原理是浏览器发送的OPTIONS,服务端会返回几个响应头,根据这些响应头,浏览器判断服务端是否允许请求访问,因此只要把服务端的返回增加响应头就可以。
    增加如下三个响应头即可:

    Access-Control-Allow-Origin:*
    Access-Control-Allow-Methods:*
    Access-Control-Allow-Headers:*
    
    • 1
    • 2
    • 3

    服务代码如下:

    from flask import Flask
    from flask import request
    
    
    app=Flask(__name__)
    
    
    @app.route('/',methods=['GET','POST','OPTIONS'])
    def fpdk_post():
        if request.method=='OPTIONS':
            return '',200,[('Access-Control-Allow-Origin','*'),('Access-Control-Allow-Methods','*'),('Access-Control-Allow-Headers','*')]
        elif request.method=='POST':   
            return '',200,[('Access-Control-Allow-Origin','*'),('Access-Control-Allow-Methods','*'),('Access-Control-Allow-Headers','*')]
    
    
    
    if __name__=='__main__':
    
        app.run(host='0.0.0.0',port='8092',debug=False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    进行测试,可以发现,同样能进行跨域访问。
    在这里插入图片描述
    其实flask_cors的原理也是封装好的,默认把所有请求的响应头增加几个允许跨域的响应头。

  • 相关阅读:
    将风险前置
    【我的OpenGL学习进阶之旅】向量点乘和叉乘的几何意义
    黑马-设计模式-笔记(未完)
    比肩GPT4,没有显卡也能用Llama-3.1-405B
    烽火推系统源码,抖音矩阵系统源码独立部署 TELL
    css3 中calc的用法?
    AQS如何实现
    地理探测器Geodetector下载、使用、结果分析方法
    Java InputStream.available方法具有什么功能呢?
    WebGL 中的灯光设置
  • 原文地址:https://blog.csdn.net/qq_37781464/article/details/125006316