跨域问题

什么是跨域:django

浏览器的同源策略:跨域

请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同,浏览器拒毫不是当前域域返回的数据浏览器

若是缺乏同源策略,浏览器很容易受到XSS,CSFR等攻击服务器


一般状况下,A网页访问B服务器资源时,不知足如下三个条件其一就是跨域访问
1. 协议不一样
2. 端口不一样
3. 主机不一样

app

同源策略限制如下几种行为:cors

  1.Cookie、LocalStorage、IndexDB没法读取url

  2.DOM和JS对象没法得到spa

  3.AJAX请求不能发送code

 

如何解决:
CORS:跨域资源共享orm

 

  整个CORS通讯过程,都是浏览器自动完成,不须要用户参与。对于开发者来讲,CORS通讯与同源的AJAX通讯没有差异,代码彻底同样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感受。

  所以,实现CORS通讯的关键是服务器。只要服务器实现了CORS接口,就能够跨源通讯

 


简单请求:发一次请求

解决简单的跨域问题:

http://127.0.0.1:8000 向 http://127.0.0.1:8001端口发请求 http://127.0.0.1:8001端口设置 obj=HttpResponse('数据') obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' return obj

 

非简单请求

非简单请求是发送了两次请求,第一次是预检请求(OPTIONS请求),

当预检经过,容许我发请求,再发送真实的请求

 

同时知足如下两大条件,就是简单请求:

(1) 请求方法是如下三种方法之一:
  HEAD   GET   POST
2)HTTP的头信息不超出如下几种字段:
  Accept   Accept
-Language   Content-Language   Last-Event-ID   Content-Type:只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain

 

 

 

 

 

django中解决跨域问题:

安装django-cors-headers模块

在settings.py中配置
# 注册app
INSTALLED_APPS = [
    ...
    'corsheaders'
]
# 添加中间件
MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware'
]
# 容许跨域源
CORS_ORIGIN_ALLOW_ALL = True

 


解决跨域问题:(写好这个中间件注册一下)

 

class MyCorsMiddle(MiddlewareMixin):
def process_response(self, request, response): if request.method == 'OPTIONS': # 容许它 response['Access-Control-Allow-Headers'] = 'Content-Type' # obj['Access-Control-Allow-Headers']='*' # obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' response['Access-Control-Allow-Origin'] = '*' return response
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息