+ All Categories
Home > Documents > T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역)...

T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역)...

Date post: 02-Jun-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
35
T T A S t a n d a r d 정보통신단체표준(국문표준) TTAK.OT-10.0381 제정일: 2015 년 12 월 16 일 웹에서의 서버 전송 이벤트 Server-Sent Events
Transcript
Page 1: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

T T

A S

t a n

d a

r d

정보통신단체표준(국문표준)

TTAK.OT-10.0381 제정일: 2015 년 12 월 16 일

웹에서의 서버 전송 이벤트

Server-Sent Events

Page 2: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 제정일: 2015 년 12 월 16 일

웹에서의 서버 전송 이벤트

Server-Sent Events

본 문서에 대한 저작권은 TTA 에 있으며, TTA 와 사전 협의 없이 이 문서의 전체 또는 일부를

상업적 목적으로 복제 또는 배포해서는 안 됩니다.

Copyrightⓒ Telecommunications Technology Association 2015. All Rights Reserved.

Page 3: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 i

서 문

1. 표준의 목적

본 표준은 웹 환경에서 유용한 서버로부터 푸시 알람을 받기 위한 HTTP 연결을 오픈

하기 위한 API-서버 전송 이벤트(Server-Sent Events)에 대해 정의한다. 본 규격은

서버가 웹 페이지를 자동적으로 업데이트 될 수 있도록 해주는 기술로, 기존의 페이지

업데이트를 위해 사용하던 폴링 매커니즘과 비교해 배터리 소모 및 네트워크 부하를

줄여주고 메시지 지연이 최소화 할 수 있어 모바일 웹 환경에 매우 유용하다. 따라서 본

표준에서는 모바일 웹 환경에 유용한 서버 전송 이벤트에 대해 정의하고, 푸시 이벤트

처리 모델, 이벤트 스트림 분석과 해석에 대한 명세 가이드 제공을 통해, 응용 서비스

제공에 활용하고자 한다.

2. 주요 내용 요약

본 표준은 웹 환경에서 서버 푸시를 구현하기 위한 HTTP 연결(Connection)을 열긴

위한 인터페이스 서버 전송 이벤트를 정의한다.

첫째로, HTTP 통해 웹 페이지에서 서버 푸시 서비스를 가능하게 하는 EventSource

인터페이스 정의하고, 두 번째로 이벤트 처리 모델(Processing Model), 이벤트 스트림

파싱과 해석에 대한 명세를 통해 유저 에이전트 구현 가이드 제공한다.

3. 표준 적용 산업 분야 및 산업에 미치는 영향

본 표준은 배터리 소모 및 네트워크 부하를 줄인 푸시 서비스(Push Service)를

포함하는 모바일 환경에 적합한 웹 애플리케이션 및 이를 지원하는 유저 에이전트 구현

가이드 제공한다. 이를 통해 모바일 웹 환경에서 푸시 서비스를 이용한 응용 서비스가

활성화되도록 기여할 것이다.

4. 참조 표준(권고)

4.1. 국외 표준(권고)

- W3C Server Sent Event, W3C Recommendation, 2015.02.

http://www.w3.org/TR/eventsource/

Page 4: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 ii

4.2. 국내 표준

- 해당 사항 없음.

5. 참조 표준(권고)과의 비교

5.1. 참조 표준(권고)과의 관련성

본 표준은 W3C 의 서버 전송 이벤트(Server-Sent Events) 표준을 번역하여

작성되었다.

5.2. 참조한 표준(권고)과 본 표준의 비교표

TTAK.OT-10.0381 참조 표준 비고

1. 개요 1. Introduction 동일(번역)

2. 표준의 구성 및 범위 추가

3. 용어 추가

4. EventSource 인터페이스 4. The EventSource interface 동일(번역)

5. 프로세싱 모델 5. Processing model 동일(번역)

6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역)

7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

8. 노트 8. Notes 동일(번역)

9. 무연결 푸시와 다른 특징들 9. Connectionless push and other

features 동일(번역)

10. 가비지 컬렉션 10. Garbage collection 동일(번역)

11. IANA 고려 사항 11. IANA considerations 동일(번역)

참고 문헌 References 동일(번역)

6. 지식 재산권 관련 사항

본 표준의 ‘지식 재산권 확약서’ 제출 현황은 TTA 웹사이트에서 확인할 수 있다.

※본 표준을 이용하는 자는 이용함에 있어 지식 재산권이 포함되어 있을 수 있으므로,

확인 후 이용한다.

※본 표준과 관련하여 접수된 확약서 이외에도 지식 재산권이 존재할 수 있다.

Page 5: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 iii

7. 시험 인증 관련 사항

7.1. 시험 인증 대상 여부

- 해당 사항 없음.

7.2. 시험 표준 제정 현황

- 해당 사항 없음.

8. 표준의 이력 정보

8.1. 표준의 이력

판수 제정‧개정일 제정‧개정 내역

제 1 판 2015.12.16. 제정

TTAK.OT-10.0381

8.2. 주요 개정 사항

- 해당 사항 없음.

Page 6: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 iv

Preface

1. Purpose of Standard

The standard is to enable servers to push data to Web pages over HTTP or using

dedicated server-push protocols, the standard introduces the EventSource interface.

2. Summary of Contents

The standard defines an API for opening an HTTP connection for receiving push

notifications from a server in the form of DOM events. The API is designed such that it

can be extended to work with other push notification schemes such as Push SMS.

3. Applicable Fields of Industry and its Effect

We can expect the web industry activation through the web application development

from this standard.

4. Reference Standards(Recommendations)

4.1. International Standard(Recommendations)

- None

4.2. Domestic Standards

- None

5. Relationship to Reference Standards(Recommendations)

5.1. Relationship of Reference Standards(Recommendations)

- None

5.2. Differences between Reference Standard(Recommendation) and this Standard

Page 7: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 v

TTAK.OT-10.0381 Reference Standards Remarks

1. 개요 1. Introduction same(translated)

2. 표준의 구성 및 범위 added

3. 용어 added

4. EventSource 인터페이스 4. The EventSource interface same(translated)

5. 프로세싱 모델 5. Processing model same(translated)

6. 이벤트 스트림 구문 분석 6. Parsing an event stream same(translated)

7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream same(translated)

8. 노트 8. Notes same(translated)

9. 무연결 푸시와 다른 특징들 9. Connectionless push and other

features

same(translated)

10. 가비지 컬렉션 10. Garbage collection same(translated)

11. IANA 고려 사항 11. IANA considerations same(translated)

참고 문헌 References same(translated)

