CORS mit POSTMAN

90

Dieses Thema wurde ein paar Mal gefragt, aber ich verstehe immer noch nichts:

Wenn ich Antworten über lese

Kein 'Access-Control-Allow-Origin'-Header

Problem, es heißt, dass eine Einstellung auf dem angeforderten Server festgelegt werden sollte, um domänenübergreifend zu ermöglichen : add_header 'Access-Control-Allow-Origin' '*';.

Aber bitte sagen Sie mir, warum es auf Nachfrage des Postboten (der ein Kunde ist) wie ein Zauber funktioniert und ich eine Antwort vom angeforderten Server habe.

Vielen Dank

IsraGab
quelle
24
Postman kümmert sich nicht um SOP, es ist ein Entwickler-Tool, kein Browser.
Musa
2
@Musa Ok, wenn es sich also um ein Browser- (Client-) Problem handelt, warum sollte ich dann etwas auf dem Server ändern müssen?
IsraGab
7
Es ist der Server, der dem Browser mitteilt, dass es in Ordnung ist ( CORS ) oder nicht, wenn eine bestimmte Site auf ihren Inhalt zugreift, und der Browser erkennt ihn an
Musa
Ich habe genau die gleiche Frage. Wie kann man das programmatisch machen, in diesem Fall auf Elektronen.
mluis
8
Die eigentliche Frage hier ist, wie POSTMAN so konfiguriert werden kann, dass es das Browserverhalten nachahmt, bei dem zuerst eine ORIGIN-Anforderung gesendet wird. Im Wesentlichen, wie Sie POSTMAN wie einen Browser verhalten lassen, da wir testen müssen, um sicherzustellen, dass unsere APIs korrekt konfiguriert sind. Was ist, wenn die API von POSTMAN aus funktioniert und aufgrund von CORS im Browser nicht mehr funktioniert? Dies bedeutet, dass die API unbrauchbar ist.
Chris Love

Antworten:

50

Wie @Musa es kommentiert, scheint der Grund der folgende zu sein:

Postman kümmert sich nicht um SOP, es ist ein Entwickler-Tool, kein Browser

Übrigens, hier ist eine Chrome-Erweiterung , damit sie in Ihrem Browser funktioniert (diese ist für Chrome, aber Sie können sie entweder für FF oder Safari finden).

Überprüfen Sie hier, ob Sie mehr über Cross-Origin erfahren möchten und warum es für Erweiterungen funktioniert.

IsraGab
quelle
5
Wie schütze ich dann den Zugriff auf meine API-Routen vor Tools wie Postman? Zum Beispiel eine API, die eine Captcha-Überprüfung erfordert. Wenn Sie jedoch direkt vom Postboten aus
zugreifen
5
Die Verbindung zur Erweiterung ist unterbrochen.
Jayarjo
Die gleiche Frage, abgesehen davon, wie kann eine Erweiterung dazu führen, dass die Single-Origin-Richtlinie gebrochen wird?
Iván Cortés Romero
Link zur Chrome-Erweiterung ist defekt
OhadR
45

Wenn Sie eine Website verwenden und ein Formular zum Übermitteln von Informationen ausfüllen (z. B. Ihre Sozialversicherungsnummer), möchten Sie sicher sein, dass die Informationen an die Website gesendet werden, an die sie Ihrer Meinung nach gesendet werden. Daher wurden Browser so eingerichtet, dass sie standardmäßig sagen: "Senden Sie keine Informationen an eine andere Domain als die besuchte Domain."

Irgendwann wurde das zu einschränkend, aber die Standardidee bleibt in den Browsern. Lassen Sie die Webseite keine Informationen an eine andere Domain senden. Dies ist jedoch alles Browser-Überprüfung. Chrome, Firefox usw. haben einen Code integriert, der besagt: "Bevor Sie diese Anfrage senden, überprüfen Sie, ob das Ziel mit der besuchten Seite übereinstimmt."

Bei Postman (oder CURL in der cmd-Zeile) sind diese Schecks nicht integriert. Sie interagieren manuell mit einer Site, sodass Sie die volle Kontrolle darüber haben, was Sie senden.

user3724317
quelle
2
Genauer gesagt, Postbote sendet keine XmlHttp-Anfrage, die überprüft werden würde, sondern einen Netzwerkanruf der obersten Ebene (wie das Öffnen der URL auf einem neuen Browser-Tab), damit sie auch in der
Verlängerung
Der Browser überprüft nicht, ob Ihre Site keine Daten an eine andere Domain sendet: Wenn die andere Domain-Site alle Ursprünge zulässt, ist Ihr Browser damit zu 100% einverstanden. Es ist das Gegenteil, es schützt die andere Domain, falls Ihre Site ihre Ressourcen ohne Autorisierung nutzen würde.
XouDo
36

CORS(Cross-Origin Resource Sharing) und SOP(Same-Origin Policy) sind serverseitige Konfigurationen, die Clients durchsetzen möchten oder nicht .

Bezogen auf Kunden

  • Die meisten Browser erzwingen dies, um Probleme im Zusammenhang mit CSRFAngriffen zu vermeiden .
  • Die meisten Entwicklungstools kümmern sich nicht darum .
Felipe Roos
quelle
11

Alle Antworten hier sind zwar eine wirklich gute Erklärung dafür, was cors ist, aber die direkte Antwort auf Ihre Frage wäre aufgrund der folgenden Unterschiede zwischen Postbote und Browser.

Browser: Sendet einen OPTIONSAnruf, um den Servertyp zu überprüfen und die Header abzurufen, bevor eine neue Anforderung an den API-Endpunkt gesendet wird. Wo es prüft Access-Control-Allow-Origin. Wenn Sie dies berücksichtigen, Access-Control-Allow-Origingibt der Header nur an, welche CROSS ORIGINS zulässig sind, obwohl der Browser standardmäßig nur denselben Ursprung zulässt.

Postman: Sendet direkte GET, POST, PUT, DELETEusw. Anfrage , ohne zu überprüfen , welche Art von Server ist und immer den Header Access-Control-Allow-Originmit Hilfe OPTIONSAufruf an den Server.

Rishabh Batra
quelle
"Sendet einen OPTIONS-Aufruf, um den Servertyp zu überprüfen und die Header abzurufen, bevor eine neue Anforderung an den API-Endpunkt gesendet wird" - Das stimmt nicht. Dies gilt nur für nicht einfache Anfragen.
Quentin
1

Im Allgemeinen wird Postman zum Debuggen und in der Entwicklungsphase verwendet. Aber falls Sie es sogar vom Postboten blockieren möchten, versuchen Sie dies.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });
Bharath Pabba
quelle
Fügen Sie den Code in Ihrer Datei mit dem Router hinzu. Wenn Sie eine Datei mit "Routern" haben, fügen Sie den Code oben in die Datei ein. Dieselbe Datei, in der Sie sich befinden: const express = require ('express') const app = express (); const cors = require ('cors');
Samceena
Bearbeiten Sie es, app.jswenn Sie node app.jsden Server ausführen.
Bharath Pabba
Kann das Ihren Server vor ddos ​​schützen?
SuperUberDuper
-1

Verwenden Sie das Browser / Chrome Postman Plugin, um die CORS / SOP wie eine Website zu überprüfen. Verwenden Sie stattdessen eine Desktop-Anwendung, um diese Steuerelemente zu vermeiden.

Guillermo Ellison
quelle