LINUX.ORG.RU

nginx cors Access-Control-Allow-Origin

 , ,


1

2

тестируем мобильную версию сайта - m.example.com и есть домен hhh.example.com откуда берутся разные данные, все домены мои

настроил cors для hhh.example.com

if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' 'm.example.com';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;

        return 204;
}

if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' 'm.example.com';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' 'm.example.com';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

смотрю через мозилу и хром

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://hhh.example.com/api/. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘m.example.com’).[Подробнее]
Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://hhh.example.com/api/. (Причина: не удалось выполнить запрос CORS)
Failed to load http://hhh.example.com/device: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains the invalid value 'm.example.com'. Origin 'http://m.example.com' is therefore not allowed access. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

смотрю через просмотр кода на странице

URL запроса: http://hhh.example.com/api/
Метод запроса: OPTIONS
Удалённый адрес: IP
Код состояния: 204
Версия: HTTP/1.1
	
Access-Control-Allow-Credentials true
Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,U…ce,Cache-Control,Content-Type
Access-Control-Allow-Methods	
GET, POST, OPTIONS
Access-Control-Allow-Origin m.example.com
...

видно что cors работает, но почему браузеры ругаются?


если зайти через режим инкогнито на http://m.example.com то оно работает 1 раз

URL запроса: http://hhh.example.com/api/
Метод запроса: POST
Удалённый адрес: IP
Код состояния: 200
Версия: HTTP/1.1
	
Заголовки ответа (1,283 КБ)	
Access-Control-Allow-Headers X-User-Token
Access-Control-Allow-Methods GET,POST,PATCH,DELETE,PUT,OPTIONS,COPY,HEAD
Access-Control-Allow-Origin http://m.example.com
...

обновляю страницу и уже не работает

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://hhh.example.com/api/. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘m.example.com’).

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://hhh.example.com/api/. (Причина: не удалось выполнить запрос CORS).

Garcia
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.