BOBO's Note

Application Layer (2) - HTTP 본문

Network

Application Layer (2) - HTTP

bobo_hee 2020. 7. 20. 17:47

HTTP에 대해 알아보기 전에 Web에 대해 간단하게 알아보자면,

은 클라이언트-서버 구조를 갖는 애플리케이션이고, HTTP은 웹의 application layer에 위치하는 프로토콜이다.

 

헷갈리지 말자!

 

HTTP

HTTP는 HyperText Transfer Protocol의 약자로, application 계층의 프로토콜 중 하나이다.


Client-Server 모델이며, ASCII로 된 응답/요청 메세지를 주고받는다. HTTP 통신 방법은 대략적으로 다음과 같은 순서로 이루어진다.

  1. 클라이언트가 URL을 통해 서버의 IP 주소를 알아낸다.
  2. 클라이언트가 HTTP request 메시지 생성한다.
  3. 클라이언트가 서버의 (IP 주소, port 번호)로 TCP connection 요청한다.
  4. 서버는 port 번호로 기다리다가 TCP connection 요청이 들어오면 수락하고, 클라이언트에게 이를 알린다.
  5. 클라이언트가 서버로 HTTP request 전송한다.
  6. 서버가 request를 처리하고, 그 결과에 대해 HTTP response 메세지 생성하여 전송한다.
  7. 이후 서버가 TCP connection을 끊는다.
  8. 클라이언트는 받은 response 메세지로부터 결과 화면을 웹 브라우저에 띄운다.

HTTP는 기본적으로 stateless한 프로토콜이다. 따라서 요청이 독립적으로 관리된다. 다시 말하자면, 서버가 클라이언트의 과거 요청 정보를 기록하지 않는다.

 

이로 인해 서버는 간단한 디자인을 가질 수 있으나, 클라이언트 측에서는 요청할 때마다 필요한 모든 정보를 함께 보내야 한다는 불편함이 있다.

 

이러한 점은 쿠키 및 세션으로 일정 부분 해소할 수 있다.

 

HTTP Message 구조

HTTP request message는 다음과 같은 구조를 갖는다.

HTTP Request Message

대표적인 메소드는 GET, POST, PUT, DELETE가 있다.

  • GET: 서버에 자원 요청
  • POST: 서버에 새로운 자원을 전송 또는 생성
  • PUT: 서버에 존재하는 자원 변경/수정
  • DELETE: 서버에 존재하는 자원 삭제

GET vs POST

두 메소드 모두 데이터를 담아 전송할 수 있는 메소드이다.

 

GET은 URL에 데이터를 덧붙여 전송하는 방식이며, POST는 메세지의 body 부분에 데이터를 담아 전송하는 방식이다.

 

따라서 POST 방식이 좀 더 안전하고 대용량 데이터 전송에 알맞다.


HTTP response message는 다음과 같은 구조를 갖는다.

HTTP Response Message

상태 코드는 번호에 따라 다른 의미를 갖는다. 대표적인 상태 코드는 다음과 같다.

  • 200번대: 성공
    • 200 OK
    • 204 No Content: 성공했으나 response로 돌려줄 리소스 없음 (헤더 정보가 의미있을 때 사용)
  • 300번대: Redirection 유도
    • 301 Moved Permanently: 요청한 리소스가 새 URL에 존재
  • 400번대: Client Error
    • 403 Forbidden: 해당 리소스 접근 금지 (권한 없음)
    • 404 Not Found: 해당 리소스 없음
  • 500번대: Server Error
    • 503 Service Unavailable: 유지보수 등의 이유로 서버가 일시적으로 요청 처리 못 할 때

 

'Network' 카테고리의 다른 글

Transport Layer (2) - Reliable Data Transfer  (0) 2020.07.23
Transport Layer (1)  (0) 2020.07.22
Application Layer (4) - P2P  (0) 2020.07.20
Application Layer (3) - Web Cache, DNS, CDN  (0) 2020.07.20
Application Layer (1)  (0) 2020.07.20
Comments