HTTP
- Created
- 2022년 9월 3일 PM 8:10
HTTP#
HTTP란?#
HyperText Transfer Protocol의 약자
- 클라이언트 모델
- 클라이언트(브라우저)는 요청, 수신 그리고 웹 오브젝트 표현을 담당한다.
- 서버 모델
- 서버는 요청에 따른 응답을 보낸다.
HTTP는 stateless 하다.#
서버는 클라이언트의 과거응답에 대한 정보를 유지하지 않는다.
왜냐하면 상대를 유지하는것은 복잡하기 때문이다.
Non-Persistent HTTP#
서버쪽에서 하나의 오브젝트만 보낸 뒤, TPC 커넥션을 종료하는 HTTP
HTTP의 요청 흐름#
- 유저가 URL을 입력 (www.someSchool.edu/someDepartment/home.index)
- HTTP 클라이언트 (브라우저)는 HTTP서버에 TCP커넥션을 맺음 (:80 포트)
- HTTP의 경우 well known port 번호를 이용한다. 80번
- 서버는 80번 포트의 커넥션을 기다린다. 커넥션이 맺어질 경우 클라이언트에게 알림
- 그러면 클라이언트는 TCP 소켓을 통해서 HTTP 메세지를 보냄. 위 요청에서는 someDepartment/home.index를 나타내길 원한다는 메세지임
- HTTP서버는 요청 메세지를 수신함, 그리고 요청에 맞는 Response 메세지를 소켓을 통해 클라이언트로 보내줌
- 해당 메세지를 보낸 서버는 TCP커넥션을 종료함
- HTTP 클라이언트는 응답을 받고 HTML을 파싱하고 화면에 표시함, 그리고 파싱중 여러 다른 파일들(이미지)를 발견함
HTTP의 응답 시간#

응답시간(Response Time)이란? 유저가 보낸 응답이 server를 거쳐 유저에게 display 될때 까지의 시간
- RTT(Round Trip Time) : 작은 패킷이 클라이언트에서 보내 서버에서 되돌아올때까지의 시간
- HTTP Response Time
- TCP 커넥션을 위한 하나의 RTT
- HTTP 요청과 작은 응답 바이트가 돌아올때 까지의 RTT
- 파일 전송 시간
- 응답시간 = 2RTT + 파일 전송 시간
Persistent HTTP#
Non-Persistent HTTP Issues (A.K.A. HTTP 1.0)#
- 매 오브젝트 요청마다 2개의 RTT가 필요하다.
- 이런 딜레이를 막기위해 브라우저가 경우에 따라 병렬적 TCP커넥션을 맺기도 한다.
- OS는 이런 각각의 커넥션에 오버헤드를 겪는다.
- 각 소켓마다 버퍼, TCP 커넥션을 할당해줘야 하므로!
Persistent HTTP (A.K.A. HTTP 1.1)#
- 서버는 응답을 전송한 후 연결된 커넥션을 닫는다.
- HTTP 메세지를 이미 열려져 있는 커넥션을 통해서 요청한다.
- 때문에 모든 참조 오브젝트에 대해 최소 하나의 RTT만을 사용한다.
HTTP Message#
HTTP에는 2가지 종류의 메세지 타입이 있다. (Request, Response)
HTTP Request Message#


- HTTP 요청 메세지는 ASCII 코드로 이루어져 있다.
POST 메서드#
- 웹페이지는 가끔 사용자의 입력을 받아야할때가 있다.
- 입력은 entry body에 입력되어 서버로 전송된다.
URL 메서드#
- GET 메서드를 이용한다.
- URL 필드에 요청을 보낸다. (쿼리 파라미터)
요청 타입의 호환성#
- HTTP 1.0
- GET, POST, HEAD
- HTTP 1.1
- GET, POST, HEAD, DELETE, PUT
HTTP Response Message#

HTTP Status Code#
상태코드는 응답의 첫번째 줄에 위치해있습니다.
- 200 : OK
- 301 : Moved Permently
- 400 : Bad Request
- 404 : Not Found
- 505 : HTTP Version Not Support
참고하기 좋은 자료
1) well known port list - https://ko.wikipedia.org/wiki/TCP/UDP의_포트_목록
2) 모질라 개발자 상태코드 문서 - https://developer.mozilla.org/ko/docs/Web/HTTP/Status
3) Multipart/form-data는 GET과 POST만 지원한다 : https://mangkyu.tistory.com/218
4) HTTP 3.0 QUIC 프로토콜 : https://blog.naver.com/PostView.nhn?blogId=renucs&logNo=220887163028