所谓同域:两个页面具有相同的协议,主机,端口号。
同域策略是浏览器的一个安全功能,不同域的客户端在没有明确授权的情况下,不能访问对方资源。
HTTP请求方法:OPTIONS:允许客户端查看服务器性能。
bottle后端处理方法:增加一个勾子函数,在勾子函数中对请求前后都进行修改。bottle收到请求后,
Access-Control-Request-Method
发出请求时报头用于预检请求让服务器知道哪些 HTTP 方法的实际请求时将被使用。这个头是必要的,因为预检请求始终是一个OPTIONS
,并且不使用与实际请求相同的方法。
from bottle import hook
@hook('before_request')
def validate():
REQUEST_METHOD = request.environ.get('REQUEST_METHOD')
HTTP_ACCESS_CONTROL_REQUEST_METHOD = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_METHOD')
if REQUEST_METHOD == 'OPTIONS' and HTTP_ACCESS_CONTROL_REQUEST_METHOD:
request.environ['REQUEST_METHOD'] = HTTP_ACCESS_CONTROL_REQUEST_METHOD
@hook('after_request')
def enable_cors():
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Headers'] = '*'
参考资料: