00,跨域的问题

Posted pontoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了00,跨域的问题相关的知识,希望对你有一定的参考价值。

 

什么是跨域?
浏览器的同源策略限制默认情况下前端页面和后端服务在不同服务器(域名、端口不一样)时,前端页面js无法请求到后端接口服务,即存在跨域问题。
DRF是怎么解决跨域问题?
  • 使用Jsonp方式解决
  • 使用cors解决
  • 使用nginx代理解决
使用Jsonp解决跨域的思路?
由于浏览器中的<script>的src请求、<img>的src请求
使用DRF的cors解决
写restfull响应的接口要额外的加一个相应头。
技术分享图片
response中只是响应了很多的数据,还需要增加响应头。
在哪加,在中间件里加
技术分享图片
<wiz_code_mirror>
 
 
 
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中注册一下
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
1
MIDDLEWARE = [
2
    ...
3
    ‘app01.cors.CORSMiddleware‘,
4
]
 
 
在这里跨域还要分简单请求与复杂请求
如果只是发送GET请求那么则说明是简单请求!反之为复杂请求!

以上是关于00,跨域的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何解决IE8下Ajax调用时跨域的问题

使用Nginx来解决跨域的问题

web api 解决跨域的问题

跨域的几种方法及案例代码

使用 RESTful 服务保护跨域的 API 调用

javascript中跨域的http post请求