6. Statement of Intellectual Property Rights

IPRs related to the present document may have been declared to TTA. The

information pertaining to these IPRs, if any, is available on the TTA Website.

No guarantee can be given as to the existence of other IPRs not referenced on the TTA

website.

And, please make sure to check before applying the standard.

7. Statement of Testing and Certification

7.1. Object of Testing and Certification

- None

7.2. Standards of Testing and Certification

- None

8. History of Standard

Page 8: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 vi

8.1. Change History

Edition Issued date Outline

The 1st edition 2015.12.16. Established

TTAK.OT-10.0381

8.2. Revisions

- None

Page 9: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 vii

목 차

1. 개요 ································································································ 1

2. 표준의 구성 및 범위 ············································································ 2

3. 참조 표준(권고) ··················································································· 3

4. 용어 정의 및 약어 ················································································ 3

4.1. 서버 전송 이벤트 ··········································································· 3

4.2. DOM ··························································································· 3

4.3. IDL(Interface Description Language) ···················································· 3

4.4. 웹 애플리케이션 ············································································· 4

4.5. 사용자 에이전트 ············································································· 4

4.6. MIME(Multipurpose Internet Mail Extensions) ·········································· 4

4.7. CORS(Cross Origin Resource Sharing) ·················································· 4

4.8. 페치 ··························································································· 5

4.9. 가비지 콜렉션 ··············································································· 5

5. 이벤트 소스 인터페이스 ········································································· 6

6. 프로세싱 모델 ····················································································· 8

7. 이벤트 스트림 구문 분석 ······································································ 10

8. 이벤트 스트림 해석 ············································································ 11

9. 노트 ······························································································· 16

10. 비접속 푸시와 추가 기능 ···································································· 16

11. 가비지 콜렉션 ················································································· 17

12. IANA 고려 사항················································································· 18

Page 10: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 viii

12.1. Text/Event-Stream ······································································ 18

12.2. Last-Event-ID ··········································································· 20

부록 ∣. 참고 문헌 ·················································································· 20

Page 11: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 ix

Contents

1. Introduction ······················································································· 1

2. Constitution and Scope ········································································· 2

3. Reference Standards(Recommendations) ···················································· 3

4. Terms Definitions and Abbreviations ·························································· 3

4.1. Server-Sent Events ········································································· 3

4.2. DOM ··························································································· 3

4.3. IDL(Interface Description Language) ···················································· 3

4.4. Web Application ············································································· 4

4.5. User Agent ··················································································· 4

4.6. MIME(Multipurpose Internet Mail Extensions) ·········································· 4

4.7. CORS(Cross Origin Resource Sharing) ·················································· 4

4.8. Fetch ·························································································· 5

4.9. Garbage Collection ········································································· 5

5. EventSource Interface ··········································································· 6

6. Processing Model················································································· 8

7. Parsing an Event Stream ······································································ 10

8. Interpreting an Event Stream ·································································· 11

9. Notes ···························································································· 16

10. Connectionless Push and Other Features ················································· 16

11. Garbage Collection ··········································································· 17

Page 12: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 x

12. Internet Assigned Numbers Authority Considerations ··································· 18

12.1. Text/Event-Stream ······································································ 18

12.2. Last-Event-ID ··········································································· 20

Appendix ∣. References ·········································································· 20

Page 13: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 1

웹에서의 서버 전송 이벤트

(Server-Sent Events)

1. 개요

본 표준은 웹 환경에서 유용한 서버로부터 푸시(Push) 알림을 받기 위한 서버 전송

이벤트(Server-Sent Events)에 대해 정의한다. 서버 전송 이벤트는 서버가 웹 페이지를

자동적으로 업데이트 할 수 있도록 해주는 기술로, 기존의 페이지 업데이트를 위해

사용하던 폴링 매커니즘과 비교해 배터리 소모 및 네트워크 부하를 줄여주고 메시지

지연이 최소화 할 수 있어 모바일 웹 환경에 매우 유용하다.

본 규격에서는 DOM 이벤트 폼(form)에서 서버로부터 푸시 알림을 받기 위해 HTTP

연결을 시작(Open)하는 API 에 대해 정의하며, 해당 API 는 Push SMS 와 같은 다른 푸시

알림과 함께 확장되어 동작할 수 있도록 설계되었다.

전용 서버 푸시 프로토콜을 사용하거나, HTTP 를 이용해 웹 페이지에 데이터를

푸시하기 위한 서버를 실행하기 위해, 본 규격은 EventSource 인터페이스를 정의한다.

EventSource 객체를 생성하고, 이벤트 리스너를 등록하기 위한 API 구성은 아래와

같다.

var source = new EventSource('updates.cgi');

source.onmessage = function (event) {

alert(event.data);

};

서버 측에서, 스크립트(updates.cgi)는 text/event-stream MIME(Multipurpose Internet

Mail Extensions) 타입으로 아래의 형식의 메시지를 보낸다.

data: This is the first message.

data: This is the second message, it

data: has two lines.

data: This is the third message.

저작자는 다른 이벤트 타입을 이용해 이벤트를 분리할 수 있다. 다음은 “add”와

“remove” 두 개의 이벤트 타입을 갖는 스트림이다.

Page 14: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 2

event: add

data: 73857293

event: remove

data: 2153

event: add

data: 113411

스트림을 처리하는 스크립트는 아래와 같다. (addHandler 와 removeHandler 함수가

하나의 인자를 갖는 이벤트)

var source = new EventSource('updates.cgi');

source.addEventListener('add', addHandler, false);

source.addEventListener('remove', removeHandler, false);

기본 이벤트 타입은 “message”이다.

이벤트 스트림 요청은 일반적인 HTTP 요청처럼 HTTP 301 과 307 을 사용해 리-

다이렉트(Redirect, 다른 주소로 보냄)될 수 있다. 클라이언트는 연결이 종료되면, 연결을

새로 설정한다; 클라이언트는 HTTP 204 No Content Response Code(콘텐트 응답 없음

코드)를 이용해 재연결을 멈추도록 할 수 있다.

XMLHttpRequest 나 iframe 을 사용해 구현하지 않고, 이 API 를 사용하면 사용자

에이전트는 네크워크 리소스를 보다 효율적으로 사용할 수 있다. 단, 사전에 사용자

에이전트 구현자나 네트워크가 사전에 조정이 가능한 경우에 한정한다. 여러 가지 장점

중, 이는 휴대용 기기에서 배터리 수명을 절약할 수 있다. 관련 내용은 아래 비접속

