@Galdar
Web, JS, PHP, NGINX, Linux

Как устанить ошибку CORS?

Вот скрипт JS
JS
var xhr = new XMLHttpRequest();

      var json = JSON.stringify(data);

      xhr.withCredentials = true;

      xhr.open('POST', 'https://dev.dev.ru/server/', true);
      
      xhr.setRequestHeader('Access-Control-Allow-Origin', "https://login.domain.ru/");
      xhr.setRequestHeader('Access-Control-Allow-Headers', 'origin, content-type, accept');
      xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');

      xhr.onreadystatechange = function() {
        if (this.readyState != 4) return;
      
        console.log( this.responseText );

        callback( this.responseText )
      }

      xhr.send(json);


Вот конфиг NGINX он установлен в location /server/
NGINX

if ($request_method = 'OPTIONS') {

      add_header 'Access-Control-Allow-Origin' "https://login.domain.ru/";
      
      #
      # Om nom nom cookies
      #

      add_header 'Access-Control-Allow-Credentials' 'true';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      
      #
      # Custom headers and headers various browsers *should* be OK with but aren't
      #

      add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
      
      #
      # Tell client that this pre-flight info is valid for 20 days
      #

      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' "https://login.domain.ru/";
      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' "https://login.domain.ru/";
      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';

    }



Пишет ошибку что (Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://dev.dev.ru/server/. (Причина: заголовок CORS «Access-Control-Allow-Origin» не совпадает с «https://login.domain.ru/»).)

Что я неправильно делаю?
  • Вопрос задан
  • 5973 просмотра
Решения вопроса 2
@Galdar Автор вопроса
Web, JS, PHP, NGINX, Linux
Разместил вне всех location
add_header 'Access-Control-Allow-Origin' 'https://domain.ru';
   add_header 'Access-Control-Allow-Credentials' 'true';
   add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken';
   add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';


Доп инфа, которая была очень полезна:
https://webdevblog.ru/chto-takoe-cors/
https://techfeed.net/240446/
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
Оригин без слэша в конце пишется, возможно, из-за него несовпадение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FireGM
Лучше всего почитать про CORS. Если не знать что делаешь, то это может создать огромную дыру, через которую можно будет делать много плохого.
Но если вы хотите просто попробовать, то добавить заголовки для https://dev.dev.ru.
add_header 'Access-Control-Allow-Origin' "https://dev.dev.ru"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы