使用Fetch API重定向响应获取位置片段

时间:2016-08-08 16:37:01

标签: redirect oauth-2.0 webrtc openid-connect fetch-api

我正在尝试获取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来发出此请求,这将允许访问重定向位置标头?

2 个答案:

答案 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)。