Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Рекомендованные сообещёния

Приветствую форумчане. Даая проблема, пыиюсь выполнить 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"}';
?>

 

Изменено пользователем kairos
Ссылка на комменирий
Погделиться на других сайих


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

$(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 или тут без обраещёния в саппорт хостинга не опотому чтойтись? 

Изменено пользователем kairos
Ссылка на комменирий
Погделиться на других сайих


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

На проблемном хостинге помог файл: .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);
                      }
                  });
                });

 

Изменено пользователем kairos
  • +1 1
Ссылка на комменирий
Погделиться на других сайих


  • 2 негдели спустя...

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

Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.