IE 8,9 Crossdomain 통신시 제한사항

  • IE9에서 Crossdomain 통신시 제한사항

    IE8, IE9는 CSRF(Cross-Site Request Forgery)공격을 방어하기 위해 XDomainRequest 객체를 사용하여 기능을 제한.
    (IE10부터 XMLHTTPRequest를 사용한 CORS(Cross-Origin Resource Sharing) 지원)

    IE8, IE9를 지원하기 위해서는 Sever - Client 통신간 XDomainRequest 객체에서 허용한 아래의 규약만 사용해야한다.

    1. HTTP, HTTPS 프로토콜만 사용가능
    2. GET, POST 만 사용가능
    3. 요청시 Custom Header 사용 불가
    4. Content-Type은 text/plain만 지원
    5. Response Header의 Set-Cookie는 무시됨
    6. Request시 동일한 scheme을 사용해야 함
  • 검색을 통해 나오는 Crossdomain 해결 방법
    jQuery에서 XDomainRequest(IE9)를 지원을 포기했기 때문에 Cross Domain으로 ajax 통신을 할 경우 IE에서 분기 처리하여 XDomainRequest의 제약조건 하에서 통신을 해야한다
    검색해서 나오는 Javascript 해결방법은 내부에서 XMLHttpRequest객체 대신 XDomainRequest 객체를 생성해서 통신을 하기 때문에 위와 같은 제한 사항들이 그대로 적용된다.
  • IE9에서 Crossdomain 통신이 잘되는 경우는 환경설정 값을 바꾼 경우다.

    IE9에서 XMLHttpRequest 객체가 구현이 되어 있고 생성도 된다.

    그러나 send시 엑세스 거부된다.

    IE9에서 설정을 변경할 시 XMLHttpRequest객체를 사용할 수 있어 제한사항이 없어진다.

    그러나 이방법은 사용자가 IE9 설정을 변경해야 하기 때문에 IE9대응이라 보기가 힘들다.

    img

  • Naver, Pikecast, 직방 분석 결과

    Naver, Pikicast는 모두 1개의 도메인으로 API를 제공한다.
    Crossdomain으로 통신을 하는 직방은 IE9에서 기능 동작이 동작하지 않는다.
    jquery cross-domain 관련 Library를 사용한것으로 보이지만 어차피 이것도 내부적으로 XDomainRequest로 통신을 하기 때문에 제한사항을 피할 수 없다.

  • JSONP 사용시 제한사항
    JSONP 요청은 GET요청만 된다
    JSONP 요청시 Browser의 UI Thread가 멈추게 되어 인터렉션 부분의 개발이 어렵다.
    JSONP는 동기 처리가 되지 않는다. jQuery의 경우 async:false 옵션이 되지 않는다.
  • Internet Explorer 9 상세 내용
    - Initial release: 2011-03-14
    - Stable release: 2016-01-12 9.0.46 (v9.0.8112.16421)
    - Operation system: Windows 7, Windows Vista Service Pack2, Windows Server 2008 Service Pack2, Windows Server 2008 R2, Windows Phone 7.5
    - Javascript Engines Tridnet 5.0, Chakra