푸시(Connectionless push)에서 자세히 얘기 될 것이다.

2. 표준의 구성 및 범위

본 표준은 웹 환경에서 서버 푸시를 구현하기 위한 서버 전송 이벤트를 정의한다. 본

표준은 W3C 웹 애플리케이션 워킹 그룹에서 진행하고 있는 서버 전송 이벤트(Server-

Sent Events)규격을 따르며, 문서의 구성은 아래와 같다.

첫째, HTTP 프로토콜을 통해 웹 페이지에서 서버 푸시 서비스를 가능하게 하는

EventSource 인터페이스 정의하고, 둘째로 전달된 이벤트를 위한 처리 모델(Processing

Page 15: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 3

Model), 이벤트 스트림 구문 분석(Parsing)과 해석에 대한 명세를 통해 유저 에이전트

구현 가이드를 제공하도록 한다. 추가적으로, 비접속 푸시와 추가 기능, 가비지

콜렉션(Garbage collection) 기능에 대해 정의한다.

3. 참조 표준(권고)

3.1. 국외 표준(권고)

- W3C Server Sent Event, W3C Recommendation, 2015.02.

http://www.w3.org/TR/eventsource/

3.2. 국내 표준

- 해당 사항 없음.

4. 용어 정의 및 약어

4.1. 서버 전송 이벤트(Server-Sent Events)

서버 전송 이벤트는 웹 페이지에서 서버 푸시를 구현하기 위한 매커니즘으로,

브라우저 등 사용자 에이전트가 서버로부터 지속적으로 데이터를 스트림하는

상태가 되는 것을 말한다. 즉 서버에서 클라이언트로 전달할 이벤트가 발생한 경우,

이를 즉시 전달할 수 있다.

4.2. DOM

웹 응용 프로그램에서 스크립트를 사용할 수 있도록 하는 API 세트(set)으로, DOM

코어 규격에 정의된 실제 문서 객체나 노드 객체를 의미하는 것은 아니다.

4.3. IDL(Interface Description Language)

인터페이스 정의 언어 IDL(Interface Description Language 또는 Interface

Definition Language)은 소프트웨어 컴포넌트의 인터페이스를 묘사하기 위한 명세

언어이다. IDL 은 어느 한 언어에 국한되지 않는 언어중립적인 방법으로

Page 16: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 4

인터페이스를 표현함으로써, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트

사이의 통신을 가능하게 한다. 예를 들면, C++을 사용하여 작성한 컴포넌트와

자바를 사용한 컴포넌트 사이에서 국한되지 않고, 인터페이스를 묘사하는 개념이다.

4.4. 웹 애플리케이션

웹 애플리케이션이란 인터넷 또는 인트라넷과 같은 네트워크를 통해 액세스되는

응용 프로그램을 말한다. 주로 웹 브라우저 내 또는 웹 브라우저가 제어 가능한

환경에서 실행되며, 자바스크립트, 자바 애플릿 등과 같은 웹 브라우저가 실행

가능한 프로그래밍 언어를 사용하여 HTML 과 같은 마크업 언어를 결합하여

만들어진다.

4.5. 사용자 에이전트(User Agent)

사용자를 대신하여 일을 수행하는 소프트웨어 에이전트로 이용자가 웹 페이지나

콘텐트를 소비하는 데 쓰는 웹 브라우저나 멀티미디어 재생기 같은 프로그램 등을

말한다. 본 문서에서는 웹 콘텐트를 위한 웹 브라우저, 웹 런타임 엔진, e 메일

클라이언트 등을 가리킨다.

4.6. MIME(Multipurpose Internet Mail Extensions)

MIME 은 ASCII 가 아닌 문자 인코딩을 이용해 영어가 아닌 다른 언어로 된

전자우편을 보낼 수 있는 방식을 정의한다. 그리고, 그림, 음악, 영화, 컴퓨터

프로그램과 같은 8 비트 바이너리 파일을 전자우편으로 보낼 수 있도록 한다.

MIME 은 전자우편과 비슷한 형식의 메시지를 사용하는 HTTP 와 같은 통신

프로토콜의 기본 구성 요소이다. 메시지를 MIME 형식으로 변환하는 것은 전자우편

프로그램이나 서버 상에서 자동으로 이루어진다.

MIME 은 확장이 가능하며. MIME 표준은 새로운 content-type 과 또 다른 MIME

속성 값을 등록할 수 있는 방법을 정의하고 있다. [출처: 위키백과]

4.7. CORS(Cross Origin Resource Sharing)

Page 17: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 5

CORS 는 웹 브라우저를 통해 서로 웹 서버에서 다른 도메인간 리소스 접근을

허용하도록 하는 웹 브라우저 기술 표준을 말한다. CORS 는 서버의 리소스 접근을

허용해주는 새로운 HTTP 헤더를 추가하는 방식으로 동작한다.

Access-Control-Allow-Origin: *

위와 같은 방식은 모든 사이트에 대해 접근을 허용하면, 아래는 특정 도메인에

대해서만 리소스 접근을 허용한다.

Access-Control-Allow-Origin: http://example.com:8080 http://foo.example.com

CORS 를 통해서, 기존에 같은 도메인에 한 해서만 가능했던 Ajax 통신이 가능하다.

(그림 4-1) CORS (출처: http://software.dzhuvinov.com/cors-filter.html)

4.8. 페치(Fetch)

명령 레지스터에 들어 있는 명령을 읽고 대상이 되는 어드레스를 찾아 명령을

실행하는 절차. 본 문서에서는 명령 혹은 태스크 수행을 위해 필요한 데이터를

기억장치에서 읽고, 받아드린 데이터를 해석하는 부분으로 전송하기 전까지의

동작을 말한다.

4.9. 가비지 콜렉션(Garbage Collection)

기억영역은 일정한 단위로 할당/해방의 제어가 이루어진다. 이 제어에 의한 할당과

해방을 반복하면 확보 하는 크기가 랜덤(random)인 것으로부터 점차로

무효영역(無效領域: 가비지)이 증대하여 정보수용효율이 저하되어 간다. 특히, 자기

Page 18: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 6

디스크, 자기 드럼 등, 시스템 공통의 직접 액세스 장치상의 파일 영역에 있어서의

상기 문제를 해결하기 위한 무효영역 해제나 파일 재배치를 하기 위한 처리 기능을

가비지 콜렉션이라 하며, 해당기능을 가지는 프로그램을 가비지 콜렉터(garbage

collector)라고 한다.

5. 이벤트 소스 인터페이스(The EventSource Interface)

[IDL: Event Source interface]

IDL[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict)]

