CORS 在使用 OPTIONS 请求时失败(响应状态:0)

CORS fails on request with OPTIONS (Response with status: 0)

更新:重写问题,因为我得到了一些新信息。历史在编辑中可见。

问题介绍
我在子域 api.nrzonline.nl 上有一个 django-rest-framework 应用程序 运行。前端 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 请求在本地工作没有任何问题。

服务器设置

中间件:

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

我试过的

问题
我错过了什么/做错了什么,所以 -X OPTIONS 的预检失败了。欢迎任何提示、解释或参考可能的解决方案。

答案归功于我的兄弟,我网站的托管人

此问题与 DirectAdmin 相关。默认情况下,DirectAdmin 只允许 GETPOSTHEAD.

这些设置在 include /etc/nginx/webapps.conf; 中找到:

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
}

添加 OPTIONS 应该可以解决问题。删除或注释掉代码块以允许任何请求方法。

但是,修改 /etc/nginx/webapps.conf 可能会导致 DirectAdmin 在新的 HTTPD 更新期间覆盖此文件。文件 <path_to_directadmin>/custombuild/costum/nginx/conf 用于生成 conf 文件。在此处进行修改应该可以防止丢失您的调整。