Internet Explorer 8 Beta 의 AJAX 업데이트

 

 

 Internet Explorer 8 의 AJAX 분야 개선에 집중하고 있는 프로그램 관리자 Sunava Dutta 입니다. Internet Explorer 8 Beta 2 가 공개되어,  우리가 실시한 일련의 기능 확장에 대해 몇가지 소개하고 싶습니다. 3월에 a set of developer experiences (영어) 에서 클라이언트 사이드의 크로스 도메인 데이터 액세스, 로컬 저장소, 그리고 다수 상태를 관리하는 탐색기인 AJAX 에 관한 시나리오를 다룬 것을 되돌아 보면, 여러가지가 생각날지도 모릅니다.

좋은 소식은 우리 팀은 Internet Explorer 8 Beta 1 때에서, 개발자 피드백( 진심으로 감사합니다)과 현재 업데이트의 W3C 표준화 드래프트(대부분의 구현이 이것을 기준으로 하거나  검토용으로 제출된 상태)를 기본으로 우리의 구현을 조정, 업데이트하기 위한 대처를 계속하고 있습니다. 여기에서 만족하지 않고, 우리는 개발자 대상의 몇개의 새로운 기능을 추가했습니다. 자세한 내용은 잠시 후에 말씀드리겠습니다. 

우리가 선택한 Beta 2 의 AJAX 업데이트는 브라우저 간의 호환성 유지하는 것과 개발자가 가장 도움이 된다고 생각하는 기능 집합에 중점을 두었습니다. 어려운 이야기는 여기까지로 하고, 이번 향상된 점을 보여드리겠습니다. 

XDomainRequest (XDR) (영어)

이것은 크로스 도메인 호출을 안전하고 간단하게 하기 위해서 만들어낸 개체입니다. 부주한 크로스 도메인 액세스 기회를 줄이기 위해, 이 개체는 클라이언트 스크립트와 서버에서의 크로스 도메인 호출을 허가 하기 위한 명시적인 확인을 요청합니다. 또한 매쉬 업 페이지내에 타사의 스크립트를 직접 병합하는 위험한 방식을 취하지 않도록 합니다. 이 방법은 타사에 DOM 에 모든 권한을 주게 되기 때문에 위험합니다. 이것에는 또한 클라이언트측의 성능이 개선되어 서버를 프록시화 할 필요가 없어, 서버 유지비를 절감할 수 있는 추가적인 혜택도 있습니다. 

Beta 1 개발에서는 cross site XMLHttpRequest (영어) 와 액세스 제어프레임 워크를 이용한 타사의 크로스 도메인 액세스와 관련한 많은 보안적인 현안 사항이 있었습니다. Beta 1 공개 후, W3C 의 액세스 제어프레임 워크에 관한 서버측의 경험과 보안을 개선하기 위해,다른 브라우저나 W3C 의 face-to-face 미팅 출석자와 작업 (영어) 할 기회가 있었습니다. 그 결과, 우리는 XDR 를 클라이언트측에서 공개되는 타사의 데이터를 익명으로 요청하기 위한 액세스 제어에 관한 섹션의 문법과 명령이 명확하게 근거하도록  업데이트 했습니다(섹션5.1.3 in the Access Control Process Model (영어)) .

Beta 1에서 XDR이 업데이트되어, Internet Explorer 8에서는 원래 헤더를 원래 요청한 직렬화(Serialization) 화 된 값과 함께 송신해서 도메인 서버에 데이터의 요청이 가능하게 되었습니다. IE8 Beta 2 는 Beta 1 의 XDomainRequestAllowed: 1개 헤더에 의한 허가를 대신하고, 서버가 Access-Control-Allow-Origin: * 을 포함한 응답을 했을 경우에만 응답을 반환합니다. 다른 변화는 open 메서드에서 상대경로를 지원하는 것으로, 송신 앞을 HTTP 와 HTTPS 로 한정한 액세스 제한이 포함됩니다.

Cross-document Messaging (XDM) (영어)

Cross-document messaging (영어) 은 또 하나 강력한 크로스 도메인 기능이라는 것에 대해 이전 블로그에 썼습니다 .원격 웹 서비스로 백 엔드 리퀘스트를 만드는 것이 아니라 이것은 동일한 사이트의 원래 정책을 위반하는 위험없이 Iframe 기반 " gadget" 이나 parents와 직접 통신하는 개체를 허용합니다. 이것에는 성능과 안정성이 향상되어, 개발자에서는 브라우저 사이의 동작 차이나 바람직하지 않은 사이드 효과에의 대책을 강구할 필요가 없다는 우위성도 있습니다. 이 방법은 한층 더 여러분의 페이지에 타사제품의 스크립트를 묻을 필요없이, 민감한 정보(예를 들면 소셜 네트워크의 프로파일에 관한 정보등)를 동의없이 타사에 공개하는 잠재적인 정보 누설의 취약성을 감소시킵니다.