interface EventSource : EventTarget {

readonly attribute DOMString url;

readonly attribute boolean withCredentials;

// ready state

const unsigned short CONNECTING = 0;

const unsigned short OPEN = 1;

const unsigned short CLOSED = 2;

readonly attribute unsigned short readyState;

// networking

[TreatNonCallableAsNull] attribute Function? onopen;

[TreatNonCallableAsNull] attribute Function? onmessage;

[TreatNonCallableAsNull] attribute Function? onerror;

void close();

};

dictionary EventSourceInit {

boolean withCredentials = false;

};

EventSource() 생성자 하나 혹은 두 개의 인자를 갖는다. 첫 번째 인자는 연결할

URL 을 나타낸다. 두 번째 인자가 존재하는 경우, EventSourceInit dictionary 형에서

설정을 지정한다. EventSource() 생성자가 호출될 때, 사용자 에이전트는 다음 절차대로

동작해야 한다:

1. Entry script 의 base URL 항목과 연관하여, 첫 번째 인자에 정의된 URL 을

분석한다.

Page 19: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 7

2. 이전 단계가 실패하면, SyntaxError 예외를 발생한다.

3. 새로운 EventSource 객체를 생성한다.

4. CORS(Cross Origin Resource Sharing) mode 를 Anonymous 로 설정한다.

5. 만약 두 번째 인자가 존재하고, withCredentials dictionary 멤버가 true 값을

가지면, CORS mode 를 Use Credentials 로 바꾸고, 새로운 EventSource

객체의 withCredentials 속성을 true 로 초기화 한다.

6. EventSource 객체를 반환하고, 위 절차를 백그라운드로 진행한다. (스크립트

멈춤 없이 진행한다.)

7. 아래 설명된 대로, mode 를 CORS mode 로 하여 absolute URL 의 결과인

잠재적인 CORS 활성화를 페치(potentially CORS-enabled fetch)하고, 이

방식으로 얻은 리소스를 처리한다.

Note: CORS 에서 사용되는 fetching 알고리즘의 정의는 브라우저가 이미 주어진

absolute URL 을 통해 인식된 리소스를 페치한 경우, 새로운 연결을 설정하는

대신, 이미 설정된 연결을 재 사용 될 수 있는 것을 말한다. 이 경우, 해당

시점까지 받은 모든 메시지는 수행되어야 한다.

