微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 jQuery ajax 的 User-agent 中添加附加信息?

如何解决如何在 jQuery ajax 的 User-agent 中添加附加信息?

我读过关于这个 herehere,但我仍然不知道如何在 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 步说,如果标头在“禁止标头”列表中,它应该返回:

  1. 如果 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 举报,一经查实,本站将立刻删除。