【问题标题】:Cannot get CORS to work with contenType - Django Rest Framework无法让 CORS 与内容类型一起使用 - 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']) 他们是被允许的。

标签: jquery django backbone.js django-rest-framework django-cors-headers


【解决方案1】:
CORS_ORIGIN_ALLOW_ALL = True

如果你有以下设置就足够了

INSTALLED_APPS = (
    *
    'corsheaders',
)

MIDDLEWARE_CLASSES = (
    *
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
)

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 2015-03-29
    • 2012-08-02
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2018-03-23
    • 2012-02-21
    相关资源
    最近更新 更多