스크립트 전역 객체(script's global object)가 Window 객체이거나, WorkerUtils

인터페이스를 구현한 경우, 위 생성자는 반드시 존재해야 한다.

url 속성은 생성자에게 전달된 값을 분석한 결과인 절대주소(absolute URL)을 반환한다.

withCredentials 속성은 마지막으로 초기화 된 값을 반환한다. 객체가 생성되면 이는

false 로 초기화되야 한다.

readyState 속성은 연결 상태를 나타낸다. readyState 는 다음과 같은 값을 가질 수

있다.

Connecting (숫자 값 0)

연결이 아직 생성되지 않음. 혹은 연결이 종료된 후, 사용자 에이전트가 재연결 중

Open (숫자 값 1)

사용자 에이전트가 연결을 시작하고, 전송받은 이벤트를 처리 중

Closed (숫자 값 2)

연결이 생성되지 않고, 사용자 에이전트가 재연결을 시도하지 않음. 심각한 오류가

발생하였거나 close() 메소드가 호출된 경우

Page 20: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 8

객체가 생성되면 객체의 readyState 는 CONNECTING(0)으로 설정된다. [필수 사항]

아래 연결을 처리하기 위한 규칙은 값이 변경될 때 정의된다.

close() 메소드는 해당 EeventSource 객체를 위해 시작되는 페치(fetch) 알고리즘의

인스턴스를 취소하고, readyStatus 속성을 CLOSED 로 설정해야 한다. [필수 사항]

다음은 EventSource 인터페이스를 구현하는 모든 객체에서, IDL 속성대로 반드시

지원되어야 하는 이벤트 핸들러와 이에 해당하는 이벤트 핸들러 이벤트 타입이다.

이벤트 핸들러

(Event handler)

이벤트 핸들러 이벤트 타입

(Event handler event type)

onopen open

onmessage message

onerror error

이 외에도, 각 EventSource 객체는 이와 관련된 아래 항목을 갖는다.

Reconnection time, 밀리 초(milliseconds). 반드시 사용자 에이전트에서

정의된 값으로 초기화되어야 한다. 해당 값은 수초의 범위에 존재한다.

Last event ID sting. 반드시 빈 문자열로 초기화되어야 한다.

위 값은 현재 인터페이스로 제공되지 않는다.

6. 프로세싱 모델(Processing Model)

본 장에서는 서버 전송 이벤트 처리 모델에 대해 정의한다.

EventSource 생성자의 인자에 정의된 리소스는 생성자가 실행될 때 불려진다.

HTTP 연결을 위해 Accept 헤더가 포함될 수 있다. 헤더가 포함될 경우 헤더는 사용자

에이전트에서 지원되는 이벤트 프레이밍 포맷(event framing format)만을 포함할 수

있다(이 중 하나는 아래 명세 된 것처럼 text/event-stream 이어야 한다). [필수 사항]

이벤트 리소스의 last event ID string 이 빈 문자열이 아니면, Last-Event-ID HTTP

헤더는 요청에 포함 되어야 하며, 헤더의 값은 UTF-8 로 인코딩 된 이벤트 소스의 last

event ID string 의 값이다. [필수 사항]

사용자 에이전트는 이벤트 소스의 요청을 위해 특정 캐시로 전달되는 요청 안에

포함된 Cache-Control:no-cache 헤더를 사용한다(이 헤더는 사용자 정의의

Page 21: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 9

요청헤더(custom request header)가 아니다). 따라서 사용자 에이전트는 CORS 의

simple cross-origin request 매커니즘을 사용한다. [권고사항]

데이터가 전송되면, 데이터를 처리하기 위해 네트워킹 태스크 소스(networking task

source)에 의해 큐에 저장된 태스크(task, 작업)는 아래와 같이 동작한다. [필수사항]

text/event-stream 타입으로 정의되는 Content-Type 헤더를 갖는 HTTP 200

OK 응답은, 어떤 MIME type 파라메터도 무시하며, 아래 정의된 대로 수행된다[필수

사항].

지원되는 MIME type 을 포함하는 성공적인 응답이 전달되면, 사용자 스트림 콘텐트의

파싱을 시작하고, 사용자 에이전트는 연결이 됐음을 알려야 한다.

이와 같은 리소스(적합한 MIME type 과 함께)를 위한 페치 알고리즘이 완료된 후,

네트워킹 태스크 소스(networking task source)를 큐에 넣도록 하는 태스크는 사용자

에이전트가 비동기적으로 연결을 재설정하도록 한다. 이는 연결이 정상적 혹은

비정상적으로 종료되는 경우 적용된다. 아래 목록의 오류 조건에는 적용되지 않는다.

지원되지 않은 타입으로 정의된 Content-Type 을 포함하거나, Content-Type 을 포함

하지 않는 HTTP 200 OK 의 경우, 사용자 에이전트는 연결에 실패한다. [필수 사항]

HTTP 305 Use Proxy, 401 Unauthorized, 407 Proxy Authentication Required 는 다른

하위 리소스 용으로 분명하게 처리되야 한다. [권고사항]

HTTP 301 Move Permanently, 302 Found, 303 See Other, 307 Temporary Redirect

응답은 fetching & CORS 알고리즘에 의해 처리된다. 301 redirects 의 경우, EventSource

객체의 해당 리소스에 대한 다음 요청이 해당 요청에서 마지막에 보여진 301 메시지에게

주어진 URL 로 시작할 수 있도록, 사용자 에이전트는 새로운 URL 도 기억해야 한다.

[필수사항]

여기서 언급되지 않은 나머지 HTTP 응답 코드, 그리고 DNS 에러와 같이 처음 HTTP

연결을 막는 다른 네트워크 에러에 대해서, 사용자 에이전트는 반드시 연결을 실패해야

한다. [필수 사항]

HTTP 외 프로토콜에 대해, 사용자 에이전트는 동일한 방식으로 동작해야 한다.

[권고사항]

사용자 에이전트가 연결이 됐음을 알릴 때, 사용자 에이전트는 반드시 다음과 같이

동작하는 태스크를 큐에 넣어야 한다. readyState 속성이 CLOSED 외의 값으로 설정되어

있는 경우, readyState 속성을 OPEN 으로 설정하고 EventSource 객체에 open 이라는

이름에 간단한 이벤트를 발생시킨다. [필수사항]

Page 22: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 10

사용자 에이전트가 연결을 재 설정할 때, 사용자 에이전트는 아래 절차대로 동작해야

한다. [필수사항] 아래 동작은 태스크의 일부가 아닌, 비동기로 동작한다. (물론, 작업

큐에 있는 태스크는 비동기가 아닌, 일반 태스크와 동일하게 동작한다.)

1. 아래와 같이 동작하는 태스크를 큐에 포함한다.

1. readyState 속성이 CLOSED로 설정되면, 태스크를 취소한다.

2. readyState 속성을 CONNECTING으로 설정한다.

3. EventSource 객체의 error라는 간단한 이벤트를 발생시킨다.

2. 이벤트 소스의 재연결 시간 동안 대기한다.

3. 위에 태스크가 아직 실행 전이라면, 실행될 때까지 대기한다.

4. 아래와 같이 동작하는 태스크를 작업 큐에 포함한다.

1. readyState 속성이 CONNECTING으로 설정되어 있지 않으면, 태스크를

취소한다.

2. 해당 절의 상단에서 정의된 것과 같이, EventSource() 생성자에 의해

제동되는 초기 요청에서와 동일한 mode와 origin으로 이벤트 소스 리소스의

absolute URL의 잠재적인 CORS 활성화 패치(potentially CORS-enabled

fetch)를 수행하고, 이렇게 얻어진 리소스를 처리한다.

사용자 에이전트가 연결을 실패할 때, 사용자 에이전트는 다음과 같은 태스크를 큐에

넣어야 한다. readyState 속성이 CLOSED 가 아닌 다른 값으로 설정 된 경우, readyState

속성을 CLOSED 로 설정하고, EventSource 객체에 error 라는 이름의 간단한 이벤트를

발생시킨다. [필수 사항] 사용자 에이전트가 연결에 실패할 경우, 재연결을 시도하지

않는다!

EventSource 개체에 의한 작업 큐에 있는 태스크를 위한 태스크 소스(task source)는

원격 이벤트 소스(remote event task source)이다.

7. 이벤트 스트림 구문 분석(Parsing an event stream)

이 이벤트 스트림 형식의 MIME type 은 text/event-stream 이다. 이벤트 스트림

형식은 아래와 같이 정의된다. [ABNF]

[ABNF: 이벤트 스트림 형식(Event stream format)]

stream = [ bom ] *event

Page 23: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 11

event = *( comment / field ) end-of-line

comment = colon *any-char end-of-line

field = 1*name-char [ colon [ space ] *any-char ] end-of-line

end-of-line = ( cr lf / cr / lf )

; characters

lf = %x000A ; U+000A LINE FEED (LF)

cr = %x000D ; U+000D CARRIAGE RETURN (CR)

space = %x0020 ; U+0020 SPACE

colon = %x003A ; U+003A COLON (:)

bom = %xFEFF ; U+FEFF BYTE ORDER MARK

name-char = %x0000-0009 / %x000B-000C / %x000E-0039 / %x003B-10FFFF

; a Unicode character other than U+000A LINE FEED (LF), U+000D

CARRIAGE RETURN (CR), or U+003A COLON (:)

any-char = %x0000-0009 / %x000B-000C / %x000E-10FFFF

; a Unicode character other than U+000A LINE FEED (LF) or U+000D

CARRIAGE RETURN (CR)

이벤트 스트림은 UTF-8 형식으로 인코딩(Encoding)되어야 한다. [RFC3629]

각 행은 U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF)로 이루어진 문자

조합, 혹은 각각의 U+000A LINE FEED (LF)와 U+000D CARRIAGE RETURN (CR)으로

구별되어야 한다.

이런 자원을 위해 원격의 서버와 설정된 연결은 오랫동안 유지되어야 하기 때문에,

사용자 에이전트는 적절한 버퍼링이 사용되었는지를 확인해야 한다.

특히, 행 버퍼링이 하나의 U+000A LINE FEED (LF) 문자로 끝날 경우 안전하지만,

블록 버퍼링이나 다른 문자로 끝나는 행 버퍼링일 경우 이벤트 발송 지연을 발생 시킬

수 있다.

8. 이벤트 스트림 해석(Interpreting an event stream)

스트림은 에러 핸들링(Error handling)과 함께 UTF-8 로 디코딩(Decoding)되어야 한다.

[HTML]

Page 24: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 12

만약 맨 앞에 U+FEFF BYTE ORDER MARK 문자가 선두에 위치하면, 이는 해석하지

