【问题标题】:CORS and non 200 statusCodeCORS 和非 200 statusCode
【发布时间】:2014-08-01 11:03:15
【问题描述】:

我的 CORS 与 Nginx 配合得很好。 API 旨在发送非HTTP 200 状态码,例如401404 等,以防输入错误。问题是如果 Chrome 收到非 HTTP 200 状态代码,它会取消/中止请求。由于这个原因,我无法在 Web 客户端上显示确切的错误。

CORS 非 200 状态码错误的处理方法是什么?

【问题讨论】:

    标签: nginx cors http-status-codes


    【解决方案1】:

    默认情况下,Nginx 只为它认为成功的请求添加标头。您可以通过将always 参数添加到您的add_header 指令来使其添加标头而不考虑响应代码,例如

    add_header 'Access-Control-Allow-Origin' '*' always;
    

    always 参数添加到Access-Control-Allow-Origin 标头是不够的。 always 参数需要添加到需要始终添加的标头中。在某些情况下,您需要将always 参数添加到Access-Control-Allow-Credentials 标头。

    add_header 'Access-Control-Allow-Credentials' 'true' always;
    

    【讨论】:

    • 它给出错误:nginx: [emerg] invalid number of arguments in "add_header" directive in /etc/nginx/include.d/cors:37
    • 这可能为时已晚,但是您使用的是哪个版本的nginx?在 v1.7.5 中添加了 always 关键字。对于早期版本,您必须使用more_set_headers,如下所述。
    【解决方案2】:

    您需要使用 more_set_headers 模块。

    使用 -s 可以指定更多的状态码

    more_set_headers -s '404,400,403' 'Access-Control-Allow-Origin: http://domain.com';

    但是,如果您没有在 nginx 中安装此模块,则需要重新编译它。 编译它:

    wget http://nginx.org/download/nginx-1.7.8.tar.gz
    git clone https://github.com/openresty/headers-more-nginx-module.git
    tar -xzvf nginx-1.7.8.tar.gz
    cd nginx-1.7.8
    ./configure --prefix=/opt/nginx --add-module=/path/to/headers-more-nginx-module
    make
    make install
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多