【问题标题】:CORS fails on request with OPTIONS (Response with status: 0)CORS 因请求而失败,带有 OPTIONS(状态为 0 的响应)
【发布时间】: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


    【解决方案1】:

    请回答我的兄弟,我网站的主持人

    问题与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 文件。在此处进行修改应该可以防止丢失您的调整。

    【讨论】:

      猜你喜欢
      • 2014-02-14
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2015-07-23
      • 2015-09-27
      • 2021-03-29
      • 2020-03-28
      相关资源
      最近更新 更多