않고 무시해야 한다.

그 다음, 스트림은 아래와 같은 문자로 끝나는 각 행별로 읽어 분석해야 한다.

- U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) 문자 쌍

- U+000D CARRIAGE RETURN (CR) 문자 앞에 위치하지 않은, 하나의 U+000A

LINE FEED (LF) 문자

- U+000A LINE FEED (LF) 문자 앞에 위치하지 않은, 하나의 U+000D CARRIAGE

RETURN (CR) 문자

- 행을 끝낼 수 있는 4 가지 방법에 의한 파일의 끝

스트림이 분석 될 때, data 버퍼(buffer), event name 버퍼, last event ID 버퍼는

스트림과 연관되어야 하며, 빈 문자열로 초기화 해야 한다.

각 행은 아래와 같이 전송된 순서에 따라 처리되어야 한다.

행이 비어있는 경우, (빈 행)

아래 정의[이벤트 처리]된 대로 이벤트를 처리한다.

행이 U+003A COLON 문자로 시작하는 경우

행을 무시한다.

행이 U+003A COLON 문자를 포함하는 경우

첫 번째 U+003A COLON(:) 전까지 행의 문자들을 수집하고, 해당

문자열을 field 로 설정한다.

첫 번째 U+003A COLON(:)이후 행의 문자들을 수집하고, 해당

문자열을 value 로 설정한다. 만약 value 가 U+0020 SPACE 로 시작한다면, 해당

value 를 삭제한다.

field name 을 field 로, field value 를 value 로 하여, 아래 정의된 절차[필드

처리]와 같이 필드를 처리한다.

그렇지 않고, 빈 문자열은 아니지만, U+003A COLON(:)를 포함하지 않는 경우,

field name 을 전체 행으로, field value 를 빈 문자열로 하여, 아래 정의된

절차와 같이 필드를 처리한다.

Page 25: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 13

파일 끝에 도달하면, 보류중인 데이터는 폐기되어야 한다. (만약 마지막 행에 도달하기

전, 파일이 이벤트 중간에 끝나면, 불완전한 이벤트는 발송되지 않는다.)

주어진 이름과 값으로 필드를 처리하는 절차는 아래 리스트와 마찬가지로 field

name 에 따라 달라진다. field name 은 대소문자 변화 없이, 문자 그대로 비교 되어야

한다.

field name 이 “event”인 경우

event name 버퍼를 필드 값으로 설정한다.

field name 이 “data”인 경우

field name 에 data 버퍼를 추가 하고, U+000A LINE FEED (LF) 문자를 data

버퍼에 추가 한다.

field name 이 “id”인 경우

last event ID 버퍼를 field value 로 설정한다.

field name 이 “retry”인 경우

field value 가 U+0030 DIGIT ZERO (0)와 U+0039 DIGIT NINE (9) 범위의

값으로 구성되어 있으면, 해당 field value 를 10 진수 정수로 해석한다. 그리고,

이벤트 스트림의 reconnection time 을 해당 정수로 설정한다. 아니면, 해당

필드를 무시한다

그 외의 경우

해당 필드를 무시한다.

사용자 에이전트가 이벤트를 처리할 때, 사용자 에이전트는 아래와 같이 동작해야

한다.

1. 이벤트 출처(Event source)의 last event ID string 을 last event ID 버퍼 값으로

설정. 버퍼는 초기화되지 않으며, 이벤트 출처의 last event ID string 은 이후

서버에서 설정할 때까지 설정 값을 유지한다.

2. 만약 data 버퍼가 비어있으면, data 버퍼와 event name 버퍼를 빈 문자열로

설정하고, 현재 단계 취소로 설정한다.

Page 26: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 14

3. data 버퍼의 마지막 문자가 U+000A LINE FEED (LF)이면, data 버퍼에서 해당

문자를 제거한다.

4. MessageEvent 인터페이스를 사용하여 이벤트 이름이 message 인 버블 단계도

아니고, 취소 되지도 않으며, 기본 동작도 갖지 않는 이벤트를 생성한다. data

속성은 data 버퍼의 값으로 초기화되어야 하며, origin 속성은 이벤트 스트림의

마지막 URL(예를 들어, 리다이렉트(redirect)의 후의 URL)의 출처(origin)에 대한

유니코드 직렬화(Unicode serialization)로 초기화되고, lastEventid 속성은 이벤트

출처의 last event ID string 으로 초기화되어야 한다.

5. 만약 event name 버퍼가 빈 문자열이 아닌 다른 값을 갖는다면, 최근 생성된

이벤트 타입을 event name 버퍼의 값과 동일하게 바꾼다.

6. data 버퍼와 event name 버퍼를 빈 문자열로 설정한다.

7. 만약 readyState 속성이 CLOSED 가 아닌 값으로 설정되어 있다면 태스크를

큐에 넣고, EventSource 객체에 새롭게 생성된 이벤트를 전달한다.

Note: 만약 이벤트가 아이디(ID) 필드를 갖고 있지 않고 이전 이벤트가 이벤트 소스의

최종 이벤트 아이디 스트링(Last event ID string)으로 설정되어 있다면, 이벤트의

lastEventid 필드는 마지막에 “ID”필드 값으로 설정된다.

다음 이벤트 스트림 뒤에, 빈 라인이 뒤 따른다.

data: YHOO

data: +2

data: 10

...EventSource 객체에서 처리되는 MessageEvent 인터페이스로 이벤트 message가

발생된다. 이 이벤트 데이터의 속성은 YHOO\n+2\n10 문자를 포함한다. (\n는 새로운

행을 의미한다.)

이것은 아래와 같이 사용될 수 있다:

var stocks

= new EventSource("http://stocks.example.com/ticker.php");

stocks.onmessage = function (event) {

var data = event.data.split('\n');

updateStocks(data[0], data[1], data[2]);

};

Page 27: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 15

...updateStocks()은 다음과 같이 정의된다:

function updateStocks(symbol, delta, value) { ... }

...or some such.

다음 스트림은 4개의 블록을 포함한다. 첫 번째 블록은 주석이며, 어떤 동작도 하지

않는다. 두 번째 블록은 “data”와 “id”이라는 각각의 필드를 갖고 있다; 이벤트는 “first

event”로 이 블록에서 발생되며, 해당 블록과 다음 블록 사이에 연력이 끊어질 경우,

서버가 Last-Event-ID 헤더에 1값을 보낼 수 있도록 이후 last vent ID를 1로 설정한다.

세 번째 블록은 last Event ID를 빈 문자열로 재 설정하는 “second event”로 이벤트를

