Каждого … можно выслушать, но не с каждым стоит разговаривать.
Артур Шопенгауэр
При попытке отправить jQuery JSON запрос с другого домена, появляется ошибка:
Access to XMLHttpRequest at ‘http://*’ from origin ‘http://*’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
jquery.js?ver=*:4 Cross-Origin Read Blocking (CORB) blocked cross-origin response * with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
Это означает, что совместное использование ресурсов между разными источниками(CORS) запрещено.
Для того, чтобы разрешить CORS, необходимо в начале php скрипта, который обрабатывает запрос, добавить генерацию заголовков ответа сервера, указывающих на то, что CORS разрешён.
<?php
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://remote.domain': case 'https://remote.domain':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
break;
}
?>
- http://remote.domain – url сайта, с которого может происходить запрос.
На стороне клиента, нужно указать crossDomain: true
<script>
jQuery.ajax({
crossDomain: true,
dataType: "json",
method: "POST",
url: "http://main.domain/script.php",
data: { key: "some text" }
}).done(function( msg ) {
// answer
});
</script>
Итак, чтобы передать запрос с одного сайта, на другой, нужно на принимающем сайте, указать серверные заголовки, разрешающие запросы с определенного удалённого домена. А на удаленном сайте, прописать ключ, указывающий на то, что этот запрос будет работать между разными доменами.