CORS跨域问题

跨域问题

1 跨域问题介绍

# 跨域问题出现的原因? PC端,前后端分离,才会出现
	-浏览器:同源策略,浏览器的基本安全策略,不允许 去不同的url地址获取数据;域名,端口,协议必须相同
    
    
# 解决方案:CORS
CORS,后端技术,跨域资源共享,服务端在响应头中加入一下东西,允许跨域。
CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)
简单请求只发一次,非简单请求发送两次,第一次是OPTIONS预检请求,第二次是真正的请求。

# 简单请求要满足以下2个条件
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
    
    
# 

2 跨域问题解决

# 解决思路:
1.简单请求,支持跨域
	服务器设置响应头:Access-Control-Allow-Origin = '域名' 或 '*'

2.非简单请求支持跨域
	在响应头中设置:Access-Control-Allow-Methods='*'
	在响应头中设置:Access-Control-Request-Headers='*'
    
 
# 解决方案1:自定义中间件
class CorsMiddle(MiddlewareMixin):
        def process_response(self, request, response):
            if request.method == 'OPTIONS':
                response['Access-Control-Allow-Headers'] = '*'
                response['Access-Control-Allow-Methods'] = '*'
            # 在响应头中加入Access-Control-Allow-Origin,处理了简单请求
            response['Access-Control-Allow-Origin'] = '*'
            # 处理非简单请求
            return response
        
    
    
# 解决方案2:使用第三方模块 (推荐)
1安装
    	pip install django-cors-headers
    
2 在app中注册
    	INSTALLED_APPS = (
            ...
            'corsheaders',
            ...
        )
    
3 在中间件中加入
    MIDDLEWARE = [  
        ...
        'corsheaders.middleware.CorsMiddleware',
        ...
    ]
    
4 在配置文件中配置
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ALLOW_METHODS = (
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
        'VIEW',
    )

    CORS_ALLOW_HEADERS = (
        'XMLHttpRequest',
        'X_FILENAME',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
        'Pragma',
        'token'
    )
posted @ 2021-10-20 16:17  hai437  阅读(36)  评论(0编辑  收藏  举报