Czy możliwe jest wychwycenie błędów Kors?

To pytanie jest związane z Cross-Origin Resource Sharing (CORS, http://www.w3.org/TR/cors/).

Jeśli wystąpi błąd podczas składania żądania CORS, Chrome (i inne przeglądarki również) loguje błąd do konsoli błędów. Przykładowa wiadomość może wyglądać tak:

XMLHttpRequest nie może załadować http://domain2.example. Origin {[1] } nie jest dozwolone przez Access-Control-Allow-Origin.

Zastanawiam się, czy jest sposób, aby programowo uzyskać ten błąd wiadomość? Próbowałem zawijać moje wywołanie xhr.send() W try / catch, próbowałem również dodać obsługę zdarzenia onerror(). Żaden z nich nie otrzymuje Komunikatu o błędzie.

Author: Felix Kling, 2011-01-30

1 answers

Zobacz:

...oraz notki w XHR Level 2 o CORS:

Informacje są celowo filtrowane.

Edit wiele miesięcy później: komentarz następczy tutaj zapytał "dlaczego"; kotwica w pierwszym linku brakowało kilku znaków, co sprawiło, że trudno było zobaczyć, jaka część dokumentu nawiązując do.

To kwestia bezpieczeństwa - próba uniknięcia ujawniania informacji w nagłówkach HTTP, które mogą być wrażliwe. Link W3C o CORS mówi:

Agenci użytkownika muszą odfiltrować wszystkie nagłówki odpowiedzi inne niż te, które są prostym nagłówkiem odpowiedzi lub których nazwa pola jest niewrażliwa na wielkość liter w ASCII dla jednej z wartości nagłówków Access-Control-Expose-Headers (jeśli istnieją), przed wystawieniem nagłówków odpowiedzi na API zdefiniowane w API CORS specyfikacje.

Ten fragment zawiera linki do "prostego nagłówka odpowiedzi", który wymienia Cache-Control, Content-Language, Content-Type, Expires, Last-Modified i Pragma. Więc te przechodzą. Część "Access-Control-Expose-Headers headers" pozwala zdalnemu serwerowi ujawnić również inne nagłówki, wymieniając je tam. Więcej informacji można znaleźć w dokumentacji W3C.

Pamiętaj, że masz jedno pochodzenie-powiedzmy, że jest to strona, którą załadowałeś w przeglądarce, uruchamiając trochę JavaScript - a skrypt wysyła żądanie do innego źródła, co zwykle nie jest dozwolone, ponieważ złośliwe oprogramowanie może robić paskudne rzeczy w ten sposób. Tak więc przeglądarka, uruchamiająca skrypt i wykonująca żądania HTTP w swoim imieniu, działa jako strażnik bramy.

Przeglądarka patrzy na odpowiedź z tego serwera "inne pochodzenie" i, jeśli nie wydaje się być "biorący udział" w CORS-wymagane nagłówki brakuje lub zniekształcone - to jesteśmy w pozycji braku zaufania. Nie możemy być pewni, że skrypt uruchamiany lokalnie działa w dobrej wierze, ponieważ wydaje się, że próbuje skontaktować się z serwerami, które nie oczekują, że skontaktują się w ten sposób. Przeglądarka z pewnością nie powinna "wyciekać" żadnych poufnych informacji z tego zdalnego serwera, po prostu przekazując całą swoją odpowiedź do skryptu bez filtrowania - to w zasadzie byłoby zezwalając na żądanie cross-origin, w pewnym sensie. Pojawi się luka w ujawnianiu informacji.

To może utrudnić debugowanie, ale to kompromis między bezpieczeństwem a użytecznością, gdzie, ponieważ "użytkownik" jest deweloperem w tym kontekście, bezpieczeństwo ma znaczący priorytet.

 27
Author: Andrew Hodgkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-29 04:35:10