码迷,mamicode.com
首页 > 其他好文 > 详细

CORS

时间:2019-04-17 13:48:13      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:允许   ESS   函数   结果   storage   cookie   中间件   EOS   family   

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

 

同源策略下的限制:

 

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

 

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

 

 解决方式:

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

 

2、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"] = "1000"  
    response["Access-Control-Allow-Headers"] = "*"  
    return response 

 

 

 

3、Flask安装 flask_cors 扩展,官方文档

 

CORS

标签:允许   ESS   函数   结果   storage   cookie   中间件   EOS   family   

原文地址:https://www.cnblogs.com/hsmwlyl/p/10722960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!