Django解决跨域请求的问题


CORS: cross-origin resource sharing  跨域资源共享

CORS 需要浏览器和服务器同时支持,整个CORS的过程,都是浏览器自动完成,对于用户来说是无感的,先要实现 CORS 的关键是服务器,只要服务器实现了 CORS 接口,就可以跨域通信

同源策略: 浏览器最核心最基础的安全功能

  何为同源:
    url的协议,主机,端口完全一致的时候就是同源(端口默认是80)
    http://example.com/
    http://example.com:80/
    http://example.com/path
  上面的每个url都是同源的

  
  以下每个资源都是不同源的
    http://example.com/
    http://example.com:8080/
    http://www.example.com/
    https://example.com/
    https://www.baidu.com/

何为同源策略,简单理解,就当打开某个页面后,这个页面上的ajax请求默认只能向和页面同源的url发送http请求

 

django-cors-headers 是一个处理cors所需服务器头信息的一个django应用

1、安装django-cors-headers模块

    pip install django-cors-headers

 

2、插入Django的APP配置中

# 修改settings.py中的INSTALLED_APPS配置

INSTALLED_APPS = ['corsheaders']

  

3、注册CorsMiddleware中间件

jdango查找中间件由上到下,注意要放到 CommonMiddleware 上面

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware', # CORS中间件
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 

4、跨域设置

# 服务器运行跨域的域名

CORS_ALLOWED_ORIGINS = [
    # 设置允许跨域的域名
    'http://localhost:8000',
    'http://127.0.0.1:8001',
]


# 允许cookie跨域
# CORS_ALLOW_CREDENTIALS = True

# 允许所有来源跨域
CORS_ALLOW_ALL_ORIGINS = True

  

具体介绍可以查看   https://pypi.org/project/django-cors-headers/

 

posted @ 2022-03-03 17:29  北京测试菜鸟  阅读(270)  评论(0编辑  收藏  举报