关于跨域请求和django处理跨域请求最佳解决方案的总结
2018-03-26 20:21
405 查看
一、什么是跨域请求?
跨域:
简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。这显然是不安全的。为此,浏览器的鼻祖:网景(Netscape)公司提出了优秀的解决方案:著名的浏览器同源策略。现在所有支持JavaScript的浏览器都会使用这个策略。
同源:域名、协议、端口均相同的网站即为同源。
流程:
当一个浏览器的两个Tab页分别打开百度和谷歌页面时,百度发起一个脚本执行,此时浏览器会检查该脚本属于哪个页面。即检查是否同源。只有和百度同源的脚本才会被执行。若非同源,在请求数据时,浏览器会在控制台报一个异常。提示拒绝访问。
ps: 以上关于同源策略解释参考自百度百科-同源策略。
二、关于解决跨域请求
解决跨域请求从前端到后端有N种解决方式。我不在此一一列举。只分享一个目前看来对django处理跨域请求的最佳方案。
1.安装django-cors-headerspip install django-cors-headers2.配置settings.py文件INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意顺序
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)通过以上配置,即可完美解决django跨域请求处理。唯一需要注意的就是cors-headers的中间件CorsMiddleware在注册时必须放在django-common中间件的前一个。
如有漏洞还请指正。
跨域:
简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。这显然是不安全的。为此,浏览器的鼻祖:网景(Netscape)公司提出了优秀的解决方案:著名的浏览器同源策略。现在所有支持JavaScript的浏览器都会使用这个策略。
同源:域名、协议、端口均相同的网站即为同源。
流程:
当一个浏览器的两个Tab页分别打开百度和谷歌页面时,百度发起一个脚本执行,此时浏览器会检查该脚本属于哪个页面。即检查是否同源。只有和百度同源的脚本才会被执行。若非同源,在请求数据时,浏览器会在控制台报一个异常。提示拒绝访问。
ps: 以上关于同源策略解释参考自百度百科-同源策略。
二、关于解决跨域请求
解决跨域请求从前端到后端有N种解决方式。我不在此一一列举。只分享一个目前看来对django处理跨域请求的最佳方案。
1.安装django-cors-headerspip install django-cors-headers2.配置settings.py文件INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意顺序
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)通过以上配置,即可完美解决django跨域请求处理。唯一需要注意的就是cors-headers的中间件CorsMiddleware在注册时必须放在django-common中间件的前一个。
如有漏洞还请指正。
相关文章推荐
- 关于获取请求参数并处理显示的总结
- 关于python的bottle框架跨域请求报错问题的处理方法
- struts处理.do后缀请求报Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- django关于csrf防止跨站的ajax请求403处理
- 关于跨域请求的一些解决方案
- 总结,关于跨域请求的问题
- 关于python的bottle框架跨域请求报错问题的处理
- JQuery中Ajax跨域解决方案 关于ajax跨域操作的jquery, django实践 基于jquery的ajax之跨域解决方案
- Django 跨域请求处理的示例代码
- 关于python的bottle框架跨域请求报错问题的处理
- 关于跨域访问解决方案总结
- 关于springmvc处理跨域请求的问题
- 关于python的bottle框架跨域请求报错问题的处理
- 关于js处理ajax请求返回json数据时出现页面缓存的解决方案(适用于showdialog)
- 关于python的bottle框架跨域请求报错问题的处理
- 关于vue项目中,axios请求方式,跨域请求的处理
- django关于csrf防止跨站的ajax请求403处理
- 跨域解决方案 & 使用angularJS和jQuery进行Ajax请求的差异
- 关于项目中异常处理的一些总结
- 关于请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。系统X64 IIS找不到 将“启动32位应用程序”改为“true”