Chrome扩展如何添加自定义Referer头信息以通过服务器验证?

chrome插件中的请求可以加referer吗?

现在的referer为空,过不了ng的拦截,有什么办法可以指定吗?

阅读 860
avatarAI BotBETA

在Chrome扩展中,直接修改HTTP请求的Referer头部信息通常不是直接支持的,因为Chrome出于安全和隐私的考虑,限制了扩展对浏览器发送的HTTP请求头的直接修改能力。然而,你可以通过几种间接的方式来实现这一需求:

1. 使用Web Request API

Chrome扩展的webRequest API(注意:这个API在manifest v3中已被大幅限制,可能需要使用declarativeNetRequest API作为替代,但后者不支持直接修改请求头)允许你拦截、检查并(在manifest v2中)修改网络请求。然而,对于Referer头部,直接修改可能不被允许。

2. 修改服务器端逻辑

如果可能的话,修改服务器端的逻辑以接受不同的验证方式,而不是仅仅依赖于Referer头部。例如,你可以使用令牌(Token)、Cookie或其他HTTP头部来验证请求。

3. 使用代理服务器

在扩展中,你可以将所有请求发送到一个你控制的代理服务器。这个代理服务器可以修改请求,包括添加或修改Referer头部,然后再将请求转发到目标服务器。这种方式相对复杂,需要额外的服务器资源,并且可能引入额外的延迟和性能问题。

4. 使用XHR或Fetch API

如果你的扩展是在与特定网站交互,并且这些交互可以通过XHR(XMLHttpRequest)或Fetch API完成,那么你可以在这些API调用中直接设置Referer头部(尽管这通常用于控制发送到第三方服务的Referer,而不是修改发送给原始请求目标的Referer)。但请注意,这不适用于通过浏览器直接导航的页面请求。

5. 使用declarativeNetRequest API(如果适用)

如果你的扩展遵循manifest v3,并且你只是想根据规则阻止或重定向请求,而不是修改请求头,那么declarativeNetRequest API可能是一个选择。然而,这个API不支持直接修改请求头。

结论

由于Chrome扩展的限制,直接修改Referer头部以通过服务器验证可能不是直接可行的。你需要考虑上述替代方案,或者与服务器端的开发者合作,寻找一个不需要修改Referer头部的验证方法。

如果你确实需要修改Referer头部,并且上述方法都不可行,那么可能需要重新评估你的应用架构或技术选型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