2013-08-06 11 views
7

Jestem bardzo zdezorientowany z reinkarnacją XMLHttpRequest i XDomainRequest i chciałbym pomóc. Więc oto moje wnioski:XDomainRequest Vs XMLHttpRequest na IE8 i IE9

  1. XDomainRequest w IE8 i IE9 wydaje się być jakiś XMLHttpRequest klasy sub
  2. XDomainRequest brakuje "withCredentials"
  3. XDomainRequest brakuje "onLoad" (?) zdarzenie zmuszające do użycia stanu i statusu IF - EDYCJA: To nie jest dokładnie prawda. onLoad jest dostępny, jeśli utworzysz XDomainRequest w IE8 i IE9. Jeśli jednak zostanie utworzone wystąpienie XMLHttpRequest w EI8 lub IE9, usługa onLoad nie będzie dostępna. Zobaczymy poniżej, dlaczego jest to ważne.
  4. Przesyła również dane jako zwykły/tekstowy, a nie jako formularz zmuszający do analizy strumienia wejściowego na końcu.
  5. Nawet jeśli dyrektywa "Zezwalaj na nagłówki" serwera CORS pozwala na odczytanie zestawu plików przez klienta, XDomainRequest nie ujawnia go, uniemożliwiając użycie identyfikatorów sesji przechowywanych w pamięciach cookie do uwierzytelniania.
  6. Wreszcie, jeśli się nie mylę, zezwala na to tylko metody POST i GET http, które są bezużyteczne dla usług internetowych RestFull.

Ta lista nie jest kompletna i jak powiedziałem, jest oparta na moich wnioskach. Jednak tutaj zaczyna się zamieszanie. Mam aplikację, w której za pośrednictwem Ajax muszę:

  • Uzyskanie (cross domain) za pomocą GET klucza szyfrowania wraz z powiązanym z nim identyfikatorem sesji.
  • Zaszyfruj moje hasło użytkownika za pomocą tego klucza (tutaj nie ma problemu)
  • Zaloguj się do domeny krzyżowej (gdzie dostałem klucz w kroku 1), używając nazwy użytkownika POST i x-www-urlencoded i zaszyfrowanego hasła.

Teraz dla wszystkich wyżej wymienionych powodów nie mogę tego zrobić z XDomainRequest:

  • pierwsze dlatego, że XDomainRequest: open (metoda, url) wysyła tylko zwykły tekst i mój wniosek osoby trzeciej spodziewa formularza (Mogę napisać separator filtru/żądania, ale nie o to chodzi).
  • Ponieważ mój identyfikator sesji, który przychodzi wraz z kluczem szyfrowania za pośrednictwem nagłówka Set-Cookie (krok 1), nigdy nie jest wysyłany z powrotem do domeny krzyżowej po zalogowaniu się jako nagłówek, ponieważ XDomainRequest nie ujawnia nagłówków.

Niemniej jednak, jeśli w IE8 i IE9 I instancji XMLHttpRequest lekceważąc wszystkie te kontrole opisane here, wszystko działa bez zarzutu !!! OK Nie dostaję zdarzenia onload i nie jestem pewien co to jest historia z "withcredentials", ale IE8 i IE9 wydaje się nie mieć problemu z wykorzystaniem XMLHttpRequest dla cross-domain. Ale dlaczego? Czy nie wszystkie są sprzeczne? Po prostu próbuję wyjaśnić ten problem, ponieważ obawiam się, że użycie XMLHttpRequest w IE8 i IE9 może wrócić i ugryźć w pewnym momencie. Czy mogę poprosić o wyraźny przykład, kiedy ktoś może skorzystać z jednego, a nie z drugiego? Nawet lepiej, czy była jakaś aktualizacja IE8 i IE9, które rozwiązały problem?

Każda pomoc będzie mile widziana Yiannis

Odpowiedz

2

pierwszej nuty to:

IE11 deprecates się XDomainRequest obiekt i nie jest dostępna w trybie IE11 krawędzi.

1) Co to jest XDomainRequest i dlaczego IE ma ten obiekt? Kilka lat temu opracowano XMLHTTPRequest 2 spec przez W3C wszystkie przeglądarki zbudowały poziom 2 ponad XMLHTTPRequest poziom 1 Microsoft utworzyć XDomainRequest. Tak więc XDomainRequest nie jest podklasą, jest to niestandardowa funkcja IE.

2) Tak, XDomainRequest nie ma "zCredentials". Ponieważ:

w celu zapobiegania nadużyciom władzy otoczenia użytkownika (np cookie, poświadczenia http, certyfikaty klienta itp), wniosek zostanie pozbawiona cookies i poświadczeń i zignoruje wszelkie wyzwania uwierzytelnienia lub przystawka Cookie dyrektywy w odpowiedzi HTTP. Polecenia XDomainRequests nie będą wysyłane na uprzednio uwierzytelnionych połączeniach, ponieważ niektóre protokoły uwierzytelniania systemu Windows (np. NTLM/Kerberos) są oparte na połączeniach zamiast na żądanie.

4)

Począwszy od 2014 roku, XDomainRequest nie wydaje się, aby wysłać dowolną Content-Type nagłówek w ogóle. Nie jest dla mnie jasne, kiedy to się zmieniło.

itd. I tak dalej ... Zamieszczam tę odpowiedź tylko dla historii.

Nie używaj XDomainRequest. To jest brzydka & niestandardowa niestandardowa funkcja.

Więcej informacji tutaj:

  1. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
  2. http://www.html5rocks.com/en/tutorials/cors/
  3. http://msdn.microsoft.com/en-us/library/ie/cc288060%28v=vs.85%29.aspx
  4. https://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest
0
but IE8 and IE9 seems to have no problem using the XMLHttpRequest for cross domain 

Ten punkt nie jest tru e. Jedynym sposobem na wysłanie CORS w IE8/9 jest użycie niestandardowego XDomainRequest.

Powiązane problemy