gpt4 book ai didi

javascript - GET 请求 'Accept: */*' header 导致 406。是否可以删除它?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:02 28 4
gpt4 key购买 nike

我正在尝试从 API 获取文件的二进制数据;我必须使用 JavaScript 发出此请求,并且我不能以任何方式修改 API。

我目前正在使用以下方法;

function getUserFile() {
$.ajax({
type: 'GET',
url: userData.file.link,
beforeSend: function(request) {
request.setRequestHeader('Accept', 'application/octet-stream');
request.setRequestHeader('Authorization', 'Bearer ' + authToken);
},
contentType: 'application/json',
success: function(data) {
// Do something with data
},
error: function(errorThrown) {
console.log(errorThrown);
}
});
}

当我从浏览器内部触发这个请求时,它失败并返回 406。这是因为浏览器(我相信?)正在将 */* 值添加到我的 Accept header 。它必须包含application/octet-stream,API 才能接受请求。

是否有可能删除这个额外的 header 值,或者首先禁止将其添加到请求中?

编辑:同时运行 this并且通过 JSFiddle 的真实 API 调用不会将 */* 值附加到 Accept header 。从标准 HTML 文档运行相同的代码确实增加了值(value)。这两个有什么不同可能导致一个值被忽略而另一个被忽略?

编辑:有问题的 aspx 页面正在运行 JQuery 1.5.x 或 1.8.x

最佳答案

虽然这不是为什么会发生/正在发生的答案,但我已经找到了解决该问题的可行方法。

代替 $.ajax() 调用,我可以使用 XMLHttpRequest

var request;
request = new XMLHttpRequest();

request.addEventListener("load", getComplete);

request.open('GET', userData.file.link);
request.setRequestHeader('Content-type', 'application/json');
request.setRequestHeader('Accept', 'application/octet-stream');
request.setRequestHeader('Authorization', 'Bearer ' + authToken);

request.send();

“默认” header 值仅附加到我的 ajax 调用;特别是那些只由某些 .aspx 页面制作的。

如果我记录来自 beforeSend: 的请求,这个默认 header 值已经存在。在项目的某处,一个设置或一段 JS 导致使用 */*Accept header 值初始化 ajax 调用。

没有 $.ajaxSetup({ ... }); 出现在项目中,使用 delete $.ajaxSettings.headers["Accept"]; 使没有不同。我的假设是这些页面使用的 JQuery 文件包含影响 ajaxSettings 的修改。

编辑我设法找到了这部分 asp.NET 项目使用的 JQuery 文件。此 JQuery 文件已被修改为在进行 AJAX 调用时包含某些默认值。这就是使用 XMLHttpRequest 的直接方法成功的原因。

关于javascript - GET 请求 'Accept: */*' header 导致 406。是否可以删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com