http 페이지에서 https를 사용하는 Ajax


101

내 사이트는 http 및 https 프로토콜을 사용합니다. 콘텐츠에 영향을주지 않습니다. 내 사이트는 페이지의 일부 영역을 채우는 jQuery ajax 호출을 사용합니다.

이제 https를 통해 모든 ajax 호출을 수행하고 싶습니다. (이유를 묻지 마십시오 :)) https 프로토콜이있는 페이지에있을 때 ajax 요청이 작동합니다. http 프로토콜이있는 페이지에있을 때 javascript 오류 : 제한된 URI에 대한 액세스가 거부되었습니다.

이것이 교차 도메인 문제라는 것을 알고 있으며 (사실 교차 프로토콜 문제입니다) 현재 페이지에서와 같이 ajax 호출에서 동일한 프로토콜을 사용해야한다는 것을 알고 있습니다.

그래도 모든 ajax 호출이 https가되고 http를 통해 제공된 페이지에서 호출되기를 원합니다. 이를 달성하기위한 해결 방법이 있습니까 (일부 json / proxy 솔루션?), 아니면 단순히 불가능합니까?


4
ajax를 로딩 페이지 프로토콜과 일치시키지 않는 이유는 무엇입니까?
scheibk

45
그들은 구체적으로 "이유를 묻지 마십시오"라고 말했습니다.
Chris Moschini 2011

하지만 HTTPS가있는 AJAX가 필요한 이유는 무엇입니까 .....
Miles

4
예를 들어 사람들이 무슨 일이 일어나고 있는지 볼 수 있도록 백그라운드에서 페이팔과 같은 지불 게이트웨이에 연결하는보다 역동적 인 체크 아웃 양식의 경우 .. 더 많은 가능성 중 하나
kentor

답변:


58

서버에서 Access-Control-Allow-Origin 헤더 추가

Access-Control-Allow-Origin: https://www.mysite.com

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing


7
큰 응답 - 오페라 같은 일부 사용되는 브라우저 (모든 AT)에 의해 지원하지만 인터넷 익스플로러 (버전 8부터 지원) caniuse.com/#search=cors
SimonSimCity

1
: 지금 지원 오페라처럼 보인다 en.wikipedia.org/wiki/... 뿐만 아니라 오페라 미니를하지만 ...
gitaarik

11

JSONP를 사용해보십시오.

대부분의 JS 라이브러리는 다른 AJAX 호출처럼 쉽게 만들지 만 내부적으로는 iframe을 사용하여 쿼리를 수행합니다.

페이로드에 JSON을 사용하지 않는 경우 iframe을 중심으로 자체 메커니즘을 롤링해야합니다.

개인적으로 http : // 페이지에서 https : // 페이지로 리디렉션하겠습니다.


1
흠 나는 jsonp : 'jsonp_callback'옵션 세트로 jquery .ajax를 시도했지만 여전히 동일한 js 오류입니다.
user135863 09-07-09

어쩌면 당신은 URL에 콜백 매개 변수를 추가 할 필요가
하비에르

@ user135863 처음에 JSONP 를 지원 하기 위해 쿼리를 보내는 엔드 포인트가 있습니까?
Leigh Brenecki

1
제 정신을 위해 마지막 옵션을 사용하겠습니다. 간단한 리디렉션https:
Dzeimsas Zvirblis

9

http://example.com/https://example.com/ (호스트 헤더가 전송되지 않으므로 해당 IP에 대한 기본값에 응답)와 다른 가상 호스트로 해석 될 수 있으므로 둘은 별도의 것으로 처리됩니다. 따라서 도메인 간 JS 제한이 적용됩니다.

JSON 콜백을 사용 하면이를 방지 할 수 있습니다.


JSON 콜백에 대한 데드 링크 :(
Kubie

@Kubie이 답변은 내일 10 년 전이며, 깨진 링크는 질문에 생존하기에 충분한 정보를 포함하도록 요청하는 이유입니다.
ceejayoz

방금 10 년을 알아 차 렸습니다. 난 아무것도 발견하면 그 좋아,이 & 편집 대답을 주변에 구글합니다
Kubie

4

오픈 소스 Forge 프로젝트를 확인하십시오. 실제 교차 도메인 요청을 처리하기 위해 일부 Flash와 함께 JavaScript TLS 구현을 제공합니다.

http://github.com/digitalbazaar/forge/blob/master/README

간단히 말해, Forge를 사용하면 http를 통해 https 사이트로로드 된 웹 페이지에서 XmlHttpRequests를 만들 수 있습니다. 교차 도메인 요청을 활성화하려면 서버를 통해 Flash 교차 도메인 정책 파일을 제공해야합니다. 작동 방식에 대한 자세한 설명을 보려면 README 끝에있는 블로그 게시물을 확인하십시오.

그러나 Forge가 두 개의 다른 https 도메인 간의 요청에 더 적합하다는 점을 언급해야합니다. 그 이유는 잠재적 인 MiTM 공격이 있기 때문입니다. 안전하지 않은 사이트에서 JavaScript 및 Flash를로드하면 손상 될 수 있습니다. 가장 안전한 용도는 보안 사이트에서로드 한 다음 다른 사이트 (보안 또는 기타)에 액세스하는 데 사용하는 것입니다.


2

iframe에서 https 페이지를로드하고 일부 브리지를 통해 프레임 안팎으로 모든 ajax 요청을 라우팅 할 수 있습니다. 이것은 해커이지만 작동 할 수 있습니다 (보안 컨텍스트에 대해 동일한 액세스 제한을 적용할지 확실하지 않음) . 그렇지 않으면 요청을 다시 라우팅하는 로컬 http 프록시 (예 : 교차 도메인 호출)가 허용되는 솔루션입니다.



이 작업을 수행 할 수 있지만 iFrame의 세션 쿠키가 필요한 경우 P3P 헤더를 설정해야합니다. 그렇지 않으면 MSE에서 "nu uh uh"라고 표시됩니다.
srquinn

2

내가하는 일은 다음과 같습니다.

게시하려는 데이터로 숨겨진 iFrame을 생성하십시오. 여전히 해당 iFrame을 제어하므로 동일한 출처가 적용되지 않습니다. 그런 다음 해당 iFrame의 양식을 SSL 페이지에 제출하십시오. 그런 다음 SSL 페이지는 상태 메시지가있는 비 SSL 페이지로 리디렉션됩니다. iFrame에 액세스 할 수 있습니다.


이 작업을 수행 할 수 있지만 iFrame에서 세션 쿠키가 필요한 경우 P3P 헤더를 설정해야합니다. 그렇지 않으면 MSE에서 "nu uh uh"라고 표시됩니다.
srquinn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.