我正在尝试获取fetch API请求的重定向响应位置片段。但是,如果可能的话,我无法确定如何访问它。
上下文是我在隐式流程中执行OpenID Connect请求,用于WebRTC Identity Proxy断言生成。 OIDC规范将请求的答案定义为:
使用隐式流时,所有响应参数都会添加到 重定向URI的片段组件
找到HTTP / 1.1 302 地点:https://client.example.org/cb# =的access_token SlAV32hkKG ...
所以我在手动模式下设置了获取请求。但响应是一个不透明的重定向过滤响应,它隐藏了位置标题。 (https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect)
其他获取模式是错误,其后无效。虽然XHR会自动跟随重定向,但也无济于事。我可能会从fetch API中遗漏一些东西,但它似乎是故意隐藏的东西。
有人可以给我一种方法来访问这些信息(或确认它是不可能的)吗?
是否有替代fetch和XHR来发出此请求,这将允许访问重定向位置标头?
答案 0 :(得分:1)
由于XHR自动/不透明地遵循重定向(例如,如果您使用whatwg-fetch
polyfill),一种可能的解决方案是检查response.url
分辨率的fetch
,查看它是否与您期望的重定向位置匹配。
这只有在可能的重定向位置有限或匹配某些模式时才有用 - 例如,如果您可以随时重定向到/login
:
function fetchMiddleware(response) {
const a = document.createElement('a');
a.href = response.url;
if (a.pathname === '/login') {
// ...
} else {
return response;
}
}
fetch(`/api`)
.then(fetchMiddleware)
.then(function (response) {
// ...
});
答案 1 :(得分:1)
fetch无法完全填充整个标准。一些明显的区别包括:
无法设置重定向模式。
请参阅David Graham对Disable follow redirect的评论:
这是Fetch API的一个不错的补充,但我们无法使用XMLHttpRequest对其进行填充。浏览器在返回结果之前先浏览所有重定向,因此没有机会中断重定向流程。
我的解决方案:
1)。第一个解决方案:我们从服务器发送200状态和重定向url(在http标头中),客户端基于此进行重定向。
2)。第二种解决方案:服务器还可以重定向到301并重定向URL。我认为,这是最好的解决方案(即,如果我们考虑使用SEO)。