Moja witryna korzysta z protokołów http i https; nie wpływa na zawartość. Moja witryna korzysta z wywołań jQuery ajax, które również wypełniają niektóre obszary strony.
Teraz chciałbym wykonać wszystkie wywołania Ajax przez https. (proszę nie pytać dlaczego :)) Kiedy jestem na stronie z protokołem https, działają żądania AJAX. Kiedy jestem na stronie z protokołem http, pojawia się błąd javascript: odmowa dostępu do zastrzeżonego URI
Wiem, że jest to problem międzydomenowy (w rzeczywistości jest to problem między protokołami) i wiem, że powinienem używać tego samego protokołu w wywołaniach Ajax, jak na bieżącej stronie.
Mimo to chcę, aby wszystkie wywołania ajax były https i wywoływały je na stronie, która była obsługiwana przez http. Czy istnieje jakieś obejście, aby to osiągnąć (jakieś rozwiązanie json / proxy?), Czy jest to po prostu niemożliwe?
Odpowiedzi:
Dodaj nagłówek Access-Control-Allow-Origin z serwera
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
źródło
Wypróbuj JSONP.
większość bibliotek JS sprawia, że jest to tak samo łatwe, jak inne wywołania AJAX, ale wewnętrznie używa ramki iframe do wykonania zapytania.
jeśli nie używasz formatu JSON dla swojego ładunku, musisz obrócić własny mechanizm wokół elementu iframe.
osobiście po prostu przekierowałbym ze strony http: // na stronę https: //
źródło
https:
http://example.com/ może prowadzić do innego hosta wirtualnego niż https://example.com/ (który, jako że nagłówek hosta nie jest wysyłany, odpowiada domyślnemu adresowi IP), więc oba są traktowane jako oddzielne domeny i tym samym podlegają ograniczeniom JS między domenami.
Wywołania zwrotne JSON mogą pozwolić Ci tego uniknąć.
źródło
Sprawdź projekt opensource Forge. Zapewnia implementację JavaScript TLS wraz z niektórymi Flash do obsługi rzeczywistych żądań międzydomenowych:
http://github.com/digitalbazaar/forge/blob/master/README
Krótko mówiąc, Forge umożliwia tworzenie żądań XmlHttpRequests ze strony internetowej załadowanej za pośrednictwem protokołu HTTP do witryny https. Będziesz musiał dostarczyć plik zasad Flash międzydomenowych za pośrednictwem swojego serwera, aby umożliwić żądania międzydomenowe. Sprawdź posty na blogu na końcu README, aby uzyskać bardziej szczegółowe wyjaśnienie, jak to działa.
Powinienem jednak wspomnieć, że Forge lepiej nadaje się do żądań między dwiema różnymi domenami https. Powodem jest to, że istnieje potencjalny atak MiTM. Jeśli załadujesz JavaScript i Flash z niezabezpieczonej witryny, może to zostać naruszone. Najbezpieczniejszym zastosowaniem jest załadowanie go z bezpiecznej witryny, a następnie użycie go w celu uzyskania dostępu do innych witryn (bezpiecznych lub innych).
źródło
Możesz spróbować załadować stronę https w ramce iframe i skierować wszystkie żądania AJAX do / z ramki przez jakiś most, jest to hakowanie, ale może zadziałać (nie jestem pewien, czy nałoży te same ograniczenia dostępu, biorąc pod uwagę bezpieczny kontekst) . W przeciwnym razie akceptowanym rozwiązaniem byłby lokalny serwer proxy http do przekierowywania żądań (jak w przypadku wszelkich połączeń między domenami).
źródło
Oto co robię:
Wygeneruj ukrytą ramkę iFrame z danymi, które chcesz opublikować. Ponieważ nadal kontrolujesz ten element iFrame, to samo źródło nie ma zastosowania. Następnie prześlij formularz w tym elemencie iFrame na stronę ssl. Strona ssl następnie przekierowuje na stronę inną niż ssl z komunikatami o stanie. Masz dostęp do iFrame.
źródło