无法获得401响应机构

时间:2015-07-31 15:16:58

标签: javascript php jquery ajax http-headers

我设法使用{'status':401}获取JSON内容。目前,它从另一个包含单个index.php文件的主机中获取内容,该文件返回401响应,其中包含以下正文:$(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'); }

这是JS:

<?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;

PHP:

xhr.setRequestHeader('Authorization', 'Bearer 12345');

如果我删除标题xhr.status,一切正常(响应有一个json正文,401返回xhr.status)。但是使用Authorization标头时,正文将不返回任何内容,0将返回File.Delete()

我需要在该标题中发送身份验证令牌。

1 个答案:

答案 0 :(得分:1)

我使用Node.js做了同样的事情并注意到它发送了两个请求/响应。一个带有204头,另一个带有预期的401和json主体。第一种方法是OPTIONS,第二种方法是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]);
}

工作正常。