+--------+
send PP ⎢ ⎢ recv PP
,--------⎢ idle ⎢--------.
/ ⎢ ⎢ \
v +--------+ v
+----------+ ⎢ +----------+
⎢ ⎢ ⎢ send H / ⎢ ⎢
,------⎢ reserved ⎢ ⎢ recv H ⎢ reserved ⎢------.
⎢ ⎢ (local) ⎢ ⎢ ⎢ (remote) ⎢ ⎢
⎢ +----------+ v +----------+ ⎢
⎢ ⎢ +--------+ ⎢ ⎢
⎢ ⎢ recv ES ⎢ ⎢ send ES ⎢ ⎢
⎢ send H ⎢ ,-------⎢ open ⎢-------. ⎢ recv H ⎢
⎢ ⎢ / ⎢ ⎢ \ ⎢ ⎢
⎢ v v +--------+ v v ⎢
⎢ +----------+ ⎢ +----------+ ⎢
⎢ ⎢ half ⎢ ⎢ ⎢ half ⎢ ⎢
⎢ ⎢ closed ⎢ ⎢ send R / ⎢ closed ⎢ ⎢
⎢ ⎢ (remote) ⎢ ⎢ recv R ⎢ (local) ⎢ ⎢
⎢ +----------+ ⎢ +----------+ ⎢
⎢ ⎢ ⎢ ⎢ ⎢
⎢ ⎢ send ES / ⎢ recv ES / ⎢ ⎢
⎢ ⎢ send R / v send R / ⎢ ⎢
⎢ ⎢ recv R +--------+ recv R ⎢ ⎢
⎢ send R / `----------->⎢ ⎢<-----------' send R / ⎢
⎢ recv R ⎢ closed ⎢ recv R ⎢
`----------------------->⎢ ⎢<----------------------'
+--------+
send: endpoint sends this frame
recv: endpoint receives this frame
H : HEADERS frame (with implied CONTINUATIONs)
PP: PUSH_PROMISE frame (with implied CONTINUATIONs)
ES: END_STREAM flag
R : RST_STREAM frame
CONTINUATION
프레임은 스트림의 상태에 아무런 영향을 끼치지 않는다.END_STREAM
플래그를 포함하는 프레임에 대하여 별도의 처리를 하고자 스트림의 상태를 관리한다
END_STREAM
플래그를 포함하는 HEADERS
프레임은 2가지의 상태로 변화 시킬 수 있다RST_STREAM
을 전송하고 스트림의 상태를 closed
로 변경할 수 있다