【发布时间】:2018-02-25 02:23:59
【问题描述】:
更新:重写问题,因为我有一些新信息。历史记录在编辑中可见。
问题介绍
我有一个django-rest-framework 应用程序在子域api.nrzonline.nl 上运行。前端ng2 + webpack 应用程序在域本身nrzonline.nl 上运行。在向 API 发送带有 ng2-restangular 的请求时,我在控制台中收到以下错误:
zone.js OPTIONS http://api.nrzonline.com/project/ net::ERR_EMPTY_RESPONSE
EXCEPTION: Response with status: 0 for URL: null
当前问题
经过相当多的 curls 测试,我发现当发送带有OPTIONS 的预检请求时,所有请求都失败了。
-X GET 的请求正常工作:
curl 'api.nrzonline.nl/skill/' -X GET
[{"id":1,"category":{"id":1,"title":"skill-a",...}]
-X OPTIONS 的(预检)请求失败,没有响应
curl 'api.nrzonline.nl/skill/' -X OPTIONS
curl: (52) Empty reply from server
在 Django 开发服务器上的 API 上执行此 -x OPTIONS 请求在本地可以正常工作。
服务器设置
CORS_ORIGIN_ALLOW_ALL = True-
CORS_ALLOW_METHODS是默认设置,允许OPTIONS -
CORS_ALLOW_HEADERS是默认设置
中间件:
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
我的尝试
- 我读到服务器可能需要 HTTPS 请求,但目前没有活动的 SSL 证书。 (source) 不过,我确实尝试过
curl和--insecure(source) - 以
text/plain发送请求,而不是application/json和-H "Content-Type: text/plain"(source (comment on answer))
问题
我错过了什么/做错了什么,所以-X OPTIONS 的预检失败了。欢迎提供任何提示、解释或参考可能的解决方案。
【问题讨论】:
标签: curl cors django-rest-framework django-cors-headers