js ajax Django跨域,用CORS 解决vue.js django跨域调用

本文介绍了CORS(跨域资源共享)的概念,它是现代浏览器允许跨域请求的一种安全机制,不同于仅支持GET请求的JSONP。在Django和Vue.js项目中遇到跨域问题,当子域名不同导致POST请求失败时,可以通过django-cors-middleware解决。文章详细阐述了安装和配置该中间件的步骤,包括添加应用、中间件、设置允许的域名、方法和头部,以实现跨域POST请求的成功访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 什么是 CORS?

Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好。另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作。现代的浏览器都支持 CORS。

2 什么是跨域

如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容

如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.

由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体可以查看下表(来源)

1fd744512d83

跨域说明

3 问题

在 django 和vue.js 的一个项目中,做RESTFUL接口遇到跨域问题,在同一个主域名下,子域名不同, 用get方式可以成功访问,用post方式访问报跨域错误,无法访问

网上查到的 jsonp解决方法问题在于只支持 GET方法,无法支持POST。

4 解决方法

通过在服务器端引入cors解决跨域问题,形成和vue.js联合使用

引入 django-cors-middleware

pip install django-cors-middleware

在 settings.py中添加,注意:不添加的话无法生效

INSTALLED_APPS = (

...

'corsheaders',

)

添加 中间件 监听

MIDDLEWARE = [

...

'corsheaders.middleware.CorsMiddleware',

'django.middleware.common.CommonMiddleware',

...

]

配置允许跨域访问的域名

CORS_ORIGIN_ALLOW_ALL = False

CORS_ORIGIN_WHITELIST = (

'google.com',

'hostname.example.com'

)

默认值是全部:

CORS_ORIGIN_WHITELIST = ()

或者定义允许的匹配路径正则表达式.

CORS_ORIGIN_REGEX_WHITELIST = ('^(https?://)?(\w+.)?>google.com$', )

默认值:

CORS_ORIGIN_REGEX_WHITELIST = ()

设置允许访问的方法:

CORS_ALLOW_METHODS = (

'GET',

'POST',

'PUT',

'PATCH',

'DELETE',

'OPTIONS'

)

设置允许的header:

默认值:

CORS_ALLOW_HEADERS = (

'x-requested-with',

'content-type',

'accept',

'origin',

'authorization',

'x-csrftoken'

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值