CORS:跨域资源共享,是一种跨域访问的W3C标准,它允许浏览器可以跨源服务器进行请求,可以让ajax实现跨域访问。出现跨域问题的原因是浏览器同源策略导致的,协议+域名+端口三者一致被认为是同源。网站出现同源策略问题,即:出现了未经允许的跨域请求。

同源策略下的限制:

  • 无法获取非同源的Cookie、LocalStorage、SessionStorage等
  • 无法获取非同源的dom
  • 无法向非同源的服务器发送ajax请求

CORS原理: 浏览器与服务器通过一些HTTP协议头来做一些约定和限制,使用了额外的 HTTP 头来告诉浏览器,允许 Web 应用服务器进行跨域访问。从而使跨域数据传输得以安全进行。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。本质原理是在服务器的response header中加入“Access-Control-Allow-Origin: *”即可实现跨域访问。但注意并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。

 解决方式:

  • JSONP方式
  • CORS方式
  • 代理请求方式

1、通过Ajax获取json数据时,存在跨域的限制。但是在Web页面上调用js的script脚本文件时却不受跨域的影响,所以可以使用JSONP来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。注意:JSONP只能用于GET请求。

2.1、Django

  • 直接修改Django中的views.py文件,修改views.py中对应API的实现函数,添加响应头以此允许其他域通过Ajax请求数据:
 def myview(_request):
response = HttpResponse(json.dumps({"key": "value", "key2": "value"}))
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
response["Access-Control-Max-Age"] = ""
response["Access-Control-Allow-Headers"] = "*"
return response

2.2Flask安装 flask_cors 扩展,官方文档

3、代理请求方式

  1. 接受客户端的`请求` 。
  2. 将 `请求` 转发给服务器。
  3. 拿到服务器 `响应的数据`。
  4. 将 `响应` 转发给客户端。

最新文章

  1. dicom网络通讯入门(1)
  2. TortoiseGit 添加邮箱 失败保存配置
  3. Installing Redis on Ubuntu
  4. C#中关于webconfig的读写
  5. JQuery验证input
  6. YII2 实现后台操作记录日志
  7. E - Triangle
  8. 将HTML导出生成word文档
  9. Java中的表达式运算
  10. fullpage 全屏插件
  11. .Net Core3 新特性/新功能 16条
  12. Spring 使用介绍(五)—— AOP(一)
  13. java改单个插入为批量插入
  14. C#:几种数据库的大数据批量插入(转)
  15. mac console color setting
  16. Vim中如何使用正则进行搜索
  17. Delphi XE 5,Rad Studio XE 5 官方下载(附破解),更新 Update 1,Help Update 1
  18. Nginx下载和安装与启动
  19. 善待Erlang 代码 -- Xref 实践
  20. 使用SVG绘制流程图

热门文章

  1. Fiddler抓包工具如何可以抓取HTTPS
  2. Asp.net Core CORS 跨域
  3. JWT黑名单和白名单
  4. epoll_ctl函数的使用
  5. xorm -Alias,Asc,Desc方法实例
  6. Django总结篇
  7. mybatis关键映射的另一种写法
  8. jvm堆内存模型原理分析及堆内存分析工具jhat和MAT的使用超详细教程
  9. mysq 连表更新
  10. 解决Windows10关闭UAC后,开机启动项不生效的问题