Cors блокирует запрос со статусом 403 на Nginx

Я столкнулся со странной проблемой при запуске CORS на Nginx, CORS работает нормально для всего, кроме одного сценария, когда сервер отвечает HTTP-ответом 403.

В основном, когда я вхожу в систему с правильными учетными данными, запрос cors работает нормально, однако, когда я предоставляю неправильные учетные данные для входа в систему, сервер (бэкэнд) отвечает статусом 403, и я получаю следующую ошибку "NetworkError: 403 Forbidden - http://mydomain.com/v1/login" login Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://mydomain.com/v1/login. This can be fixed by moving the resource to the same domain or enabling CORS. Если учетные данные верны, я не получаю эту ошибку и все работает отлично.

Я выполнил настройку для включения CORS, и, похоже, все остальное работает нормально.

Ниже приведены заголовки запроса.

Заголовки запроса User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0 Referer:http://abc.mydomain.com/ Pragma: no-cache Origin: http://abc.mydomain.com Host: www.mydomain.com Content-Type: application/json;charset=utf-8 Content-Length: 74 Connection: keep-alive Cache-Control: no-cache Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Accept: application/json, text/plain, / Заголовки ответа Server: nginx/1.4.1 Date: Tue, 10 Jun 2014 05:28:30 GMT Content-Type: application/json; charset=utf-8 Content-Length: 76 Connection: keep-alive


person Sameer    schedule 09.06.2014    source источник
comment
возможно, вставка заголовков запроса и ответа поможет ответить на ваш вопрос   -  person Marcel    schedule 09.06.2014
comment
@Marcel Марсель, я обновил сообщение с заголовками запросов и ответов.   -  person Sameer    schedule 10.06.2014
comment
Это не похоже на проблему, RESTFUL API означает, что если вы введете неправильные учетные данные, он ответит 403, как и предполагалось.   -  person Marcel    schedule 10.06.2014
comment
@Marcel абсолютно, проблема в том, что когда сервер отвечает 403 , я начинаю получать ошибку CORS на консоли firebug.   -  person Sameer    schedule 11.06.2014
comment
в вставленных заголовках нет заголовка, связанного с CORS.   -  person Marcel    schedule 11.06.2014


Ответы (2)


Для nginx(>=1.75) можно указать параметр always в add_header :

Если указан параметр always (1.7.5), поле заголовка будет добавлено независимо от кода ответа.

person kelvinhust    schedule 28.09.2015

Я предполагаю, что вы используете директиву add_header для добавления заголовков CORS в конфигурацию nginx.

Справочник по модулям Nginx говорит о add_header:

Добавляет указанное поле в заголовок ответа при условии, что код ответа равен 200, 201, 204, 206, 301, 302, 303, 304 или 307.

Чтобы устранить проблему, вы можете использовать модуль ngx_headers_more, чтобы настроить заголовки CORS также для ответов на ошибки.

more_set_headers 'Access-Control-Allow-Origin: $http_origin';

more_set_headers 'Access-Control-Allow-Headers: Content-Type, Origin, Accept, Cookie';
person Tuomo Kestilä    schedule 16.09.2014