Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好。另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作。现代的浏览器都支持 CORS。

引入 django-cors-middleware

pip install django-cors-middleware 在 settings.py中添加,注意:不添加的话无法生效

INSTALLED_APPS = ( 'corsheaders', 添加 中间件 监听

MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 配置允许跨域访问的域名

CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_WHITELIST = ( 'google.com', 'hostname.example.com' 默认值是全部:

CORS_ORIGIN_WHITELIST = () 或者定义允许的匹配路径正则表达式.

CORS_ORIGIN_REGEX_WHITELIST = ('^(https?://)?(\w+.)?>google.com$', )

CORS_ORIGIN_REGEX_WHITELIST = () 设置允许访问的方法:

CORS_ALLOW_METHODS = ( 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS' 设置允许的header:

CORS_ALLOW_HEADERS = ( 'x-requested-with', 'content-type', 'accept', 'origin', 'authorization', 'x-csrftoken'

Nginx解决CORS跨域问题

为了增强学习过程中体感,通过演示代码模拟工作遇到的CORS跨域问题。演示代码中index.html页面使用ajax jquery调用php来重现工作中遇到跨域问题。( has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource和not allowed by Access-Control-Allow-Headers in preflight response )。通过此课程学习,可以了解跨域产生的原因以及如何解决常见跨域问题。 另外大家不用担心,对html、ajax、jquery、php不了解,也可以掌握CORS跨域问题的解决方法。因为演示代码只是为了重现错误,也便调试Nginx参数后,可以立即看到调试效果。