Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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 post
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 post
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 post
Share on other sites

  • 2 weeks later...

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

Link to post
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
  • Similar Content

    • By kirians
      2775 39
      Скачать/Купить дополнение


      Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)
      Хотите чтобы пользователь находил товар, который ему понравится? Вы хотите увеличить конверсии на своем магазине? Обратите внимание на фильтр товаров, который поможет Вам отсортировать по всем опциям и характеристикам: по цене, по производителю, по брендам, а также по словам, введенным в строку поиска.
       
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” отслеживает действия пользователя и сразу же применяет их к сортировке, избавляя от необходимости нажимать кнопку “Поиск”.
       
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” позволяет легко фильтровать Ваши товары по категориям, атрибутам, ценам. Вы можете использовать фильтр без перезагрузки страницы. Это позволяет клиентам легко фильтровать и находить товары, используя несколько параметров выбора одновременно.
       
      Легко создавайте SEO-ссылки для запросов, которые интересуют ваших пользователей, путем написания заголовков, описаний и добавления уникальных текстов на эти образцы страниц, тем самым увеличивая индекс поисковых систем (Google, Yandex, Bing и т.д).
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” имеет широкий выбор графических настроек, что позволяет ему легко вписаться в стиль любого сайта.
       
      Самый простой и в то же время чрезвычайно эффективный поиск в реальном времени! Просто укажите диапазон цен, марку, тип, цвет и т.д., и круг поиска сузится у вас на глазах! В результате фильтр выберет всего несколько вариантов из множества продуктов, которые достойны вашего внимания.
       
      Особенности:
      Фильтр по цене, атрибутам, категории; Фильтр товаров через Ajax; Сохранение URL-адресов SEO; SEO заголовок, описание и заголовок с добавленными фильтрами; Широкий выбор графических настроек; Самая быстрая и удобная фильтрация; Расположение фильтра на странице по вашему выбору; Есть окно поиска. Добавил kirians Добавлено 21.10.2021 Категория Фильтры Системные требования Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 3.0
      2.3.0.2.4
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By kirians
      Хотите чтобы пользователь находил товар, который ему понравится? Вы хотите увеличить конверсии на своем магазине? Обратите внимание на фильтр товаров, который поможет Вам отсортировать по всем опциям и характеристикам: по цене, по производителю, по брендам, а также по словам, введенным в строку поиска.
       
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” отслеживает действия пользователя и сразу же применяет их к сортировке, избавляя от необходимости нажимать кнопку “Поиск”.
       
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” позволяет легко фильтровать Ваши товары по категориям, атрибутам, ценам. Вы можете использовать фильтр без перезагрузки страницы. Это позволяет клиентам легко фильтровать и находить товары, используя несколько параметров выбора одновременно.
       
      Легко создавайте SEO-ссылки для запросов, которые интересуют ваших пользователей, путем написания заголовков, описаний и добавления уникальных текстов на эти образцы страниц, тем самым увеличивая индекс поисковых систем (Google, Yandex, Bing и т.д).
      Расширение “Ajax Filter with Seo Link (Ajax Фильтр с Seo страницами)” имеет широкий выбор графических настроек, что позволяет ему легко вписаться в стиль любого сайта.
       
      Самый простой и в то же время чрезвычайно эффективный поиск в реальном времени! Просто укажите диапазон цен, марку, тип, цвет и т.д., и круг поиска сузится у вас на глазах! В результате фильтр выберет всего несколько вариантов из множества продуктов, которые достойны вашего внимания.
       
      Особенности:
      Фильтр по цене, атрибутам, категории; Фильтр товаров через Ajax; Сохранение URL-адресов SEO; SEO заголовок, описание и заголовок с добавленными фильтрами; Широкий выбор графических настроек; Самая быстрая и удобная фильтрация; Расположение фильтра на странице по вашему выбору; Есть окно поиска.
    • By DevmanExtensions
      3000
      View File


      Import/Export Pro - XLSX -XLS - CSV - XML - JSON - Google Spreadsheets
       

       

       

       

       
      Установка очень простая, всего 1 минуту -> смотреть видео  
       
      Напоминаем Вам о полной совместимости с модулем Комбинации Опций  
       
      Важно! Обращаем Ваше внимание, что после покупки данного модуля он будет работать
      бессрочно и без дополнительной оплаты (за исключением случаев платных доработок,
      согласованных с Клиентом). Однако, расширенная техническая поддержка и возможность
      обновления модуля будут доступны только на протяжении ТРЕХ МЕСЯЦЕВ с момента покупки!
       
      Так же обращаем Ваше внимание, что в стоимость дополнительной услуги по установке
      модуля на сайте, НЕ ВХОДИТ адаптация модуля под не стандартные темы,
      а так же под собственные доработки пользователями кода CMS!
       

       
      Новое видео - ответы и комментарии на частые вопросы
      СМОТРИТЕ ПРЯМО СЕЙЧАС


      Самый полный и безопасный инструмент импорта/экспорта для Opencart
      Идеальный инструмент «все в одном», чтобы позаботиться обо всех ваших потребностях в импорте/экспорте данных для вашего магазина, будь то управление вашими собственными данными или синхронизация из файлов или каналов от ваших постоянных поставщиков. Работает с Opencart и OCStore (1.5.x, 2.x & 3.x), Mijoshop и Joocart.


      Мы слушаем наших клиентов!
      Import / Export PRO - это результат долгой работы с момента запуска в 2014 году, на основании пожеланий наших клиентов. Мы создали самое безопасное, мощное и адаптируемое решение для удовлетворения самых взыскательных потребностей.
      Предлагаем Вам прочесть отзывы наших клиентов об Import / Export Pro.
       

       
      Мы здесь, чтобы помочь!
      Перед покупкой обязательно ознакомьтесь с разделом часто задаваемых вопросов . Если Вы не нашли ответа на свой вопрос, не стесняйтесь писать нам !
      Если у Вас нет времени или возможности для самостоятельной настройки модуля, мы можем сделать эту работу за Вас на высоком профессиональном уровне. Пожалуйста отправьте нам запрос чтобы уточнить стоимость!
       

       
      Все, что нужно для импорта или экспорта!
      Товары, акции, скидки, изображения товаров, атрибуты товаров, категории, группы атрибутов, параметры, значения параметров, производители, группы фильтров, Фильтры, группы клиентов, Клиенты, адреса, заказы, заказы на продукты, итоги заказов, купоны и так далее.
       

       
      Ваши данные всегда в безопасности!
      В случае какого-либо сбоя в процессе импорта, наша система автоматически восстановит данные в исходное положение. Все сообщения в процессе работы, в том числе и ошибочные, отображаются на активной панели.
       

      Связь с поставщиками!
      Модуль совместим с большинством форматов файлов, предоставляемых поставщиками. Механизм включения и отключения колонок, включенный в модуль, позволяет гибко обрабатывать файлы, отправленные вашим поставщиком, и решать любые проблемы. Кроме того, Вы можете экспортировать данные в формате, необходимом для других платформ, если это необходимо. Модуль идеально подходит для YML (Yandex) и многих других форматов от известных или независимых площадок.
       

      Импорт и экспорт без ограничений!
      Мы оптимизировали процесс импорта и экспорта, в результате чего, модуль использует минимально возможное количество ресурсов Вашего сервера, для обработки больших объемов данных. У Вас также есть возможность запускать профили импорта / экспорта по расписанию, используя CRON, в автоматическом режиме, во время наименьшей загрузки на сервер.
       

      Планировщик CRON
      Вам может потребоваться автоматически начать экспорт или импорт профилей в удобное для вас время. Мы разработали плагин, который позволяет запускать профили импорта или экспорта в планировщике CRON. Идеально подходит для синхронизации с поставщиками, управления запасами, ценообразования и многого другого.
       

      Возможности фильтрации!
      Более 500 фильтров на выбор, чтобы применить к вашим профилям, комбинации почти бесконечны!
       

      Импорт и экспорт в любом месте!
      Передача данных на Ваш компьютер или с него, из электронных таблиц Google, с внешнего сервера, через FTP или пользовательские URL-адреса. Вы будете иметь полный контроль и гибкость ввода и вывода данных.
       

      Электронные таблицы Google - XLSX - CSV - ODS - XML!
      Система импорта / экспорта полностью совместима с электронными таблицами Google, что означает, что вы можете отправлять данные из своего магазина в документ, хранящийся в вашей учетной записи Google Диска (для экспорта данных), и собирать данные из электронных таблиц, загружая их в свой магазин (для импорта данных). Другие поддерживаемые форматы: XLSX, CSV, ODS, XML.
       

      Миграция между разными версиями Opencart!
      Миграция всех данных между различными версиями Opencart происходит почти мгновенно. Расширенная система миграции подготовит файл для выбранной целевой версии. Вы также можете выбрать данные, специфичные для миграции (продукты, клиенты, заказы, категории).
       

      Произвольные поля (дополнение)
      У вас есть другие плагины, которые добавляют пользовательские поля для разных моделей (продукты, категории, клиенты, заказы, параметры и т. д.)? Мы разработали систему для добавления пользовательских записей из нативной базы данных в процессы импорта, экспорта и миграции! Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию!
       

      Видеоинструкции!
      Можем Вас заверить, что изучение Import Export PRO будет проще простого! Кроме текстовой документации, мы предлагаем серию простых видеоуроков на разных языках, которые помогут вам начать использовать разработанный инструмент независимо от уровня вашего опыта.
       

      Кое что еще!
      Автоматический генератор SEO URL, выбор идентификаторов товаров для импорта, пропуск существующих товаров в импорте, исключение товаров, которых нет в импорте, полное резервное копирование вашего магазина и многое другое!
       

      Отличная поддержка
      За более чем 10 лет работы с Opencart, тысячи клиентов остались довольны нашими услугами. DevmanExtensions является одной из самых уважаемых компаний на рынке  дополнений для Opencart. Наслаждайтесь лучшей поддержкой, все проблемы будут решены менее чем за 24 часа!
       
      Пример выполнения операции импорта

       
      Пример выполнения операции экспорта

       
      Вы сами выбираете источники для импорта данных!

       
      Вы сами выбираете куда сохранить файл экспорта!

       
      Уникальная миграция данных между версиями Opencart!

       
      Расширенные фильтры!

       
      Сделайте работу с поставщиками удобной!

       
      Планировщик CRON!

       
      Произвольные поля (дополнение приобретается отдельно - $ 29.99)!
      Если вам нужно добавить свою собственную расширенную информацию, например, о продуктах, клиентах, заказах или моделях, то для этого случая мы предоставили дополнительные функции для пользовательских столбцов, которые могут быть добавлены в файл импорта или экспорта. Обращаем Ваше внимание, что обработка новых полей производится только из таблиц базы данных, которые созданы в Opencart по умолчанию!
       

       

      Submitter DevmanExtensions Submitted 07/06/2018 Category Обмен данными Системные требования Метод активации Через официальный сайт дополнения Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1 ocStore 3.0
      2.3.0.2.4
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Get request to server of developer Да  
    • By vvo
      Приветствую
       
      Есть скрипт синхронизации цен и остатков с маркетплейсом по API на CMS Prestashop.
      Надо его перенести на Ocstore2.3.
       
      Документация по API есть.
       
      Выглядит скрипт так:
       
      скрипт запускался по крону, а также был встроен вызов при изменении цены/количества в админке и после оформления заказа.
       
      Кому интересно, пишите в личку цену, сроки.
    • By Demanoco
      Здравствуйте,
      Ранее мне сделали обертку для ocfilter Версии 4.7ххх , чтобы его можно было выводить в любое место(главная, статьи, блог... не важно) все работало вполне адекватно, но появиласть необходимость сделать тоже-самое но на новую версию фильтра...
      фильтр я поставил, вывел обертку на главную, и сразу вылетела 500 ошибка.
      сделал логирование ошибок
       
      [07-Nov-2021 13:18:05 UTC] PHP Fatal error: Uncaught Error: Class 'OCFilter' not found in /home/p/pikenebl/***/public_html/catalog/controller/extension/module/lazyfilter.php:54 Stack trace: #0 [internal function]: ControllerExtensionModuleLazyFilter->index(Array) #1 /home/p/pikenebl/***/storage/modification/system/engine/action.php(79): call_user_func_array(Array, Array) #2 /home/p/pikenebl/***/storage/modification/system/engine/loader.php(48): Action->execute(Object(Registry), Array) #3 /home/p/pikenebl/***/storage/modification/catalog/controller/common/content_top.php(70): Loader->controller('extension/modul...') #4 [internal function]: ControllerCommonContentTop->index(Array) #5 /home/p/pikenebl/***/storage/modification/system/engine/action.php(79): call_user_func_array(Array, Array) #6 /home/p/pikenebl/***/storage/modification/system/engine/loader.php(48): Action->execute(Object(Registry), Array) #7 /home/p/pikenebl/***/public_html/catalog/controller/common/h in /home/p/pikenebl/***/public_html/catalog/controller/extension/module/lazyfilter.php on line 54  
      в файле по на этой строке находиться 
      $this->registry->set('ocfilter', new OCFilter($this->registry)); что является частью цикла
      if (!$cached || (empty($data['lazyfilter_data']))) { $ocf_settings = $this->getSetting('module_ocfilter'); $ocf_settings['mode'] = 'vertical'; $this->load->model('catalog/category'); $categories = []; if (isset($this->request->get['path']) && $data['sub_show']) { $path = explode('_', $this->request->get['path']); $category_id = end($path); $categories = $this->model_catalog_category->getCategories($category_id); } else { $results = $this->config->get('module_lazyfilter_categories'); foreach ($results as $value) { $category_id = (int) $value; $categories[$category_id] = $this->model_catalog_category->getCategory($category_id); } } if (empty($categories)) { return; } foreach ($categories as $category_data) { $category_id = (int) $category_data['category_id']; $this->request->get['path'] = $category_id; $this->registry->set('ocfilter', new OCFilter($this->registry)); $ocfilter_data = $this->load->controller('extension/module/ocfilter', $ocf_settings); unset($this->request->get['path']); $ocfilter_data = str_replace('#ocfilter', '#ocfilter-' . $category_id, $ocfilter_data); $ocfilter_data = str_replace('id="ocfilter', 'id="ocfilter-' . $category_id, $ocfilter_data); $data['lazyfilter_data'][$category_id] = [ 'category_data' => $category_data, 'filter_data' => $ocfilter_data, ]; } if ($cached) { $this->cache->set('module.lazyfilter', $data['lazyfilter_data']); } } $this->load->language('extension/module/lazyfilter'); return $this->load->view('extension/module/lazyfilter', $data);  
      когда я комментирую строку 
      $this->registry->set('ocfilter', new OCFilter($this->registry)); и путь на главной указан "чистый"(просто доменное имя), то во вкладках фильтр показывается, но только 1 категория на всех вкладках
       
      сначала я грешил на то, что нет нужных данных в массиве ($this->registry), но после более внимательного просмотра логов ошибок, я понял что проблема в отсутствии класса OCFilter

      может кто подкинуть идей в какой стороне надо смотреть?
       
      PS разработчик надстройки, молчит как партизан на допросе
       
      Спасибо
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • 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.