2010-09-23 7 views
20

Ich habe einen Webservice, der bereit ist, gzip/deflated Daten auszugeben. Ich habe überprüft, dass der Dienst mit rohem JSON oder mit gzip'd JSON mit wget und curl antwortet.Ist es möglich, jQuery zu zwingen, AJAX-Aufrufe für URLs mit aktiviertem gzip/deflate vorzunehmen?

Ich möchte diesen Web-Service mit dem jQuery AJAX-Aufruf verbrauchen.

Standardmäßig enthält der von jQuery bereitgestellte $ .ajax-Aufruf nicht den HTTP-Anforderungsheader "Accept-Encoding: gzip", der für den Webserver erforderlich ist, um mit gezippten Daten zu antworten.

Allerdings, wenn ich jQuery eigene Methoden verwenden, um die Header hinzufügen, zum Beispiel:

$.ajax({url: 'http://foo.com/service.json', 
     beforeSend: function(xhr) { 
      console.log('xhr set'); 
      xhr.setRequestHeader('Accept-Encoding', 'deflate') 
     } 
}); 

dann erscheint der folgende Fehler in der Browser-Konsole:

Refused to set unsafe header "Accept-Encoding" 

Ist es möglich, jQuery zu zwingen, Machen Sie AJAX Aufrufe für URLs mit gzip/deflate aktiviert?

Wenn nicht, ist das ein Mangel in jQuery oder etwas grundlegender mit AJAX?

+1

Ich denke der Browser entscheidet, ob er gzip/deflate akzeptiert oder nicht. "Faking" könnte zu Datenkorruption führen. – jwueller

Antwort

38

Browser fügen automatisch den accept-encoding Header hinzu, einschließlich auf XHR-Anfragen. Sie müssen das nicht auf der DOM/JS-Ebene tun.

+0

danke, du hast recht! Ich hätte meine Server-Logs genauer prüfen sollen. – Lee

+0

Gilt das auch für HTML5-Hybrid-Anwendungen? Laufen auf mobilen Geräten, in einem Webcview-Container ....? – demaniak

+0

@demaniak: Es sollte ja sein. Siehst du in einem bestimmten Webview ein anderes Verhalten? –

Verwandte Themen