chrome插件中的请求可以加referer吗?
现在的referer为空,过不了ng的拦截,有什么办法可以指定吗?
chrome插件中的请求可以加referer吗?
现在的referer为空,过不了ng的拦截,有什么办法可以指定吗?
在Chrome扩展中,直接修改HTTP请求的Referer头部信息通常不是直接支持的,因为Chrome出于安全和隐私的考虑,限制了扩展对浏览器发送的HTTP请求头的直接修改能力。然而,你可以通过几种间接的方式来实现这一需求:
Chrome扩展的webRequest
API(注意:这个API在manifest v3中已被大幅限制,可能需要使用declarativeNetRequest
API作为替代,但后者不支持直接修改请求头)允许你拦截、检查并(在manifest v2中)修改网络请求。然而,对于Referer头部,直接修改可能不被允许。
如果可能的话,修改服务器端的逻辑以接受不同的验证方式,而不是仅仅依赖于Referer头部。例如,你可以使用令牌(Token)、Cookie或其他HTTP头部来验证请求。
在扩展中,你可以将所有请求发送到一个你控制的代理服务器。这个代理服务器可以修改请求,包括添加或修改Referer头部,然后再将请求转发到目标服务器。这种方式相对复杂,需要额外的服务器资源,并且可能引入额外的延迟和性能问题。
如果你的扩展是在与特定网站交互,并且这些交互可以通过XHR(XMLHttpRequest)或Fetch API完成,那么你可以在这些API调用中直接设置Referer头部(尽管这通常用于控制发送到第三方服务的Referer,而不是修改发送给原始请求目标的Referer)。但请注意,这不适用于通过浏览器直接导航的页面请求。
如果你的扩展遵循manifest v3,并且你只是想根据规则阻止或重定向请求,而不是修改请求头,那么declarativeNetRequest
API可能是一个选择。然而,这个API不支持直接修改请求头。
由于Chrome扩展的限制,直接修改Referer头部以通过服务器验证可能不是直接可行的。你需要考虑上述替代方案,或者与服务器端的开发者合作,寻找一个不需要修改Referer头部的验证方法。
如果你确实需要修改Referer头部,并且上述方法都不可行,那么可能需要重新评估你的应用架构或技术选型。