Beta 2 의 업데이트에는 HTML 5.0 Draft의 업데이트에 적절히 부합하기 위해서 onmessage 처리기를 document 개체에서window 개체로 이동하는 일도 포함됩니다.

window.attachEvent("onmessage", HandleMessage);

e.URI 를 직렬화(Serialization) 화 된 " 스키마" + " 호스트" + " 기본값이 아닌 포트" 인 e.origin 으로 바꾸기 했습니다. 이것은 URI 가 잠재적으로 민감한 정보를 수신하는 사람이 접근하는 것을 승낙하거나 거절하는 것을  결정할 필요가 없는 원래 사이트에서 옮기기 시작할 수 있는 것에 비교라고 훨씬 안전합니다.

if (e.origin == 'https://www.contoso.com')
        {
               // process message text     
        }

마지막으로 HTML 5.0 Draft나 postMessage 메서드의 targetOrigin 매개 변수를 필수 매개 변수로 하도록 명하고 있습니다. 이것은 본래 <URL> 또는 와일드카드 <*> 를 지정하여 메시지 송신자에게  명시적인 통지가 요청되어, 개발자가 실수를 줄여줍니다.

frameOther.postMessage("This is a message", "https://example.com");

DOM 저장소

현재, 웹 페이지는 로컬 컴퓨터의 데이터를 보관하기 위해 document.cookie 속성을 이용하고 있습니다. cookie 능력은 도메인마다 50 개 조의 키와 값 집합만 보관할 수 밖에 없습니다. 또한 Cookie 의 프로그래밍모델은 다루기 어렵고, 데이터를 추출하기 위해 Cookie 문자열 전체를 분석해야 합니다. Cookie 는 4KB 까지의 체크를 리퀘스트 헤더에 포함하여 송신하는 것으로, 서버가 클라이언트의 전환 상황이나 변경을 기록하기 위해서 매우 유용했지만, Internet Explorer 8 은 클라이언트의 지속적 데이터를 포함한 시나리오와 다른 탭 세션의 명시적인 유지를 위한, 보다 뛰어난 대안을 제시합니다. W3C 의 HTML 5 DOM 저장소 개체는 보다 간단하게 키와 값 쌍의 문자열데이터를 위한, 글로벌 저장소 모델과 세션 저장소 모델을 제공합니다. 웹 사이트는 탭이 존재하고 있는 동안, 또는 사용자 또는 웹 사이트가 폐기할 때까지, 데이터를 저장 할 수 있습니다.

Beta 2 의 업데이트에는 영속적인 globalStorage 특성의 이름을 localStorage 로 변경하여, localStorage 기술에 도메인 지정을 할 필요가 없습니다.

// Store a key-value pair.
localStorage.setItem("FirstName","Sunava");

마지막으로, 저장소 변경시에 반환하는 onstorage HTML 5.0 이벤트 업데이트 지원 향상도 포함했습니다. 로컬 저장소로 변경이 더해지면 URI 가 돌려주어지게 되어, 페이지 처리기는 원래의 윈도우에 원본을 제공할 뿐만 아니라, 저장소 영역에 추가된처리를 누가 실행했는지를 알 수 있습니다. 더 좋은 소식은 HTML 5.0 워크 그룹이 Beta 1 에 탑재됐던 clear 메서드를 드래프트에 도입했습니다. 이것은 기본적으로 스크립트에 의해서, 저장소 영역에 있는 액세스 가능한 모든 아이템을 키마다 반복없이 삭제할 수 있습니다.

Connectivity (접속성) 이벤트

navigator.onLine 속성과 online / offline 이벤트 는 현재, Windows XP에서도 Windows Vista 와 같이 동작합니다. 이 동작은 결코 사소한 것은 아니고, Windows XP 에서의 접속 확인 기능은 Windows Vista 와 같이 진보된 것은 아니었습니다. 그렇다 해도 이것은 개발자에서 매우 유익한 것으로, 우리는 이제 OS 차이를 걱정할 필요가 없다고 믿고 있습니다. connectivity (접속성) 이벤트 가치는 네트워크가 중단 되었을 때, 데이터가 캐시 되는 localstorage 와 함께 사용되었을 경우, 특히 매력적입니다.

XMLHttpRequest

