2016-08-08 4 views
7

Я пытаюсь получить фрагмент местоположения ответа на перенаправление запроса API выборки. Но я не могу понять, как получить к нему доступ, если это возможно.Получить фрагмент местоположения с ответом перенаправления API Fetch

Контекст заключается в том, что я выполняю запрос OpenID Connect в неявном потоке для генерации утверждения прокси-сервера WebRTC Identity Proxy. РСИН спецификации определяют ответ на просьбу, как:

При использовании неявной потока, все параметры ответа добавляются к компоненту фрагмента перенаправлением URI

HTTP/1.1 302 Найдено Расположение: https://client.example.org/cb# access_token = SlAV32hkKG ...

Так что я делаю запрос с выборкой устанавливается в ручном режиме. Но ответ тогда является непрозрачным-перенаправленным отфильтрованным откликом, который скрывает заголовок местоположения. (https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect)

Другой режим для извлечения - ошибка, и следовать, что не помогло бы. Хотя XHR автоматически следует перенаправлению, так что это тоже не помогло бы. Я, возможно, что-то упустил из API-интерфейса fetch, но, похоже, это нечто скрытое.

Может ли кто-нибудь дать мне способ доступа к этой информации (или подтверждение невозможно)?

Есть ли альтернатива извлечения и XHR для выполнения этого запроса, который позволит получить доступ к заголовку адресата перенаправления?

ответ

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) { 
    // ... 
    }); 
+0

Спасибо за ваш ответ. Мне нужно получить доступ к точному URL-адресу, поскольку он содержит access_token. Таким образом, коммутатор не работает. Но я предполагаю, что это подтверждает, что я могу только разрешить переадресацию и посмотреть, что в итоге. –

-1

Я не думаю, что его разумно читать хэш из перенаправления 302. Я изучаю сегодня, и кажется, что использование скрытого iframe - это решение. Вы должны быть осторожны с iframes, и сначала это не похоже на лучшее решение, но я считаю его лучшим решением для приложений javascript.

Я нашел эти статьи для дальнейшего объяснения

 Смежные вопросы

  • Нет связанных вопросов^_^