발생하며, 이 시점에 별도의 값을 갖고 있지 않는 “id” 필드를 가지고 있다(Last-Event-

ID 헤더가 없다는 것은, 지금 재연결이 되고 전송된다는 것을 의미한다). 마지막 블록은

“third event” 데이터로 이벤트를 생성한다(앞에 스페이스 문자 한 개를 포함해서).

마지막 블록은 빈 행을 포함하며, 스트림의 끝은 마지막 이벤트를 동작시키기에 충분하지

않다.

: test stream

data: first event

id: 1

data:second event

id

data: third event

다음 스트림은 두 개의 이벤트를 발생한다:

data

data

data

data:

첫 번째 블록은 마지막 블록이 빈 행 다음으로 위치하였기 때문에 빈 문자열을 데이터

세트로 이벤트를 발생한다. 중간 블록은 줄 바꿈 문자를 데이터 세트로 이벤트를

Page 28: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 16

발생한다. 마지막 블록은 빈 행 뒤에 오기 때문에 처리되지 않고, 무시된다.

다음 스트림은 두 개의 동일한 이벤트를 발생한다:

data:test

data: test

이는 콜론 뒤에 스페이스가 무시되기 때문이다.

9. 노트

구형 프락시 서버의 경우, 특정 경우에 짧은 타임아웃 후에, HTTP 연결을 끊는다.

이와 같은 프락시 서버에 대응하기 위해, 저작자는 매 15 초 마다 코멘트 라인(‘:’ 문자로

시작하는 형태)을 포함할 수 있다.

이벤트 소스 연결을 연결하거나 이전 문서에 대해 정의하고자 하는 저작자는 IP 주소에

의존해서 연결되지 않는 것을 발견할 수 있다. 왜냐하면, 각 클라이언트가 복수의 프락시

서버와 동작할 수 있고, 복수의 IP 주소로 동작할 수 있으며, 각각의 IP 주소는 하나의

프락시를 공유하는 다수의 클라이언트를 보유할 수 있기 때문이다. 따라서, 연결이

설정되고 URL 의 일부로 식별자가 전달될 때 문서에 고유의 식별자(indentifier)를

포함하는 것이 더 좋다.

또한 이 프로토콜의 신뢰성과 관련해서 HTTP 청크는 예상치 못한 부정적인 영향을 줄

수 있다. 따라서, 청크는 메시지 비율이 큰 문제가 되지 않는 한, 이벤트 스트림을

제공하는 동안 비활성화되어야 한다. [권고사항]

HTTP 의 서버 당 연결 제한을 지원하는 클라이언트는 같은 도메인에 대해

eventSource 를 갖는 다수의 페이지를 여는 경우, 문제가 발생할 수 있다. 저작자는

연결당 별도의 도메인을 사용하는 매커니즘을 사용하거나 페이지당 사용자로 하여금

eventSource 를 활성/비활성화하게 하거나, 웹 워커(web worker)을 이용해 하나의

eventSource 를 공유하는 방법을 통해 이를 피할 수 있다.

10. 비접속 푸시와 추가 기능(Connectionless push and other features)

특정 사업자와 연동된 모바일 브라우저 등과 같이 제어 가능한 환경에서 실행되는

사용자 에이전트는 네트워크 상의 프락시 연결을 나눠서 관리할 수 있다. 이런 경우

Page 29: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 17

사용 적합한 목적을 위한 사용자 에이전트는 단말 S/W 와 네트워크 프락시를 포함하도록

설계된다.

예를 들어 모바일 브라우저는, 연결을 설정한 후, 네트워크 지원이 가능한지를

감지(detect)하거나, 네트워크 프락시 서비스가 연결을 관리하기 위한 요청들을 감지할

수 있다. 순서는 아래와 같다:

1. 브라우저는 원격의 HTTP 서버에 연결되고 EventSource 생성자 안에 저작자에

의해 정의된 리소스를 요청한다.

2. 서버는 임시로 메시지를 보낸다.

3. 두 개의 메시지 사이에, 브라우저는 TCP 연결을 유지하기 위한 네트워크 활동을

제외하고 Idle 상태를 감지하고, 파워를 아끼기 위해 Sleep 모드로 변환할지를

결정한다.

4. 브라우저는 서버와 연결 해제 된다.

5. 브라우저는 네트워크 서비스와 연결되고, 연결을 유지하는 대신, "push

proxy"서비스를 요청한다

6. "push proxy"서비스는 원격의 HTTP 서버와 연결하고 EventSource 생성자 안에

저작자에 의해 정의된 리소스를 요청한다. (Last-Event-ID HTTP 헤더 등을

포함할 수 있음)

7. 브라우저는 단말이 절전 모드(sleep mode)로 변환되도록 허용한다.

8. 서버는 다른 메시지를 보낸다.

"push proxy"서비스는 이벤트 처리를 위한 프로세스만 깨우고, 다시 절전

모드(sleep mode)로 돌아가도록 모바일 단말로 이벤트를 전달하기 위해 OMA

Push와 같은 기술을 이용한다.

위와 같은 처리는 전체 데이터 사용을 줄이고, 결과적으로 단말 배터리 소모를 줄일

수 있다.

기존의 API 와 본 규격에 정의된 text/event-stream wire format 를 구현 하거나 위에서

설명한 더 많은 배포 방법뿐 아니라, 기타 해당 규격에서 정의된 이벤트 프레임 형식도

지원된다. 본 규격은 이벤트 처리를 위해 어떻게 구문이 분석되고, 처리되는 지까지

명세하지는 않는다.

11. 가비지 콜렉션(Garbage Collection)

EventSource 객체의 readyState 가 Connecting 상태일 동안, 객체가 open, message,

error 이벤트를 등록한 하나 이상의 이벤트 리스너를 가질 경우, EventSource 객체에서

Page 30: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 18

재귀적으로 호출되는 EventSource 객체 생성자는 Window 혹은 WorkerUtils 객체로부터

참조가 있어야 한다. [필수사항]

EventSource 객체의 readyState 가 OPEN 상태인 동안, 객체가 message 혹은 error

이벤트를 등록한 하나 이상의 이벤트 리스너를 가질 경우, EventSource 객체에서

재귀적으로 호출되는 EventSource 객체 생성자 Window 혹은 WorkerUtils 객체로부터

참조가 있어야 한다. [필수사항]

원격의 이벤트 태스크 소스의 EventSource 객체에 의한 태스크 큐가 있으면,

EventSource 객체에서 재귀적으로 호출되는 EventSource 객체 구성자는 Window 혹은