XDomainRequest 개체를 IE8 에 도입할 때, 동일한 도메인내의 통신에서 가장 중요한 개체인 XMLHttpRequest 의 연속적인 최적화와 개선에서 주의했습니다. Beta 1 공개 후, 우리는 의욕적으로 안정성에 관한 몇가지 버그 수정과 Web Apps Working Group 와 함께 드래프트 사양 명시화와 개선 및 그것에 준거하여 W3C 공개 테스트에 집중했습니다. 개발자의 편리성을 위해서 Beta 1에서 도입된 timeout method 은 현재 XMLHttpRequest 사양에  채택 여부를 평가하고 있습니다.

// Sets timeout after open to two seconds.
xhr.timeout             = 2000;

ToStaticHTML , JSON 에, JSON에서

타사로부터 XDomainRequest 또는 크로스 문서 메시징을 이용한 문자열이 되돌아 왔을 경우, 어떻게 처리합니까? 스크립트 인젝션과 크로스 사이트 스크립팅 (XSS ) 공격이 증가하고 있는 지금, 세계에는 안전한 파서로서 이것을 빠져 나가게 하는 선택사항이 해결책으로 등장했습니다. Eric Lawrence 의 IE8 의 보안에 대한 글 Comprehensive Protection 에서 세부 사항을 설명한 toStaticHTML 은 잠재적으로 실행될 가능성이 있는 컨텐츠를 없애는 것에 의해서, 문자열을 위협하지 않게 하는 강력한 수단을 제공합니다.

//Calling:
window.toStaticHTML("This is some <b>HTML</b> with embedded script following...<script>alert('bang!');</script>!");

//will return:
This is some <b>HTML</b> with embedded script following... !

또한 Internet Explorer 8 Beta 2 의 JSON.stringifyJSON.parse 메서드는 Javascript 에 의한 비네이티브인 serializers 와 deserializers에 대해서, 성능 강화를 제공합니다. 우리의 구현은 Douglas Crockford 의 json2.jsAPI 를 이용한 네이티브 JSON 핸들링인 ECMAScript 3.1 proposal 에 근거합니다. 네이티브의 성능적인 장점을 추가하여, 일반적이지만 임의의 스크립트 함수 실행을 허가할 가능성이 있는 위험한 JSON 개체의 복원 방법인 eval() 메서드의 안전한 대체 방법을 제공합니다.

그 외의 기능

AJAX 탐색은 Beta 1에서 다소 변경되었습니다. Beta 2 의 몇가지 새로운 코드견본을 생성하여, MSDN에 문서화했습니다. 호스트의 connection parallelism (접속의 병렬화)도 몇가지 조정되어,  앞으로 다시 글을 쓸 예정입니다.

요약

개발자에게 AJAX 경험이 보다 좋은 것이 되기 위해, 우리는 표준화에 전념하고 있습니다. Beta 2 구현에서 변화된 점이 이미 말한 대로입니다. 사양 초안의 진전을 포함하여 다양한 사안에서 W3C 의 멤버와의 제휴를  지속하고 있습니다. 개발자들이 이러한 기능이 채택받을 수 있는 것을 우선 과제로 하여, 이러한 기능을 통합한 사이트 마이그레이션 지원에 집중하고 있습니다. AJAX 기능 집합의 샘플코드는 IE8 AJAX Beta 2 Hands on Labs 을 참조하십시오. 마지막으로 AJAX 핵심 개발 팀원들은 어떤 사람인지 궁금해하시는 분들을 위해서 사진을 게재합니다.

그럼 기대해 주세요.!!

Sunava Dutta
Program Manager

ajaxteam2

상단 왼쪽부터 Sharath Udupa (개발자), Gideon Cohn (테스터) , Zhenbin Xu (AJAX 시니어 개발자) , Alex Kuang (테스터)  및 Karen Anderson (테스터)

하단 왼쪽에서 Sunava Dutta (프로그램 관리자)와 Ahmed Kamel (개발자)

이 사진에는 없지만,  Francoise Louw (테스터) , Adrian Bateman (프로그램 관리자)  및 Gaurav Seth (개발자)

 

* 이 글은 Internet Explorer 개발 팀 블로그 (영어)의 번역 문서입니다. 이 글에 포함된 정보는 Internet Explorer 개발 팀 블로그 (영어)가 생성된 시점의 내용으로, 제품의 사양이나 기능이 보장되는 것은 아닙니다. 이 글에 포함된 정보의 이용은 사용 조건을 참조해 주세요. 또, 이 글 게재 시점에서 Internet Explorer 개발 팀 블로그 (영어)의 내용이 변경 될 수 도 있습니다. 최신 정보는 Internet Explorer 개발 팀 블로그 (영어)를 참조하십시오.

영문 원본 : Updates for AJAX in IE8 Beta 2

 

업데이트 일자: 2008 년 10 월 6 일