我在 WebExtension 中使用webRequest-API来监视客户端发出的请求。这工作得很好,但是在重定向的情况下,API 的行为并不像预期的那样:
在这种情况下POST,发出 a 并以 a302 FOUND和一个新位置作为回答。GET我的浏览器(Firefox 57、其他版本和其他浏览器 - 例如 Chrome - 以相同的方式运行)遵循此重定向,现在向新位置发出 a 。
不幸的是,webRequest-API 的行为不同:它跟踪第一个POST请求(这是正确的),但也将第二个请求作为 a 处理POST,而它应该是 a GET。这是一个严重的问题,因为 API 跟踪了我的浏览器应该做的事情,而实际上它以另一种方式做了......
这个场景(浏览器部分)可以通过这个链接复制到 surfnet.nl并从列表中选择一个 IDP(例如 Academisch Medisch Centrum)。
所以,长话短说:为什么 webRequest-API 的行为与浏览器的行为方式不同?有没有办法让它准确地跟踪浏览器的操作?
有趣的是,关于文档,webRequest-API 可能会正确执行:
即使规范要求方法和主体在执行重定向时不被更改,也不是所有的用户代理都符合这里[浏览器显然改变了方法!],您仍然可以在那里找到有缺陷的软件。因此,建议仅将 302 代码设置为 GET 或 HEAD 方法的响应,并改用 307 临时重定向,因为在这种情况下明确禁止更改方法。如果您希望将使用的方法更改为 GET,请改用 303 See Other。
编辑:
似乎浏览器302由于历史原因改变了方法,即使它与RFC 2616相矛盾......
- https://stackoverflow.com/a/8139246/594832
- https://trac.ietf.org/trac/httpbis/ticket/160
- https://stackoverflow.com/a/8138447/594832
无论如何......问题仍然存在:我怎样才能诱导 webRequest-API 以同样的方式行事?
