更新:由于我获得了一些新信息,因此重写了这个问题。历史记录在编辑中可见。
问题介绍
我在子域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
当前问题
经过一些卷发测试后,我发现当发送带有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',
...
]
我尝试了什么
curl
与--insecure
(source)text/plain
application/json
(source (comment on answer))-H "Content-Type: text/plain"
而不是-X OPTIONS
发送请求
问题
我错过了什么/做错了什么,因此def waitForThread(delay,my_threads):
time.sleep (delay)
for t in my_threads:
t.join ()
if t in my_threads:
my_threads.remove (t)
return
的预检失败了。欢迎提供有关可能解决方案的任何提示,解释或参考。
答案 0 :(得分:1)
回答我的兄弟,我网站的主人
问题与DirectAdmin有关。默认情况下,DirectAdmin仅允许GET
,POST
和HEAD
。
这些设置位于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
文件。在此进行修改可以防止丢失调整。