2020 12 02
Cookie와 Session을 공부하면서 계속 모르는 용어들이 나오고, HTTP에 대해서 조금 깊게 공부해야겠다고 느꼈다. 네트워크를 공부하면서 맨 처음에 가장 이해가 가지 않았던 것이, OSI 7 계층에서 같은 레이어끼리 정보를 주고받는데, 그 정보는 맨 하위 레이어로 내려간대.. 이게 뭔말일까.. 싶었는데 최근에 이해가 가면서 학습에 속도가 붙은 것 같다. HTTP는 웹 개발자라면 무조건적으로 알아야할 내용이다.
www상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. 주로 TCP를 사용하고 HTTP/3 부터는 UDP(QUIC)을 사용하며, 80번 포트를 사용한다
네이버로 들어가서 크롬 개발자모드를 켜고 Application에 들어가면 Cookies나 여러 가지를 볼 수 있기도 하다.
클라이언트와 서버 사이 소통은 평문(ASCII) 메시지로 이루어진다. 클라이언트가 서버로 보내는 요청 메시지는 다음과 같다.
등을 포함하여 요청메세지를 보내며, 요청 내용과 헤더는 CRLF로 끝나야 한다.
상태표시 행(Status Line): 상태 코드와 reason message를 포함한다.
응답 헤더 필드
HTTP 상태 코드는 IANA에서 관리를 하고 있다.
HTTP 초기 버전에는 버전 번호가 없었다.
요청은 단일 라인으로 구성되며, 리소스에 대한 경로로 GET 메서드만 가능
GET /login.html
응답 또한 파일 내용 자체로 구성되었다.
버전 정보가 요청에 같이 전송됨
Status 코드 또한 응답의 시작 부분에 붙어 전송 -> 요청에 대한 성공/실패 결과를 알 수 있었음
평범한 HTML 파일 외에 json, text 등 다른 문서들을 전송하는 기능 추가
GET /login.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0
200 OK
Date: Thu, 20 Dec 1995 09:22:11 GMT
Server: ...
...
1995년 부터 다양한 HTTP/1.0 구현이 진행되고, 1996년 까지 표준화가 진행중에 있었는데, HTTP의 첫 번째 표준인 HTTP/1.1은 HTTP/1.0이 나온지 몇 달 되지 않은 1997년 초에 공개되었다.
그 후 15년 넘게 HTTP/1.1은 매우 안정성을 유지해 왔다.
1.보안 전송을 위한 HTTP
2.복잡한 애플리케이션을 위한 HTTP
3.웹의 보안 모델
HTTP/1.1 커넥션은 올바른 순서로 전송되는 요청을 필요로 한다. 많은 양의 오버헤드와 복잡도가 남아 있다. 2010년 초에 구글은 SPDY 프로토콜을 구현하여, 클라이언트와 서버 간의 데이터 교환을 대체할 수단을 만들었다.
최적화 기술 구현
동일한 Connection 상에서 병렬 요청 가능. (Multiplexed Streams)
한 커넥션으로 동시에 여러 개의 메세지 주고받음.
응답 순서는 상관 없음.
순서 제거(Stream Prioritization)
클라이언트 캐시를 서버 푸쉬라고 불리는 매커니즘으로 필요하게 될 데이터로 채워넣도록 허용.
2015년 5월에 표준화가 되었고, 큰 성공을 거두었다.
HTTP 3 에 대한 내용과 QUIC 에 대한 내용은 다음 번에 큰 주제로 다뤄 볼까 한다. 내가 학교 과목 중에 하나에서 QUIC으로 NS-3에서 시뮬레이션을 돌리는 작업을 하면서 QUIC을 공부하긴 했지만 다시 공부해 보는 것도 좋을 것 같다.
참조