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