00,跨域的问题

什么是跨域?
浏览器的同源策略限制默认情况下前端页面和后端服务在不同服务器(域名、端口不一样)时,前端页面js无法请求到后端接口服务,即存在跨域问题。
DRF是怎么解决跨域问题?
  • 使用Jsonp方式解决
  • 使用cors解决
  • 使用nginx代理解决
使用Jsonp解决跨域的思路?
由于浏览器中的<script>的src请求、<img>的src请求
使用DRF的cors解决
写restfull响应的接口要额外的加一个相应头。
在哪加,在中间件里加
response中只是响应了很多的数据,还需要增加响应头。
在哪加,在中间件里加

 
 
 
x
 
 
 
 
 
1
class MiddlewareMixin:
2
    def __init__(self, get_response=None):
3
        self.get_response = get_response
4
        super().__init__()
5

6
    def __call__(self, request):
7
        response = None
8
        if hasattr(self, 'process_request'):
9
            response = self.process_request(request)
10
        if not response:
11
            response = self.get_response(request)
12
        if hasattr(self, 'process_response'):
13
            response = self.process_response(request, response)
14
        return response
15

16

17
class CORSMiddleware(MiddlewareMixin):
18
    def process_response(self, request, response):
19
        # 添加响应头
20
        # 允许你的域名来获取我的数据
21
        response['Access-Control-Allow-Origin'] = "*"
22

23
        # 允许携带Content-Type请求头
24
        # response['Access-Control-Allow-Headers'] = 'Content-Type'    Content-Type = url-encodeing
25

26
        # 允许发送DELETE,PUT(复杂请求)
27
        # response['Access-Control-Allow-Methods'] = "DELETE, PUT"
28

29
        return response
 
 
再到settings.py中注册一下

 
 
 
 
 
 
 
 
 
1
MIDDLEWARE = [
2
    ...
3
    'app01.cors.CORSMiddleware',
4
]
 
 
在这里跨域还要分简单请求与复杂请求
如果只是发送GET请求那么则说明是简单请求!反之为复杂请求!
原文地址:https://www.cnblogs.com/pontoon/p/10217396.html