2016-04-16 4 views
0

Meine Cordova App verwendet backbone.js, um mit meinen Servern zu kommunizieren. Da die App natürlich nicht unter derselben Domain wie meine API läuft, wird jede nicht-triviale Ajax-Anfrage mit einem OPTIONS Pre-Flight gesendet. Ich verstehe, warum es das tut. Ich habe jedoch die volle Kontrolle über meinen eigenen Server! Ich weiß genau, welche HTTP-Methoden und Header unterstützt werden. Daher ist die OPTIONS-Anfrage keine Zeitverschwendung? Wie kann ich es deaktivieren?Wie kann ich verhindern, dass Backbone.js die OPTIONS-Anfrage sendet?

Antwort

2

Sie sagen, Sie wissen, warum es die Anfragen macht, aber um einen Kontext für diejenigen, die nicht MDN describes the conditions that you'll get a preflighted request.

Nein, Sie können es nicht deaktivieren.

Als Autor des clientseitigen Codes wissen Sie, welche Anforderungen Sie stellen möchten.

Als Autor des serverseitigen Codes wissen Sie, welche Anforderungen Sie akzeptieren möchten.

Als das Unternehmen, das den Browser des Benutzers geschrieben hat, weiß Google (oder Mozilla, Opera usw.) nicht, dass Sie der Autor beider Websites sind und dass Sie sich selbst vertrauen. Sie wissen nicht, dass die Anforderung von Site A den Browser dazu auffordert, auf Site B zu gehen, harmlos ist.

Vor CORS musste sich ein Autor nur Gedanken über die Verteidigung gegen CSRF-Angriffe machen, die durch Links und Formulare ausgelöst werden konnten.

Dann kommt XHR und plötzlich JavaScript auf http://evil.example.com aktiviert eine DELETE Anfrage http://victim.example.com komplett mit withCredentials auslösen können. Es wäre ziemlich schlecht, wenn der Server das verarbeitet hätte, auf den Browser geantwortet hätte, dann teilte der Browser der JS-Engine mit, dass es keine Access-Control-Header gab. Der Inhalt wäre bereits gelöscht.

Sie brauchen also ein Preflight, um die Erlaubnis zu erhalten.

So ist es keine Zeitverschwendung. Sie können es nicht deaktivieren. Sie müssen nur mit Erlaubnis antworten.