У нас есть сайт 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 -->
Итак, я думаю, что одна или обе из следующих проблем:
Может ли кто-нибудь увидеть, что я делаю неправильно / не делаю? благодаря
javascript,nginx,cors,xmlhttprequest,cross-origin-read-blocking,
У нас есть сайт 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 -->
Итак, я думаю, что одна или обе из следующих проблем:
Может ли кто-нибудь увидеть, что я делаю неправильно / не делаю? благодаря
00JavaScript, Nginx, CORS, XMLHttpRequest, кросс-происхождение чтения-блокирование,