2013-04-15 8 views
40

Znalazłem to bardzo przydatne rozszerzenie chrome o nazwie listonosz, jest to bardzo przydatne rozszerzenie, zwłaszcza gdy jesteś w programowaniu aplikacji RESTful.w jaki sposób Postman wysyła prośby? ajax, sama polityka pochodzenia

Jedną z rzeczy, o której się nie mylę, jest to, w jaki sposób ta wtyczka/rozszerzenie może skutecznie wysyłać żądanie POST w różnych domenach?

Próbowałem głosować w ankiecie, używając tego postmana. Voting using Postman

Po przesłaniu tego, głosowanie zostało faktycznie policzone, ale kiedy próbowałem to zrobić za pomocą ajax i javascript, nie udało się, z powodu różnych zasad pochodzenia przeglądarek.

Jak to jest możliwe?

Oto mój kod za pomocą jquery. Użyłem tego na moim komputerze, localhost.

init: function() { 
    $.ajax({ 
     url: 'http://domain.com/vote.php', 
     type:'POST', 
     dataType: 'html', 
     data: { 
      id: '1' 
     }, 
     success: function(data) { 
     if (data == 'voted') { 
      $('.set-result').html('you already voted. try again after 24 hours'); 
     } else { 
      $('.set-result').html('successfully voted'); 
     } 
    } 
    }); 
}, 
+2

Wydaje się, że rozszerzenie działa poprzez umieszczenie na getpostman.com zamiast domenie docelowej (używając CORS), serwer getpostman.com następnie wysyła żądanie i zwraca odpowiedź. https://github.com/a85/POSTMan-Chrome-Extension/blob/master/chrome/js/requester.js#L457 –

+0

to wydaje się być uzasadnione, przeczytam wtedy ich kod, może spróbuję wymyślić to samo rozwiązanie. –

+0

Pamiętaj jednak, że aby zaimplementować CORS w IE, musisz zmienić jQuery, włączając alternatywny transport. IE7 w ogóle nie obsługuje CORS. –

Odpowiedz

32

Aplikacje w pakiecie Chrome mogą mieć uprawnienia do wielu domen. Kiedy instalujesz Postmana, obiecujesz, że ta aplikacja będzie miała dostęp do dowolnej domeny.

Umieszczając */* w sekcji permissions pliku manifestu, można to zrobić.

Czytaj więcej tutaj: https://developer.chrome.com/extensions/xhr.html

+2

Jak to możliwe? Czy sama strona internetowa nie musi również zezwalać na "CORS"? – CodyBugstein

+1

@Imray Nie ma potrzeby używania nagłówków CORS, tak jak program serwera lub 'curl'. – Mohsen

+0

Zasadniczo aplikacja Chrome nie podlega zabezpieczeniom Cross Origin? Czy aplikacja Chrome może uzyskać dostęp do moich plików cookie banku lub mojego loginu na Facebooku? – CodyBugstein

2

Wygląda na terenie, na którym znajduje się ankieta (zwanego dalej „vote.php” skrypt) musi mieć „Access-Control-Allow-Origin” nagłówek ustawiony w celu umożliwienia delegowania od lista witryn (lub wszystkich witryn).

Wartość * W nagłówku pozwolą delegowania z każdej strony:

Access-Control-Allow-Origin: * 

czyli można było umieścić następujące u góry vote.php

header('Access-Control-Allow-Origin: *'); 

rozszerzenia i aplikacje Chrome są nie podlegają tym samym ograniczeniom bezpieczeństwa umieszczonym na zwykłych stronach internetowych.

Dodatkowe wskazówki debugowania:

Jeśli próbujesz uzyskać dostęp do usług zdalnych ze stron internetowych, które masz otwarte na lokalnym systemie plików w przeglądarce, można znaleźć przeglądarka stosuje różne reguły zabezpieczeń do nich niż dotyczy plików obsługiwanych przez usługę sieciową.

np. Jeśli otwierasz pliki lokalne z lokalizacji, takiej jak C:\MyDocuments\weboot\index.htm (Windows) lub \Users\joe\Sites\index.html (Mac) w przeglądarce, twoje żądanie AJAX może nie działać, nawet z nagłówkiem określonym w większości przeglądarek.

Safari firmy Apple nie stosuje prawie żadnych ograniczeń między domenami do plików otwieranych lokalnie, ale Firefox jest o wiele bardziej rygorystyczny, jeśli chodzi o to, co pozwala, z Chrome gdzieś pośrodku. Lokalne uruchamianie serwera sieciowego (np. Na http://localhost/) jest dobrym pomysłem, aby uniknąć nieoczekiwanego zachowania.

Ponadto inne biblioteki udostępniające funkcje do obsługi żądań Ajax (takie jak AngularJS) mogą wymagać domyślnego ustawienia innych nagłówków na serwerze. Zwykle można zobaczyć przyczynę niepowodzenia w konsoli debugowania przeglądarki.

1

Możesz dodać następujący nagłówek do wysłanego żądania Ajax w listonoszu.

Content-Type  application/json 

X-Requested-With XMLHttpRequest 

Zrzut

enter image description here

Credit do Orion