如何解决如何在 jQuery ajax 的 User-agent 中添加附加信息?
我读过关于这个 here 和 here,但我仍然不知道如何在 jQuery ajax
中做到这一点。我尝试了我链接的问题的答案之一中的代码,但它丢弃了用户代理覆盖:
$.ajax({
url: "http://blablabla.com/",dataType:'html',beforeSend: function (req) {
req.setRequestHeader('User-Agent','https://graphicdesign.stackexchange.com/users/69916/vikas');
},error: function() { alert("No data found");},success: parseResult
});
我当前正在发送的用户代理字符串是这样的:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/92.0.4515.40 Safari/537.36 Edg/92.0.902.9
而且我也想添加我的其他 SE 个人资料网址,其中 https://graphicdesign.stackexchange.com/users/69916/vikas
我想这样做是因为有人建议here,以防您参与聊天机器人。
关于如何在现有用户代理中放置附加信息(即我的个人资料 URL)并使用 ajax 将其发送到任何 api 的简单示例会有所帮助。
解决方法
jQuery 使用 XMLHttpRequest
发送请求,因此受到相同的限制和问题。特别是,当您调用 setRequestHeader
或提供 headers
配置选项时,会使用相应的 XMLHttpRequest 方法来设置标头。
这是 jQuery 在配置对象的情况下所做的under the hood:
// Set headers
for ( i in headers ) {
xhr.setRequestHeader( i,headers[ i ] );
}
您可能知道,setRequestHeader
方法的 the spec 中的算法的第 5 步说,如果标头在“禁止标头”列表中,它应该返回:
- 如果 name 是禁止的标题名称,则返回。
这很重要,因为 User-Agent
标头曾经在该列表中(使其被禁止的 draft 是 2008 年 9 月的标头)。这不再是这种情况(请参阅 Fetch 存储库上的 issue #37),但是,基于 Chromium 的浏览器(意味着您至少对 Chrome 和 Edge 不走运)要么默默地丢弃它(以防万一获取 API 或抛出错误:
拒绝设置不安全的标题“User-Agent”
请参阅 MDN 参考中的以下注释:
不再禁止 User-Agent 标头,根据规范 — 请参阅禁止标头名称列表(已在 Firefox 43 中实现)— 现在可以在 Fetch Headers 对象中或通过 XHR setRequestHeader() 设置它。但是,Chrome 会默默地从 Fetch 请求中删除标头(请参阅 Chromium 错误 571722)。
MDN 指的是被认为正在处理的错误 571722,因此在不久的将来事情可能会发生变化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。