Jestem w rozszerzeniu Google Chrome z uprawnieniami dla "*://*/*"
i próbuję zmienić wartość z XMLHttpRequest na Fetch API.Czytanie nagłówków odpowiedzi za pomocą interfejsu Fetch API
Rozszerzenie przechowuje dane logowania wprowadzane przez użytkownika, które wcześniej były umieszczane bezpośrednio w wywołaniu open() XHR dla uwierzytelniania HTTP, ale w obszarze pobierania nie można już używać bezpośrednio jako parametru. Dla HTTP podstawowe Auth, obejście tego ograniczenia jest trywialne, jak można ręcznie ustawić nagłówek Authorization:
fetch(url, {
headers: new Headers({ 'Authorization': 'Basic ' + btoa(login + ':' + pass) })
} });
HTTP Digest Auth wymaga jednak większej interaktywności; musisz odczytać parametry wysyłane przez serwer z odpowiedzią 401, aby utworzyć ważny token autoryzacji. Próbowałem czytać pole nagłówka WWW-Authenticate
odpowiedzi z tego fragmentu:
fetch(url).then(function(resp) {
resp.headers.forEach(function(val, key) { console.log(key + ' -> ' + val); });
}
Ale mogę to wyjście:
content-type -> text/html; charset=iso-8859-1
które samo w sobie jest poprawny, ale wciąż brakuje około 6 więcej pól według narzędzi programistycznych Chrome. Jeśli użyję resp.headers.get("WWW-Authenticate")
(lub któregokolwiek z innych pól w tym zakresie), otrzymam tylko null
.
Czy istnieje szansa na uzyskanie dostępu do innych pól przy użyciu interfejsu API pobierania?
@jules To ograniczenie dla CORS respektuje wartości w 'access-control-expose-headers' lub ewentualnie' access-control-allow-headers' (umieszczamy je w obu). – jacob
'access-control-expose-headers' pracował dla mnie dla nagłówków zwróconych z serwera - wtedy nagłówki są dostępne poprzez obiekt nagłówków odpowiedzi pobierania. I 'access-control-allow-headers' został użyty, aby umożliwić nagłówkom Żądania na serwerze (lub otrzymałem komunikat o błędzie z serwera) – specimen
To głupie, że nie jest to możliwe z Fetch, ale można to zrobić za pomocą XmlHttpRequest. Jaka jest przewaga związana z bezpieczeństwem, jeśli nadal jest możliwa dzięki obejściu? – sebas