2016-01-07 14 views
36

Ich schreibe eine HTTP-API-Bibliothek für den Einsatz in Atom Electron. Es basiert auf fetch. Der Server liegt außerhalb meiner Kontrolle, aber er ist in PHP geschrieben und ich kann sehen, dass er Header unter Groß- und Kleinschreibung prüft.fetch() sendet Kleinbuchstaben Header-Schlüssel

Mein Code ist so etwas wie:

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); 

Die Anforderung mit einem 403 FORBIDDEN Fehler zurückgewiesen. Wenn ich die Anfrage im Electron Newtork Panel ansehe, sind die Request Header vorhanden, aber Authorization ist authorization geworden.

Ich weiß, fetch() folgt nur dem HTTP-Standard, aber gibt es eine einfache Möglichkeit, fetch() zu bekommen, um die Header zu senden, wie ich sie liefern?

+4

@JaromandaX [Die Spezifikation] (https://fetch.spec.whatwg.org/#terminology-headers) sagt, dass alle Header-Namen _byte-lowcased_ sind. – sdgluck

+0

Ich habe ursprünglich gesagt, dass fetch das NICHT tut - ich kann jetzt sehen, dass es ... das seltsame ist, die Art, wie ich getestet habe, war mit PHP auf nginx Server ... und in meinem Fall sieht PHP "Authorization" richtig - und zwar wenn ich "AuThOrIzAtIOn" übergebe ... php sieht es als "Authorization" ... muss der HTTP-Server sein –

+0

@sdgluck - Ich habe diesen Kommentar entfernt - siehe oben meinen Kommentar! –

Antwort

-1

Mit mir holen und dabei eine ähnliche Sache, die wir tun, wie folgt ...

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) 

Nehmen ist als Pseudo-Code Pseudo, da es einige Funktionsparameter sind in wir übergeben, die wörtliche in der Vorlage ausgewertet werden.

+0

Hilft es dabei, ein in Q oben beschriebenes Problem zu beseitigen? –

+1

Danke für die Antwort, 'fetch' konvertiert in meinen Tests die Header immer noch in Kleinbuchstaben. –

+0

seltsam cuz es nicht für uns in dem Code, den wir verwenden ... –

4

Derzeit holen toLowercase() alle Header. (Es gibt einige Diskussionen hier https://github.com/whatwg/fetch/issues/304 über optionale Deaktivierung).

Jetzt müssen Sie möglicherweise http://api.jquery.com/jquery.ajax/ mit der Option header verwenden.

+0

Danke für den Kommentar, dass GitHub-Problem in einem der obigen Kommentare hervorgehoben wurde, also habe ich von Zeit zu Zeit nachgesehen. Ich denke, dass in meinem Fall zumindest das Hinzufügen von jQuery als Abhängigkeit für diese Aufgabe nicht wirklich sinnvoll ist. Ich habe eine XMLHttpRequest direkt als Workaround erstellt. –