2012-03-11 7 views
18

CORS/IE에서 jQuery ajax ist가 작동하지 않기 때문에 XDomainRequest을 사용하여 다른 서버에서 데이터를 가져옵니다. 작품은 괜찮지 만 일부 헤더 ('인증', '콘텐츠 유형')를 보내고 싶습니다.IE8/IE9에서 교차 출처 헤더

XDomainRequest에서 헤더를 추가/변경할 수 있습니까?

누군가 해결 방법을 알고 있습니까?

답변

17

이것은 우리가 IE에서 한 것입니다.

대상 도메인을 제어 할 수 있으면 거기에 (정적) html 파일을 호스팅하십시오. iframe을 사용하여 html을 포함하십시오.

이제이 iframe은 로컬 도메인에 실제로 액세스 할 수 있으므로 부모와 자식 프레임간에 통신하여 필요한 것을 얻을 수 있습니다.

이것은 많은을 우리에게 제공했습니다.

window.postMessage는 통신 설정에 가장 좋은 방법입니다 :

하지만 난 단지 IE8부터 작업을 시작 것을 확신합니다. 오래된 브라우저가 필요한 경우에는 다른 해킹을 사용해야합니다.

  1. CORS,
  2. 차 대체
  3. 서버 측 프록시 iframe이란 & window.postMessage을 지원 브라우저 : 우리의 경우

    , 이것은 우리의 3 층 시스템이었다 스크립트를 보조 폴백으로 사용

이러한 옵션은 모두 잘 작동하고 안정적이며 해킹처럼 느껴지지 않았습니다. 2 차적인 후퇴는 간신히 사용되었습니다.

'인증'헤더는 특별히 특별하며, 어쨌든 어떤 상황에서는 차단된다는 사실에 놀라지 않을 것입니다. 우리는 사용자 정의 헤더 'X-Authenticate'를 추가했습니다.

+0

마지막으로 iframe 문제를 해결했습니다. 그러나 'document.domain'을 설정해야하므로 동일한 TLD의 두 하위 도메인 간 통신에만 작동하는 것으로 보입니다. 하지만 두 가지 다른 TLD는 무엇입니까? (필자는 주말에 프록시 서버에 대해 자세히 알아야 할 수도 있습니다 ...) –

+0

iframe 솔루션은 iframe이 API와 동일한 도메인에서 호스팅되는 경우 * 작동해야합니다. 프록시 스크립트가 당신을위한 해결책이라면, 그것은 당신의 목적을 위해 * 훨씬 * 더 쉬울 수도 있습니다. 프록시 서버는 서버 측 프록시 스크립트이기 때문에 (일반적으로) 프록시 서버가 아닙니다. – Evert

+0

좋아요, iframe 작업을했습니다. 요청을 수행하고 응답을 반환하는 프레임 창에 모든 정보 (헤더, 포스트 본문, ...)가있는 객체를 전달하고 있습니다. :) 프록시 스크립트 정보 : API 서버에서 스크립트를 호스트하면 Ajax의 헤더와 함께 요청을 보내야합니다. 따라서 스크립트는 '요청'페이지와 동일한 서버에 있습니다. (=^클라이언트)? 이 방법 IE는 헤더, 바디 등을 보낼 수 있습니다. 프록시는 api-server (curl)에 요청을 보냅니 까? –

2

IE의 XDomainRequest는 사용자 정의 헤더를 설정할 수 없습니다. 여기 # 3 항목을 참조하십시오. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest 객체는 인증 된 요청을하기 어려운 지점까지 잠겨 있습니다.

+1

그러나 해결 방법이 있어야합니다!?! 아니면 내가 생각했던 것보다 IE가 더 나빴나요? –

+1

사용자 지정 헤더 또는 쿠키를 설정할 수 없으면 인증 된 요청을 만드는 좋은 방법이 아닌 것 같습니다. 인증 매개 변수를 질의 매개 변수로 전달할 수 있지만 (OAuth2 사용자 에이전트 흐름에서 허용), 보안되지 않을 수 있으며 SSL을 통해 수행되어야합니다. 죄송합니다, 아마도 다른 사람이 더 좋은 답변을 가지고 있습니다 :-) – monsur

+0

다른 도메인 사이트에 로그인하는 것이 필요하다고 생각했습니다. (따라서 적절한 세션 쿠키와 인증 헤더를 설정). 그런 다음 XDomainRequest가 설정 한 세션을 사용합니까? 나는 틀릴지도 모른다. –

관련 문제