Używanie usługi Azure CDN z mechanizmem CORS
Co to jest mechanizm CORS?
MECHANIZM CORS (współużytkowanie zasobów między źródłami) to funkcja PROTOKOŁU HTTP, która umożliwia aplikacji internetowej działającej w jednej domenie uzyskiwanie dostępu do zasobów w innej domenie. Aby zmniejszyć możliwość ataków skryptowych między witrynami, wszystkie nowoczesne przeglądarki internetowe implementują ograniczenie zabezpieczeń znane jako zasady pochodzenia tego samego. To ograniczenie uniemożliwia wywoływanie interfejsów API w innej domenie przez stronę internetową. Mechanizm CORS umożliwia bezpieczne wywoływanie interfejsów API w innym miejscu pochodzenia (domenie pochodzenia).
Jak to działa
Istnieją dwa typy żądań CORS, proste żądania i złożone żądania.
W przypadku prostych żądań:
Przeglądarka wysyła żądanie CORS z dodatkowym nagłówkiem żądania HTTP źródła . Wartość nagłówka żądania to źródło, które obsłużyło stronę nadrzędną, która jest zdefiniowana jako kombinacja protokołu, domeny i portu. Gdy strona z HTTPS://www.contoso.com próby uzyskania dostępu do danych użytkownika w fabrikam.com źródła, do fabrikam.com zostanie wysłany następujący nagłówek żądania:
Origin: https://www.contoso.com
Serwer może odpowiedzieć za pomocą dowolnego z następujących nagłówków:
Nagłówek Access-Control-Allow-Origin w odpowiedzi wskazujący, która witryna źródła jest dozwolona. Na przykład:
Access-Control-Allow-Origin: https://www.contoso.com
Kod błędu HTTP, taki jak 403, jeśli serwer nie zezwala na żądanie między źródłami po sprawdzeniu nagłówka Źródła
Nagłówek Access-Control-Allow-Origin z symbolem wieloznacznymi, który zezwala na wszystkie źródła:
Access-Control-Allow-Origin: *
W przypadku złożonych żądań:
Złożone żądanie to żądanie CORS, w którym przeglądarka musi wysłać żądanie wstępne (czyli wstępne sondowanie) przed wysłaniem rzeczywistego żądania CORS. Żądanie wstępne pyta o uprawnienie serwera, jeśli oryginalne żądanie CORS może kontynuować i jest żądaniem OPTIONS
do tego samego adresu URL.
Napiwek
Aby uzyskać więcej informacji na temat przepływów CORS i typowych pułapek, zobacz Przewodnik po mechanizmie CORS dla interfejsów API REST.
Scenariusze z symbolami wieloznacznymi lub pojedynczymi źródłami
Mechanizm CORS w usłudze Azure CDN działa automatycznie bez dodatkowych konfiguracji, gdy nagłówek Access-Control-Allow-Origin jest ustawiony na symbol wieloznaczny (*) lub pojedyncze źródło. Usługa CDN buforuje pierwszą odpowiedź, a kolejne żądania używają tego samego nagłówka.
Jeśli żądania zostały już wykonane do sieci CDN przed ustawieniem mechanizmu CORS na początku, musisz przeczyścić zawartość w zawartości punktu końcowego, aby ponownie załadować zawartość za pomocą nagłówka Access-Control-Allow-Origin .
Scenariusze z wieloma źródłami
Jeśli chcesz zezwolić na zezwolenie na konkretną listę źródeł dla mechanizmu CORS, sprawy są nieco bardziej skomplikowane. Problem występuje, gdy sieć CDN buforuje nagłówek Access-Control-Allow-Origin dla pierwszego źródła CORS. Gdy inne źródło MECHANIZMU CORS wysyła kolejne żądanie, usługa CDN obsługuje buforowany nagłówek Access-Control-Allow-Origin , który nie jest zgodny. Istnieje kilka sposobów rozwiązania tego problemu.
Standardowe profile usługi Azure CDN
W usłudze Azure CDN Standard from Microsoft możesz utworzyć regułę w aucie reguł standardowych, aby sprawdzić nagłówek Origin w żądaniu. Jeśli jest to prawidłowe źródło, reguła ustawi nagłówek Access-Control-Allow-Origin z żądaną wartością. W takim przypadku nagłówek Access-Control-Allow-Origin z serwera pochodzenia pliku jest ignorowany, a aparat reguł usługi CDN całkowicie zarządza dozwolonymi źródłami mechanizmu CORS.
Napiwek
Możesz dodać dodatkowe akcje do reguły, aby zmodyfikować dodatkowe nagłówki odpowiedzi, takie jak Access-Control-Allow-Methods.
Azure CDN Premium from Edgio
Korzystając z aparatu reguł Edgio Premium, należy utworzyć regułę , aby sprawdzić nagłówek Origin w żądaniu. Jeśli jest to prawidłowe źródło, reguła ustawia nagłówek Access-Control-Allow-Origin z źródłem podanym w żądaniu. Jeśli źródło określone w nagłówku Origin nie jest dozwolone, reguła powinna pominąć nagłówek Access-Control-Allow-Origin , co powoduje odrzucenie żądania przez przeglądarkę.
Istnieją dwa sposoby rozwiązania tego problemu z aparatem reguł Premium. W obu przypadkach nagłówek Access-Control-Allow-Origin z serwera pochodzenia pliku jest ignorowany, a aparat reguł usługi CDN całkowicie zarządza dozwolonymi źródłami mechanizmu CORS.
Jedno wyrażenie regularne ze wszystkimi prawidłowymi źródłami
W takim przypadku utworzysz wyrażenie regularne zawierające wszystkie źródła, które chcesz zezwolić:
https?:\/\/(www\.contoso\.com|contoso\.com|www\.microsoft\.com|microsoft.com\.com)$
Napiwek
Usługa Azure CDN Premium firmy Edgio używa wyrażeń regularnych zgodnych z platformą Perl jako aparatu dla wyrażeń regularnych. Aby zweryfikować wyrażenie regularne, możesz użyć narzędzia takiego jak Wyrażenia regularne 101 . Należy pamiętać, że znak "/" jest prawidłowy w wyrażeniach regularnych i nie musi zostać uniknięci, jednak ucieczka tego znaku jest uważana za najlepsze rozwiązanie i jest oczekiwana przez niektóre moduły sprawdzania poprawności wyrażeń regularnych.
Jeśli wyrażenie regularne jest zgodne, reguła zastępuje nagłówek Access-Control-Allow-Origin (jeśli istnieje) ze źródła źródłem, które wysłało żądanie. Można również dodać dodatkowe nagłówki CORS, takie jak Access-Control-Allow-Methods.
Żądaj reguły nagłówka dla każdego źródła.
Zamiast wyrażeń regularnych można zamiast tego utworzyć oddzielną regułę dla każdego źródła, na które chcesz zezwolić, używając warunku dopasowania z symbolem wieloznacznyminagłówka żądania. Podobnie jak w przypadku metody wyrażenia regularnego aparat reguł ustawia same nagłówki CORS.
Napiwek
W tym przykładzie użycie symbolu wieloznakowego * informuje aparat reguł, aby był zgodny zarówno z protokołem HTTP, jak i HTTPS.