无法让 CORS 与内容类型一起使用 - Django Rest Framework
Posted
技术标签:
【中文标题】无法让 CORS 与内容类型一起使用 - Django Rest Framework【英文标题】:Cannot get CORS to work with contenType - Django Rest Framework 【发布时间】:2013-04-27 01:15:00 【问题描述】:我在这个愚蠢的小问题上浪费了一整天!
我在前端使用django-rest-framework
作为我的api 和backbone.js。
添加选项contentType
时无法向服务器发出任何请求。
这是我正在尝试做的一个简单示例:
$.ajax
url:"http://127.0.0.1:8080/foo/"
type:"POST"
data: '"e":"e"'
contentType: "application/json"
OPTIONS 失败,POST 永远不会发送。
选项请求标头:
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:POST
Origin:http://localhost:8000
现在我不知道为什么 OPTIONS 会失败。我用的是django的corsheaders app,设置如下:
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization'
)
【问题讨论】:
你能分享一下 OPTIONS 响应头吗? 另外,您需要CORS_ALLOW_METHODS
属性吗?例如CORS_ALLOW_METHODS = ('GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS')
Chrome 中的 OPTIONS 响应完全为空
你是说 settings.py 中的 CORS_ALLOW_METHODS = ( 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS' ) 吗?这没有帮助
在我看来:@api_view(['POST', 'GET','DELETE','OPTIONS']) 他们是被允许的。
【参考方案1】:
CORS_ORIGIN_ALLOW_ALL = True
如果你有以下设置就足够了
INSTALLED_APPS = (
*
'corsheaders',
)
MIDDLEWARE_CLASSES = (
*
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
)
【讨论】:
以上是关于无法让 CORS 与内容类型一起使用 - Django Rest Framework的主要内容,如果未能解决你的问题,请参考以下文章
如何让 CORS 与 ASP.Net Core Web API 服务器 Angular 2 客户端一起工作