Cross-Origin Read Blocking (CORB) – решено

Каждого … можно выслушать, но не с каждым стоит разговаривать.
Артур Шопенгауэр

При попытке отправить 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>

Итак, чтобы передать запрос с одного сайта, на другой, нужно на принимающем сайте, указать серверные заголовки, разрешающие запросы с определенного удалённого домена. А на удаленном сайте, прописать ключ, указывающий на то, что этот запрос будет работать между разными доменами.

Leave a Reply

Your email address will not be published. Required fields are marked *