2012-03-07 19 views
11

Mam problemy z wysyłaniem żądań JSONP z witryny HTTPS witryny na stronę HTTP.HTTPS na żądanie HTTP JSONP

Mam (nie lokalne) środowisko testowe przez HTTPS (z ważnym certyfikatem), w którym mogę pomyślnie uruchomić wszystkie żądania krzyżowe/"cross protocol" (z ostrzeżeniami, ale bez błędów).

wyjście Google Chrome JavaScript Console:

The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

Jednak w produkcji (na Google App Engine, appspot subdomeny) Google Chrome blokuje wszystkie wnioski czekające na potwierdzenie użytkownika.

wyjście Google Chrome JavaScript Console (szczególną uwagę na [zablokowane] tekstu):

[blocked] The page at https://production.appspot.com/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

wiem co robię nie jest bezpieczna, ale to usługi są świadczone przez osoby trzecie i jak dotąd nie ma dostępnej komunikacji SSL. Jestem bardzo zdezorientowany, ponieważ nie rozumiem, dlaczego działa (z ostrzeżeniami) w środowisku testowym, a nie pod appspotem (Google App Engine).

Próbowałem sprawdzić nagłówki bezskutecznie.

nagłówki środowisku testowym:

Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Language:es 
Content-Length:2524 
Content-Type:text/html;charset=utf-8 
Date:Wed, 07 Mar 2012 15:48:30 GMT 
Keep-Alive:timeout=15, max=100 
Set-Cookie: cookie_info... 
Vary:Accept-Encoding 

nagłówki APPSpot:

access-control-allow-credentials:false 
access-control-allow-origin:* 
cache-control:no-cache, must-revalidate 
content-encoding:gzip 
content-length:47890 
content-type:text/html; charset=utf-8 
date:Wed, 07 Mar 2012 14:52:02 GMT 
expires:Fri, 01 Jan 1990 00:00:00 GMT 
pragma:no-cache 
server:Google Frontend 
set-cookie: coookie_info.... 
status:200 OK 
vary:Accept-Encoding 
version:HTTP/1.1 

nie mam pojęcia dlaczego tak się pracuje na testowej envinroment i takie samo podejście jest zablokowany na APPSpot przez Google Chrome.

Jakieś myśli?

+4

Chrome traktuje strony HTTPS Google często inaczej niż standardowe strony HTTPS (np. Specjalne sprawdzenia certyfikatu). Czy może tak być również w przypadku niezabezpieczonych treści? – Robert

+0

Mayte, masz rację. W rzeczywistości problem występuje tylko wtedy, gdy wdrożyliśmy aplikację na GAE (aplikacja korzysta z certyfikatu Google). Wezmę to. Dzięki! –

+0

Mam ten sam problem na moim własnym serwerze i (ważny) certyfikat ... – Stefano

Odpowiedz

1

Serwer proxy apache wysyła żądanie do punktu końcowego w Twoim imieniu. Możesz nawet wysyłać żądania inne niż jsonp do usługi (json, xml, obrazy, post, put, delete, itp.), Ponieważ przeglądarka myśli, że wykonuje żądanie w tej samej domenie.

Twój non.secure.site vhost plik będzie zawierać coś takiego

ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Allow from all 
</Proxy> 
ProxyPass /appspot https://production.appspot.com/ 
ProxyPassReverse /appspot https://production.appspot.com/ 

Po ustawieniu go po prostu zadzwonić do serwisu jak ...

http://non.secure.site/appspot/service?jsonCallback=jsonp1331132928704 

Google ProxyPass uzyskać więcej informacji

https://serverfault.com/questions/429404/help-me-understand-how-to-use-proxypass

0

Jeśli nie masz innej opcji oprócz nas Jeśli nie masz zabezpieczonego API innej firmy, możesz samodzielnie pomyśleć o MITM-ie API.

Utwórz skrypt po stronie serwera, do którego dostęp będzie możliwy tylko za pośrednictwem protokołu SSL i będzie działał jako pośrednik lub usługa przesyłania dalej między tagiem a interfejsem API. W ten sposób możesz zwiększyć bezpieczeństwo, wykonując własne kontrole i sprawdzanie poprawności danych, a ponieważ będziesz je obsługiwał w protokole SSL, nie otrzymasz żadnych błędów związanych z "mieszaną zawartością".

BTW, nie testowałem tego, zawsze istnieje szansa, że ​​strony z certyfikatem Google obsługiwane przez GAE będą działać inaczej.

Mam nadzieję, że mogę pomóc.

0

Mam ten sam problem, ponieważ robię te same rzeczy między http i https. Jest to problem z wieloma domenami.

Najważniejszą rzeczą, jakiej potrzebujesz, to strona po stronie serwera, której używasz do robienia curl, musi ustawić nagłówki zezwalające na połączenie http na https. To poniżej ....

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close");