WorkerUtils 객체로부터 참조가 있어야 한다. [필수사항]

만약 사용자 에이전트가 EventSource 객체를 강제로 Close 하면(Document 객체가

영구적으로 사라질 때 발생), 사용자 에이전트는 이 EventSource 객체를 위해 시작되는

페치 알고리즘을 위해 시작되는 인스턴스를 취소하고, readyState 속성을 CLOSED 로

설정 해야 한다.

만약 EventSource 연결 열린 채로 유지되는 동안, 객체가 가비지 콜렉터를 실행하면,

사용자 에이전트는 이 EventSource 객체를 통해 열리는 페치 알고리즘을 취소해야 한다.

Note: 하나의 활성 네트워크 연결이 다수의 EventSource 객체와 이 객체를 위한 페치

알고리즘에 의해 공유되는 것이 가능하다. 이는 실제 기본 다운로드 관점이

아닌 페치(Fetch) 알고리즘 중단의 관점에서 표현한 이유이다.

12. IANA 고려 사항(Internet Assigned Numbers Authority Considerations)

12.1. Text/Event-Stream

본 등록은 커뮤니티 리뷰를 위한 것이면, IESG 의 리뷰와 승인, IABA 등록을 위해

제출될 예정이다.

[text/event-stream 미디어 타입 등록을 위한 요청]

Type name:

text

Subtype name:

event-stream

Required parameters:

No parameters

Optional parameters:

Page 31: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 19

charset

The charset parameter may be provided. The parameter's value must be "utf-

8". This parameter serves no purpose; it is only allowed for compatibility with

legacy servers.

Encoding considerations:

8bit (always UTF-8)

Security considerations:

An event stream from an origin distinct from the origin of the content

consuming the event stream can result in information leakage. To avoid this,

user agents are required to apply CORS semantics. [CORS]

Event streams can overwhelm a user agent; a user agent is expected to apply

suitable restrictions to avoid depleting local resources because of an

overabundance of information from an event stream.

Servers can be overwhelmed if a situation develops in which the server is

causing clients to reconnect rapidly. Servers should use a 5xx status code to

indicate capacity problems, as this will prevent conforming clients from

reconnecting automatically.

Interoperability considerations:

Rules for processing both conforming and non-conforming content are defined

in this specification.

Published specification:

This document is the relevant specification.

Applications that use this media type:

Web browsers and tools using Web services.

Additional information:

Magic number(s):

No sequence of bytes can uniquely identify an event stream.

File extension(s):

No specific file extensions are recommended for this type.

Macintosh file type code(s):

No specific Macintosh file type codes are recommended for this type.

Person & email address to contact for further information:

Yves Lafon <[email protected]>

Intended usage:

Common

Restrictions on usage:

This format is only expected to be used by dynamic open-ended streams

served using HTTP or a similar protocol. Finite resources are not expected to be

Page 32: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 20

labeled with this type.

Author:

Ian Hickson <[email protected]>

Change controller:

W3C

조각 식별자(Fragment identifiers)는 text/event-stream 자원에서는 의미 없는

구문으로 처리한다.

12.2. Last-Event-ID

본 장은 영구 메시지 헤더 필드 레지스트리(Permanent Message Header Field

Registry)에 등록하기 위한 헤더 필드에 대해 정의한다.

Header field name:

Last-Event-ID

Applicable protocol:

http

Status:

standard

Author/Change controller:

W3C

Specification document(s):

This document is the relevant specification.

Related information:

None.

Page 33: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 21

부 록 Ⅰ

참고 문헌

[ABNF]

Augmented BNF for Syntax Specifications: ABNF, D. Crocker, P. Overell. IETF.

[CORS]

Anne van Kesteren. Cross-Origin Resource Sharing. 2014.01. W3C

Recommendation. URL: http://www.w3.org/TR/cors/

[DOMCORE]

Anne van Kesteren; Aryeh Gregor; Ms2ger; Alex Russell; Robin Berjon. W3C

DOM4. 2014.07. W3C Last Call Working Draft.

URL: http://www.w3.org/TR/dom/

[HTML]

Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward

O'Connor; Silvia Pfeiffer. HTML5. 2014.10. W3C Recommendation.

URL:http://www.w3.org/TR/html5/

[RFC2119]

Key words for use in RFCs to Indicate Requirement Levels, S. Bradner. IETF.

[RFC3629]

UTF-8, a transformation format of ISO 10646, F. Yergeau. IETF.

[RFC3864]

Registration Procedures for Message Header Fields, G. Klyne, M. Nottingham, J.

Mogul. IETF.

[WEBIDL]

Cameron McCormack. Web IDL. 2012.04. W3C Candidate Recommendation.

URL: http://www.w3.org/TR/WebIDL/

[WEBMESSAGING]

Ian Hickson. Web Messaging. 2012.05. W3C Candidate Recommendation.

URL: http://www.w3.org/TR/webmessaging/

[WEBWORKERS]

Ian Hickson. Web Workers. 2012.05. W3C Candidate Recommendation.

URL: http://www.w3.org/TR/workers/

Page 34: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

TTAK.OT-10.0381 22

표준 작성 공헌자

표준 번호 : TTAK.OT-10.0381

이 표준의 제정‧개정 및 발간을 위해 아래와 같이 여러분들이 공헌하였습니다.

구분 성명 위원회 및 직위 연락처

(E-mail 등) 소속사

표준(과제) 제안 전종홍 PG605 부의장 [email protected] ETRI

표준 초안 작성자 전종홍 PG605 부의장 [email protected] ETRI

표준 초안 에디터 전종홍 PG605 부의장 [email protected] ETRI

표준 초안 검토

이승윤 웹 프로젝트그룹 의장 [email protected] ETRI

외 프로젝트그룹 위원

표준안 심의

박승민 소프트웨어/콘텐츠

기술위원회 의장 [email protected] ETRI

외 기술위원회 위원

사무국 담당

이혜진 - [email protected] TTA

김영화 - [email protected] TTA

Page 35: T T A S t a n d a r d 6. 이벤트 스트림 구문 분석 6. Parsing an event stream 동일(번역) 7. 이벤트 스트림 인터럽팅 7. Interpreting an event stream 동일(번역)

정보통신단체표준(국문표준)

웹에서의 서버 전송 이벤트

(Server Sent Events)

발행인 : 한국정보통신기술협회 회장

발행처 : 한국정보통신기술협회

463-824, 경기도 성남시 분당구 분당로 47

Tel : 031-724-0114, Fax : 031-724-0109

발행일 : 2015.12.


Recommended