TL;DR
Odkazujte na tento původní vývojový diagram, který jsem vytvořil pro tento příspěvek.
Úvod:Co je CORS? Co je předletová příprava? Co je metoda Možnosti?
The CORS
znamená Cross-Origin Resource Sharing. Je důležité, když se aktuálně prohlížený web pokouší načíst zdroj, jako je JSON, z jiného webového serveru (cross-origin), protože prohlížeče omezují požadavky HTTP mezi různými zdroji iniciované skripty.
Z bezpečnostních důvodů pošlou prohlížeče před odesláním původního požadavku serveru cross-origin tzv. preflight request
jehož hlavičky obsahují jak HTTP metodu, tak hlavičky, které budou použity v původním požadavku. Předtiskový požadavek používá HTTP OPTIONS
metoda.
Pro přesnější definice a související diskuse je nejlepší oficiální dokument.
Zbytek tohoto příspěvku pojednává o běžných situačních otázkách a odpovědích na jejich řešení.
Otázka 1:Options
požadavek je odeslán na koncový dev-server, ale stavový kód odpovědi je 405 (metoda není povolena). Co by měl frontend udělat, aby problém vyřešil?
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at https://cors-2022.com. (Reason: XXX).
Odpověď 1
Můžete použít jednu ze dvou níže uvedených možností.
-
Požádejte backend, aby zpracoval metodu volby. Požadavek před výstupem je v některých situacích z bezpečnostních důvodů nevyhnutelný a vhodný.
-
Zvažte možnost přechodu z požadavku před výstupem na jednoduchý požadavek. Jednoduché požadavky nespustí předletovou kontrolu CORS.
Aby byl váš požadavek jednoduchý, musíte splnit všechny zde napsané podmínky.
Otázka 2:Backend-dev tým připravil pro náš frontend-dev tým útržek serveru automaticky generovaný Swagger Codegen. Ale vidím nějaké chyby CORS související s metodou možností.
Odpověď 2
Můžete použít jednu z posledních tří možností níže.
-
(Ne ✋) Upravte implementaci útržku serveru ručně. Byla by to špatná volba, protože útržek serveru již nelze automaticky generovat.
-
Předpokládejme, že vaše aplikace je vytvořena z Vue nebo React. Poté použijte vestavěné funkce proxy rámce, jako je React Dev Server Proxy (viz tento příspěvek) nebo Vue Proxy
-
Použijte obecný proxy nástroj, jako je CORS Anywhere. Tento proxy manipuluje s hlavičkou požadavku, aby dočasně obešel ochranu CORS.
-
Použijte rozšíření prohlížeče, například Allow CORS