tornado解决跨域的方法

实际中的应用

实际中可以写一个基类去统一处理,我们可能会设置多个响应头,必须添加自定义的响应头以及本地测试的域名(IP + 端口)

import tornado.web


class BaseHandler(tornado.web.RequestHandler):

    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.host = ""
        self.port = ""

        # 在初始化方法中添加设置跨域的方法
        self.set_default_headers()


    # 处理OPTIONS域检请求
    def post(self):
        self.set_status(204)
        self.finish()

    # 设置跨域的具体方法
    def set_default_headers(self):
        super().set_default_headers()
        # 设置允许的请求头
        self.set_header("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS")
        self.set_header("X-XSS-Protecion","1")
        self.set_header("Content-Security-Policy","default-src 'self'")
        self.set_header("Access-Control-Allow-Credentials","true")
        # 设置一些自己定义的请求头
        self.set_header("Access-Control-Allow-Headers",
                        "Content-Type,Access-Control-Allow-Headers,X-Auth-Token,Y-Auth-Token"
            )
        self.set_header("Content-Type","application/json; charset=UTF-8")
        # 设置允许本地调试的域名通过!
        self.set_header("Access-Control-Allow-Origin",self.request.headers.get("Origin","http://localhost:9090"))
        # 如果后面的域名设置为 * ,表示允许所有的域名通过
        # self.set_header("Access-Control-Allow-Origin","*")
        # self.set_header("Access-Control-Allow-Origin",self.request.headers.get("Origin","*"))

其他方法可以参考下面的博客

https://www.cnblogs.com/renfanzi/p/6952871.html

https://segmentfault.com/a/1190000012550346

 

posted on 2020-04-14 22:02  江湖乄夜雨  阅读(1568)  评论(0编辑  收藏  举报