Ich versuche zu verstehen CORS. Aus meiner Sicht ermöglicht es Ihnen, zu beschränken, welche Domänen auf eine Ressource auf Ihrem Server zugreifen können. Dies scheint jedoch nicht die ganze Geschichte zu sein. Zum Beispiel habe ich einen Webservice ohne CORS aktiviert. Ich kann diesen Web-Service nicht über meine Web-Anwendung über jQuery aufrufen (die App läuft auf localhost). Allerdings kann ich den Webservice von Postman aus starten. Also bin ich ein bisschen verwirrt. Gibt es einige zusätzliche Client-Seite Arbeit, die CORS beteiligt?CORS - Ist es eine clientseitige Sache, eine serverseitige Sache oder eine Transportlevel-Sache?
Antwort
Es ist ein bisschen von beiden tatsächlich. Ihr Browser verhindert CORS-Anfragen, es sei denn, der Ursprung der Anfrage (d. H. Die Referrer-URL-Domain) befindet sich in einer weißen Liste am Zielort oder das Ziel genehmigt alle Anfragen unabhängig von ihrer Herkunft.
In beiden Fällen wird der erforderliche Header (Access-Control-Allow-Origin) hinzugefügt, der dem Browser mitteilt, dass es in Ordnung ist, die Anfrage an das Ziel zu senden.
Dies stellt sicher, dass Personen mit böswilliger Absicht keine Anforderungen an eine andere Domäne senden können, ohne dass der Benutzer davon weiß.
Der Server ist verantwortlich für die Meldung der zulässigen Ursprünge. Der Webbrowser ist dafür verantwortlich, dass Anforderungen nur von zulässigen Domänen gesendet werden.
Wenn CORS nicht aktiviert ist, verlässt sich ein Browser auf die same origin policy. Der Browser erlaubt nur Anfragen an denselben Host wie der Ursprung. Die gleiche Ursprungspolitik wird angenommen, wenn keine Ursprünge ausdrücklich erlaubt sind.
Ein anderer HTTP-Client als ein Browser verwendet nicht die gleiche Ursprungsrichtlinie oder CORS. Anforderungen, die von diesen anderen HTTP-Clients gestellt werden, haben keinen Ursprung. Sofern die Postman Desktop-Anwendung keinen Browser emuliert, kann sie Anfragen an beliebige URLs stellen.
CORS und die gleiche Ursprungsrichtlinie sind erforderlich, da ein Browser den besuchten Websites nicht implizit vertraut. Sie schützen die Ursprungssite nicht, sie schützen die Site, die die Cross-Ursprungsanforderung erhält.
Ohne diese Richtlinien könnte ein einfaches Skript, das wiederholt eine Website lädt, über Werbenetzwerke oder Skript-Injection verteilt werden und jeder Browser, der das Skript lädt, würde zu einem Denial-of-Service-Angriff auf der Website beitragen. Mit CORS und der gleichen Ursprungsrichtlinie wird ein Browser die Auswirkungen dieses Skripts begrenzen.
CORS mit gutem Beispiel:
Ein Web-Browser eine Seite von www.example.com
lädt. Die Seite enthält ein Skript, das eine Anfrage an www.example.org
sendet. Der Ursprung der Anfrage ist www.example.com
. Der Browser gibt entweder die Anforderung aus oder sendet zuerst eine Anforderung (Preflight-Anforderung). Wenn der Server unter www.example.org
eine Anforderung von einem anderen Ursprung als www.example.org
empfängt, antwortet er mit einem Antwortheader Access-Control-Allow-Origin
, der dem Browser die Herkunft mitteilt, die zulässig ist, um Anforderungen zu stellen. Es kann auch mit anderen Headern wie Access-Control-Allow-Methods
und Access-Control-Allow-Headers
antworten, die die Arten der zulässigen Anforderungen einschränken können. Wenn dem Browser mitgeteilt wird, welche Ursprünge erlaubt sind, blockiert er zukünftige Anfragen von nicht erlaubten Ursprüngen.
Ist CORS eine Sicherheitssache? Es fällt mir schwer, es als eine Sicherheitskomponente zu betrachten, wenn es die Verantwortung des Webbrowsers ist, zu erzwingen, dass diese Anfrage nur von erlaubten Domains gesendet wird. –
@ZachTempleton CORS ist eine Möglichkeit, die gleiche Herkunft Politik zu entspannen. Die gleiche Herkunftsrichtlinie wird verwendet, da Browser den von ihnen besuchten Websites oder dem von ihnen geladenen Inhalt nicht vertrauen. Es verhindert, dass eine Site eine andere Site schädigt. –
- 1. Datenbank-Indizes: Eine gute Sache, eine schlechte Sache oder eine Zeitverschwendung?
- 2. Boxen, eine Sache der Vergangenheit?
- 3. Wo ist MVC eine schlechte Sache?
- 4. Test, dass entweder eine Sache oder eine andere in AssertJ
- 5. Den Build durchbrechen, warum ist es eine schlechte Sache?
- 6. Ist das eine geniale Sache oder einfach nur schlechter Code?
- 7. Eine andere Sache über css Leistung
- 8. Fast da mit Rekursion. Eine letzte Sache
- 9. Wie programmiere ich eine Sache C++
- 10. Sind spröde Komponententests immer eine schlechte Sache?
- 11. ist Bower installieren html5boilerplate ist eine gute Sache?
- 12. Gibt es eine elseif Sache in MongoDB zu $ Cond während
- 13. Was ist die RegularExpression, die mehr als eine Sache validiert?
- 14. Behalten Zyklen: Warum ist das so eine schlechte Sache?
- 15. Regex, um eine Sache einzuschließen, aber eine andere auszuschließen
- 16. Ist "implizit importiert" in Delphi-Paketen immer eine schlechte Sache?
- 17. Ist das Konzept eines "interleaved homomorphism" eine echte Sache?
- 18. Ist new int [] [] eine gültige Sache in C++ zu tun?
- 19. Umleitung mitten in einer Transaktion ist eine normale Sache?
- 20. Machen Sie eine Sache wie Lightbow ohne Bild in
- 21. Ist eine dynamische gespeicherte SQL-Prozedur eine schlechte Sache für viele Datensätze?
- 22. Ist diese große komplizierte Sache gleich? oder dieses? oder dieses?
- 23. Eine Sache in der Methode "Transfer" in HashMap (jdk 1.6)?
- 24. Sind dynamische URL-Variablen eine Sache für PHP?
- 25. Ändern Apache Virtual Host-Port und eine seltsame Sache passierte
- 26. Sind Anwendungen mit vielen DLLs eine schlechte Sache?
- 27. Java-Serialisierung Random Access, eine sehr seltsame Sache!
- 28. Javascript: Funktion, die eine Sache macht, wenn PHP-Variable definieren
- 29. So reinigen Sie eine bestimmte Sache in der Befehlszeile
- 30. Hinzufügen mehrerer Datensätze für eine Sache in PHP
einfache aber sehr gute Erklärung! –