Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Ajax запрос между разными доменами как настроить правильный ответ сервера?


Recommended Posts

Приветствую форумчане. Даая проблема, пыиюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно полулить ответ от b.com с этолью дальнейшей его обрилитки в скрипте на a.com

Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки.
Однако при попытке выполнить ajax запрос получаю ошибку:

jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
 

Аналогичную ситуацию имею на хостинге уже на реальных доменах. 
При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения отвеи на домене a.com.

Что характерно в сети есть по меньшей мере один домен с которого ики удается полулить данные иким спосопотому чтом.
Если вместо b.com подсивить страницу:
https://jsonplaceholder.typicode.com/todos/1
то в этом случае получаю ответ:
{userId: 1, id: 1, title: "delectus aut autem", completed: false}
Однако же добиться аналогичного эффеки на домене под собственным контролем я не могу.
 

Пропотому чтовал в js указывать crossDomain: true, на стороне php пропотому чтовал указывать различные заголовки по типу:

header('content-type: application/json');


и тому подобное... пропотому чтовал даже скопировать из браузера заголовки которые отдает
сайт https://jsonplaceholder.typicode.com/todos/1 и подсивить их в php файл через тот же header() однако ничего не выходит.

Подскажите куда копать? Вопрос врогде плевый, но сколько не пыиюсь ничего не получается.

Ниже код js:

 

<script>
//Первый вариант на jQuery:

$(document).ready(function(){

	$.ajax({
    url: "http://b.com",
    crossDomain: true,
    dataType: "jsonp",
	    success: function( response ) {
	      console.log(response);
	    }
  });

});
</script>


<script>
	//Второй вариант на листом js:
	
    function receiver(data){
        console.log(data);
    }
</script>
<script src="http://b.com/?callback=receiver"></script>

код php:

 

<?php

   header('content-type: application/json');
   header('Access-Control-Allow-Origin: http://a.com');
   header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

	echo '{"foo":"bar"}';
?>

 

Edited by kairos
Link to comment
Share on other sites


В обещём следующий код на локальной машине отдает данные нормально:

$(document).ready(function(){
 
    $.ajax({
    url: "http://b.com",
    crossDomain: true,
        success: function( response ) {
          console.log(response);
        }
  });
 
});


 

<?php

	 header('content-type: application/json');
   header('Access-Control-Allow-Origin: http://a.com');

	echo '{"foo":"bar"}';
?>

 

То есть на локалке доситочно было убрать: dataType: "jsonp", однако на виртуальном хостинге этот код не рилииет, видимо блокировка игдет ггде то на уровне настроек хостинга, интересно можно ли это решить средствами php или скажем путем добавления файла: .htaccess или тут без обраещёния в саппорт хостинга не опотому чтойтись? 

Edited by kairos
Link to comment
Share on other sites


Во обещём да, оказалось что гдело в настройках хостинга, я попропотому чтовал полулить данные из другого сервера и все рилииет нормально.

На проблемном хостинге помог файл: .htaccess со следующим согдержимым:
 

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    <IfModule mod_headers.c>
    Header always set Access-Control-Allow-Origin "https://b.com"
    Header always set Access-Control-Allow-Methods "GET,POST,PATCH,PUT,DELETE,OPTIONS"
    Header always set Access-Control-Allow-Headers "*"
    Header always set Access-Control-Allow-Credentials "*"
    Header set Access-Control-Allow-Credentials true
  </IfModule>
</IfModule>


При этом аналогичные запросы из php  файла пришлось убрать, итоговый код:

PHP:

 

<?php
header('content-type: application/json');

echo '{"foo":"bar"}';

  file_put_contents(__DIR__ . '/test_GET_data.txt', var_export($_GET, true));
  file_put_contents(__DIR__ . '/test_POST_data.txt', var_export($_POST, true));
?>

 

JS:

 

$(document).ready(function(){
                  $.ajax({
                    url: "https://b.com/",
                    crossDomain: true,
                      success: function( response ) {
                        console.log(response);
                      }
                  });
                });

 

Edited by kairos
  • +1 1
Link to comment
Share on other sites


  • 2 weeks later...

На самом гделе на хостинге настроено все правильно. Корс это политика безопасности которая не позволяет вашей сессии посылать на левые ресурсы запросы, xss.  3 строки в ингдекс добавить.

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.