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ń:

  1. 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

  2. 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.

Przykład reguł ze standardowym aparatem reguł

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.

Przykład reguł z wyrażeniem regularnym

Żą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.

Przykład reguł bez wyrażenia regularnego

Napiwek

W tym przykładzie użycie symbolu wieloznakowego * informuje aparat reguł, aby był zgodny zarówno z protokołem HTTP, jak i HTTPS.