Impossible d’obtenir le corps de réponse 401

J’ai réussi à obtenir du contenu JSON en utilisant jQuery.ajax() . Actuellement, il récupère le contenu d’un autre hôte contenant un seul fichier index.php et renvoyant une réponse 401 avec le corps suivant: {'status':401} .

C’est le 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'); } 

Et le PHP:

  401]); exit; 

Si je supprime l’en-tête, xhr.setRequestHeader('Authorization', 'Bearer 12345'); , tout fonctionne bien (la réponse a un corps json et xhr.status renvoie 401 ). Mais avec l’en-tête Authorization, le corps ne renvoie rien et xhr.status renvoie 0 .

Je dois envoyer le jeton d’authentification dans cet en-tête.

J’ai fait la même chose avec Node.js et j’ai remarqué qu’il envoyait deux requêtes / réponses. Un avec un en-tête 204 et un autre avec le 401 prévu et le corps json. La première méthode était OPTIONS et la deuxième méthode était GET, alors je l’ai essayé avec ceci:

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

Fonctionne bien.