2016-01-07 9 views
36

Sto scrivendo una libreria di API HTTP da utilizzare in Atom Electron. È basato su fetch. Il server è fuori dal mio controllo, ma è scritto in PHP e posso vederlo controllare le intestazioni in modo sensibile al maiuscolo/minuscolo.fetch() invia chiavi di intestazione in lettere minuscole

Il mio codice è qualcosa di simile:

const headers = new Headers(); 
headers.append('Authorization', `Bearer ${key}`); 

const init = { 
    method: 'GET', 
    headers: headers 
} 

const req = new Request(baseUrl + '/items?format=json'); 
return fetch(req, init); 

La richiesta viene rifiutata con un errore 403 FORBIDDEN. Quando guardo la richiesta nel pannello di Electron Newtork, le intestazioni delle richieste sono presenti ma Authorization è diventato authorization.

Lo so fetch() sta seguendo lo standard HTTP, ma esiste un modo semplice per ottenere fetch() per inviare le intestazioni mentre le fornisco?

+4

@JaromandaX [La specifica] (https://fetch.spec.whatwg.org/#terminology-headers) dice che tutti i nomi di intestazione sono _byte-lowercased_. – sdgluck

+0

Inizialmente ho dichiarato che il recupero NON lo fa - Posso vedere ora che è ... la cosa strana è che il modo in cui ho provato era con PHP su nginx server ... e, nel mio caso, PHP vede "Autorizzazione" correttamente - e infatti se passo in "AuThOrIzAtIOn" ... php lo vede come "Autorizzazione" ... deve essere il server HTTP –

+0

@sdgluck - Ho rimosso quel commento - vedi il mio commento sopra! –

risposta

-1

Utilizzando prendere me stesso e fare una cosa simile che facciamo come segue ...

const GLOBALS = require('./Globals'); 
const HEADERS = { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
}; 
const resourceURL = '/some/endpoint' 
const body = ''; 

var request = new Request(`${GLOBALS.API_ENDPOINT}${resourceURL}`, { 
         method: 'GET', 
         headers: new Headers(Object.assign(HEADERS, {'Authorization': `JWT ${token}`})), 
         body: body ? JSON.stringify(body) : null 
        }); 

return fetch(request) 
    .then(res => consume) 

Take è come pseudo codice pseudo quanto vi sono alcuni parametri funzionali Passiamo che vengono valutati nel modello letterale.

+0

Aiuta a sbarazzarsi di un problema descritto in Q sopra? –

+1

Grazie per la risposta, nei miei test 'fetch' converte ancora le intestazioni in minuscolo. –

+0

strano perché non fa per noi nel codice che stiamo utilizzando ... –

4

Al momento il prelievo sarà toLowercase() tutte le intestazioni. (c'è qualche discussione qui su https://github.com/whatwg/fetch/issues/304 sulla disabilitazione opzionale).

Per ora potrebbe essere necessario utilizzare http://api.jquery.com/jquery.ajax/ con l'opzione header.

+0

Grazie per il commento, il problema di github è stato evidenziato in uno dei commenti sopra, quindi ho controllato di tanto in tanto. Penso che nel mio caso almeno aggiungere jQuery come dipendenza per questo compito non abbia davvero senso. Ho creato XMLHttpRequest direttamente come soluzione alternativa. –

Problemi correlati