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