"#1. HTTP/1.1에서 HTTP/2.0 (https인 경우)"글에서 와이어샤크로 캡처한 화면은 없었다.


http를 사용하는 사이트에서는 와이어샤크로 캡처하면 http2 스위칭하는 부분이 별도의 처리 없이 보였었는데


https를 사용하는 사이트를 와이어샤크로 캡처해보니 http2라고 안나오고 TLS라고만 나왔다. (하지만 실제로 통신은 HTTP/2.0으로 통신했다)

와이어샤크로 https://nghttp2.org를 캡처한 화면

(빨간박스 안에 http2는 보이지 않는다)


크롬에서는 HTTP/2.0로 통신한다고 나온다


해결방법은 암호화한(SSL or TLS) 패킷을 복호화해서 보여주면 된다.


와이어샤크가 패킷을 읽고 "이건 HTTP/2.0네?"라고 인지하고 http2표현하는것 같은데


암호화가 되어있어서 와이어샤크는 이 패킷을 읽을 수 없어서 암호화 형태를보고 (혹은 다룬부분을 보고...) SSL or TLS라고 표현하는것같다.


실제로 복호화하는 절차를 거친 후 패킷을 캡처해보니 http2라고 나오는걸 확인할 수 있다.

(복호화 하는 절차 : http://http2.tistory.com/6)


HTTP/2.0을 지원하는 웹페이지는 HTTP/1.1를 동시에 지원한다.


해당 사이트가 HTTP/2.0을 지원하는지 모르기 때문에 맨 처음 connection이 이루어지면 1.1버전으로 통신을 하고


HEAD를 보낼때 "너 HTTP/2.0버전을 지원하니?"라고 물어본다. (빨간 박스 부분이 물어보는 부분이다)

아래 표는 'http' URL을 사용하는 사이트의 경우 HTTP/2.0을 시작하기 위한 예시를 나타낸다(RFC 7540참고)

GET / HTTP/1.1 

Host: server.example.com 

Connection: Upgrade, HTTP2-Settings 

Upgrade: h2c 

HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> 



아래 스크린샷은 curl 명령어를 통해서 nghttp2.org라는 사이트와 통신하는것을 캡처한것이다.

(106.186.112.116은 nghttp2.org사이트의 ip주소이다)




만약 서버가 HTTP/2.0을 지원하지 않으면 이 요청(빨간색박스)을 무시하고 기존 1.1버전의 사이트를 200 OK로 내려준다.


하지만 이 경우는 서버가 HTTP/2.0을 지원하므로 HTTP/1.1 101 Switching Protocols 이라는 답장을 했다. (초록색 박스)

(여기서 HTTP/1.1 101 Switching Protocols은 "지금 HTTP/1.1을 쓰고있는데 HTTP/2.0으로 바꾸자"라고 답을해준거라 생각해도 된다.)


그 후 프로토콜은 HTTP/2.0으로 상승해서 통신하는 부분을 볼 수 있다. (주황색 박스)



*다음과 같이 CMD에서 curl명령어를 통해 101 스위칭 프로토콜이 도착하고, HTTP/2.0으로 변경된걸 확인 할 수 있다.


+ Recent posts