Django中解决跨域问题

同源策略(Same origin policy)是一种约定,它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同,如果不一致,请求会发送成功,后端会正常响应,但是浏览器会拦截

跨域问题产生的原因:

浏览器对非同源请求返回的结果做了拦截,只要做前后端分离,就会产生跨域问题

解决跨域问题

CORS:跨域资源共享 ,向相应头中加数据,允许跨域

JSONP:利用有的标签没有跨域问题 比如script img

websocket:长连接,不存在跨域

前端代理:开发阶段用,上线不用

CORS如何解决跨域问题

首先我们需要服务端支持----》就是服务端在相应头中加数据

CORS基本流程

CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)

简单请求:只发送一次

非简单请求:发送两次,第一次是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

凡是不同时满足上面两个条件,就属于非简单请求。

解决跨域问题

方案一

统一写一个中间件,处理所有跨域

from django.utils.deprecation import MiddlewareMixin
class CorsMiddleWare(MiddlewareMixin):
    def process_response(self,request,response):
        if request.method=="OPTIONS":
            #可以加*
            response["Access-Control-Allow-Headers"]="*"
            res['Access-Control-Allow-Methods'] = '*'
        response["Access-Control-Allow-Origin"] = "*"
        return response

方案二

使用第三方模块

	# 1、使用pip安装
	pip install django-cors-headers
    #2、添加到setting的app中
    INSTALLED_APPS = (
        ...
        'corsheaders',
        ...
    )
  #3、添加中间件
    MIDDLEWARE = [  
        ...
        'corsheaders.middleware.CorsMiddleware',
        ...
    ]
4、setting下面添加下面的配置
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'
)

相关推荐

  1. Django解决问题

    2024-01-22 06:14:03       63 阅读
  2. Django问题解决

    2024-01-22 06:14:03       23 阅读
  3. Djange解决问题

    2024-01-22 06:14:03       38 阅读
  4. 解决django问题详解

    2024-01-22 06:14:03       42 阅读
  5. Vue问题解决

    2024-01-22 06:14:03       48 阅读
  6. 解决问题

    2024-01-22 06:14:03       45 阅读
  7. 解决问题

    2024-01-22 06:14:03       28 阅读
  8. Django】CORS问题

    2024-01-22 06:14:03       40 阅读
  9. 问题+解决express

    2024-01-22 06:14:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 06:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 06:14:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 06:14:03       82 阅读
  4. Python语言-面向对象

    2024-01-22 06:14:03       91 阅读

热门阅读

  1. 网络安全B模块(笔记详解)- Apache安全配置

    2024-01-22 06:14:03       53 阅读
  2. 【leetcode100-044到050】【二叉树】七题合集

    2024-01-22 06:14:03       54 阅读
  3. ajax的优缺点?

    2024-01-22 06:14:03       45 阅读
  4. Chatgpt与文心一言哪个AI更好?

    2024-01-22 06:14:03       56 阅读
  5. 跨平台游戏引擎 Axmol-2.1.0 正式发布

    2024-01-22 06:14:03       48 阅读
  6. Mac通过ssh、https访问gitlab私有仓库

    2024-01-22 06:14:03       46 阅读
  7. C语言应用层程序热补丁

    2024-01-22 06:14:03       51 阅读
  8. JUnit

    JUnit

    2024-01-22 06:14:03      53 阅读
  9. HJ5 进制转换【C语言】

    2024-01-22 06:14:03       53 阅读
  10. 组播地址与组播MAC的换算

    2024-01-22 06:14:03       42 阅读