我设法使用{'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()
。
我需要在该标题中发送身份验证令牌。
答案 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]);
}
工作正常。