Jak można debugować żądania CORS za pomocą cURL? Do tej pory nie mogłem znaleźć sposobu na „symulację” żądania wstępnego.
Oto, w jaki sposób można debugować żądania CORS za pomocą curl.
Wysyłanie zwykłego żądania CORS za pomocą cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
The -H "Origin: http://example.com"
Flaga jest trzecia domena strona składająca wniosek. Zastępuj w jakiejkolwiek domenie.
The --verbose
drukuje całej odpowiedzi flag, dzięki czemu można zobaczyć nagłówków żądania i odpowiedzi.
Adres URL, którego używam powyżej, jest przykładowym żądaniem do interfejsu API Google, który obsługuje CORS, ale możesz go zastąpić dowolnym testowanym adresem URL.
Odpowiedź powinna zawierać Access-Control-Allow-Origin
nagłówek.
Wysyłanie żądania inspekcji wstępnej za pomocą cUrl:
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Wygląda podobnie do zwykłego żądania CORS z kilkoma dodatkami:
Te -H
flagi wysłać dodatkowe nagłówki żądania do serwera inspekcji wstępnej
-X OPTIONS
Flaga wskazuje, że jest to żądanie HTTP OPTIONS.
Jeżeli wniosek inspekcji wstępnej jest udane, odpowiedź powinna zawierać Access-Control-Allow-Origin
, Access-Control-Allow-Methods
oraz Access-Control-Allow-Headers
nagłówki odpowiedzi. Jeśli żądanie inspekcji wstępnej nie powiodło się, nagłówki te nie powinny się pojawić lub odpowiedź HTTP nie będzie wynosić 200.
Możesz także określić dodatkowe nagłówki, na przykład User-Agent
używając -H
flagi.
--verbose
opcję, jak wspomniano powyżej.--head
:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file
.Zaktualizowana odpowiedź, która obejmuje większość przypadków
Access-Control-Allow-*
to, że Twój zasób obsługuje CORS.Uzasadnienie alternatywnej odpowiedzi
Przeglądam to pytanie od czasu do czasu, a zaakceptowana odpowiedź nigdy nie jest tym, czego potrzebuję. Najpierw drukuje treść odpowiedzi, która jest dużą ilością tekstu. Dodawanie
--head
wyjść tylko nagłówki. Po drugie, podczas testowania adresów URL S3 musimy podać dodatkowy nagłówek-H "Access-Control-Request-Method: GET"
.Mam nadzieję, że pozwoli to zaoszczędzić czas.
źródło
--head
że curl drukuje nagłówki, ale powoduje również, że curl wysyłaHEAD
żądanie, a nieGET
. W zależności od tego, co testujesz, możesz złożyćGET
wniosek. Możesz to zrobić, dodając--IXGET
.Poniższy skrypt bash „najstraszniejszy” działa dla mnie. Opiera się na Jun powyższym komentarzu .
stosowanie
corstest [-v] url
przykłady
wynik dodatni jest wyświetlany na zielono
wynik ujemny jest wyświetlany na czerwono i niebiesko
opcja -v pokaże pełne nagłówki zwijania
najstraszniejszy
źródło
Wygląda na to, że to po prostu działa:
curl -I http://example.com
Poszukaj
Access-Control-Allow-Origin: *
w zwróconych nagłówkachźródło
*
to nie działa, jeśli poświadczenia, takie jak plik cookie, muszą zostać przedstawione wraz z żądaniem interfejsu API. W takim przypadku nazwa FQDN jest wymagana również wAccess-Control-Allow-Origin
odpowiedziAccess-Control-Allow-Credentials: true
. Żądania poświadczone, chociaż nie zostały określone przez OP, więc*
działa w przypadku wszystkich nieuwierzytelnionych żądań.