Не удается получить запрос CORS на работу с Nginx

У нас есть сайт wordpress, который подается из разных доменов / поддоменов, которые я вам позвоню https://source.example. У нас также есть сайт Rails, основанный на Nginx https://destination.example.

Когда кто-то загружает страницу https://source.example, я пытаюсь отправить XMLHttpRequest https://destination.example, чтобы сообщить сайту Rails, что пользователь использует сайт wordpress.

URL-адрес получателя https://destination.example/accounts/record_activity, который мне нужно вызвать с помощью запроса POST, передавая {"account_id" : 12345}данные. Вот как я это делаю сейчас, в javascript source.example:

function recordVipAccountSession(railsSite){
  var id = readCookie('token_authed');
  if(id != null && readCookie('session_started') == null){
    var xhr = new XMLHttpRequest();

    //callback for success
    xhr.onreadystatechange = function() {
      if (xhr.readyState === XMLHttpRequest.DONE) {
        console.log("got response from xhr POST: "+xhr.responseText);
        if(xhr.responseText == "OK"){
          //make the cookie, lasting 30 mins (1/48 days), so we don't do this again for another 30 mins
          console.log("creating cookie");
          createCookie("session_started",(new Date).getTime(),(1.0/48))
        } else {
          console.log("Didn't get OK back, not setting a cookie");
        }  
      }
    }    

    //set up and send the request
    var url = railsSite + "/accounts/record_activity";
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var result = xhr.send("id=" + readCookie("token_authed"));  
  }
}

Первоначально запрос проходил и обрабатывался на конце Rails, но сообщал (о https://source.example) как заблокированный из-за CORS. Итак, я изменил конфигурацию nginx (это все происходит на моем dev-сервере):

# in the main 'server' block
# POST requests come from wordpress to this, so allow CORS  
location /accounts/record_activity {
  add_header 'Access-Control-Allow-Origin' *;
}    

С этим изменением nginx в Rails ничего не происходит, и в конце исходного кода он теперь говорит (в консоли). «Блокировка перекрестного происхождения» (CORB) блокировала ответ на кросс- исходный https: //destination.example/accounts/ record_activity с текстом типа MIME / html "

Затем я изменил конфигурацию nginx, чтобы быть более конкретным:

# POST requests come from wordpress to this, so allow CORS  
location /accounts/record_activity {
  add_header 'Access-Control-Allow-Origin' "$http_origin" always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Methods' 'POST' always;
  add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
}

И теперь он больше не сообщает о проблеме CORS, но вместо этого я получаю примерно 404 текста: в журнале Rails ничего не происходит, поэтому это, по-видимому, от Nginx: следующий ответ на мой запрос xhr в консоли source.example:

got response from POST: <html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->

Итак, я думаю, что одна или обе из следующих проблем:

  • Мне нужно что-то другое / другое в моем блоке nginx, чтобы разрешить эти запросы
  • Мне нужно сделать что-то другое (добавить другой заголовок?) В мой запрос xhr в моем исходном javascript.

Может ли кто-нибудь увидеть, что я делаю неправильно / не делаю? благодаря

javascript,nginx,cors,xmlhttprequest,cross-origin-read-blocking,

0

Ответов: 0

Не удается получить запрос CORS на работу с Nginx

У нас есть сайт wordpress, который подается из разных доменов / поддоменов, которые я вам позвоню https://source.example. У нас также есть сайт Rails, основанный на Nginx https://destination.example.

Когда кто-то загружает страницу https://source.example, я пытаюсь отправить XMLHttpRequest https://destination.example, чтобы сообщить сайту Rails, что пользователь использует сайт wordpress.

URL-адрес получателя https://destination.example/accounts/record_activity, который мне нужно вызвать с помощью запроса POST, передавая {"account_id" : 12345}данные. Вот как я это делаю сейчас, в javascript source.example:

function recordVipAccountSession(railsSite){
  var id = readCookie('token_authed');
  if(id != null && readCookie('session_started') == null){
    var xhr = new XMLHttpRequest();

    //callback for success
    xhr.onreadystatechange = function() {
      if (xhr.readyState === XMLHttpRequest.DONE) {
        console.log("got response from xhr POST: "+xhr.responseText);
        if(xhr.responseText == "OK"){
          //make the cookie, lasting 30 mins (1/48 days), so we don't do this again for another 30 mins
          console.log("creating cookie");
          createCookie("session_started",(new Date).getTime(),(1.0/48))
        } else {
          console.log("Didn't get OK back, not setting a cookie");
        }  
      }
    }    

    //set up and send the request
    var url = railsSite + "/accounts/record_activity";
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var result = xhr.send("id=" + readCookie("token_authed"));  
  }
}

Первоначально запрос проходил и обрабатывался на конце Rails, но сообщал (о https://source.example) как заблокированный из-за CORS. Итак, я изменил конфигурацию nginx (это все происходит на моем dev-сервере):

# in the main 'server' block
# POST requests come from wordpress to this, so allow CORS  
location /accounts/record_activity {
  add_header 'Access-Control-Allow-Origin' *;
}    

С этим изменением nginx в Rails ничего не происходит, и в конце исходного кода он теперь говорит (в консоли). «Блокировка перекрестного происхождения» (CORB) блокировала ответ на кросс- исходный https: //destination.example/accounts/ record_activity с текстом типа MIME / html "

Затем я изменил конфигурацию nginx, чтобы быть более конкретным:

# POST requests come from wordpress to this, so allow CORS  
location /accounts/record_activity {
  add_header 'Access-Control-Allow-Origin' "$http_origin" always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Methods' 'POST' always;
  add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
}

И теперь он больше не сообщает о проблеме CORS, но вместо этого я получаю примерно 404 текста: в журнале Rails ничего не происходит, поэтому это, по-видимому, от Nginx: следующий ответ на мой запрос xhr в консоли source.example:

got response from POST: <html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->

Итак, я думаю, что одна или обе из следующих проблем:

  • Мне нужно что-то другое / другое в моем блоке nginx, чтобы разрешить эти запросы
  • Мне нужно сделать что-то другое (добавить другой заголовок?) В мой запрос xhr в моем исходном javascript.

Может ли кто-нибудь увидеть, что я делаю неправильно / не делаю? благодаря

00JavaScript, Nginx, CORS, XMLHttpRequest, кросс-происхождение чтения-блокирование,
Похожие вопросы
Яндекс.Метрика