Не может получить тело ответа 401

Мне удалось получить содержимое JSON с помощью jQuery.ajax() . В настоящее время он извлекает содержимое с другого хоста, содержащего единственный файл index.php, возвращающий ответ 401 со следующим телом: {'status':401} .

Это JS:

 $(document).ready(function() { $.ajax({ url: 'http://restapi', type: 'GET', dataType: 'json', success: function() { document.write('works'); }, error: function(xhr) { document.write('failed, status:' + xhr.status); }, beforeSend: setHeader }); }); function setHeader(xhr) { xhr.setRequestHeader('Authorization', 'Bearer 12345'); } 

И PHP:

 <?php header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header('Access-Control-Allow-Credentials: true'); header("Access-Control-Allow-Headers: X-Requested-With, Authorization"); header("HTTP/1.1 401 Unauthorized"); echo json_encode(['status' => 401]); exit; 

Если я удалю заголовок, xhr.setRequestHeader('Authorization', 'Bearer 12345'); , все работает нормально (ответ имеет тело json и xhr.status возвращает 401 ). Но с заголовком Authorization тело ничего не возвращает и xhr.status возвращает 0 .

Мне нужно отправить токен auth в этот заголовок.

Я сделал то же самое, используя Node.js, и заметил, что он отправил два запроса / ответа. Один с заголовком 204 и другой с предполагаемым 401 и корпусом json. Первым методом были ОПЦИИ, а второй метод – GET, поэтому я попробовал это с помощью этого:

 if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { header("HTTP/1.1 204 No Content"); } else { header("HTTP/1.1 401 Unauthorized"); echo json_encode(['status' => 401]); } 

Работает отлично.