HTTP - 2 - basic
포스트
취소

HTTP - 2 - basic

## 인프런 김영한님의 강의 내용 기록 ##

HTTP

HyperText Transfer Protocol

모든 것이 HTTP
HTTP 메시지에 모든 것을 전송한다
HTML, TEXT, MEDIA, JSON, XML (API)
거의 모든 형태의 데이터 전송 가능
서버 간 데이터 송수신에도 대부분 HTTP


지금은 HTTP 시대 !


HTTP/0.9 (1991) : GET 메서드만 지원, HTTP 헤더 x
HTTP/1.0 (1996) : 메서드, 헤더 추가
HTTP/1.1 (1997) : 가장 많이 사용. 지금 가장 중요한 버전 현재 스펙은 RFC7230 (2014)~
HTTP/2 (2015) : 성능 개선
HTTP/3 (진행중) : TCP 대신에 UDP 사용, 성능 개선


기반 프로토콜
TCP : 1.1, 2 || UDP : 3
3way handshake와 과한 헤더 정보 때문에 UDP를 선호하는 추세

  • 클라이언트와 서버 구조로 이루어짐
  • 클라이언트가 HTTP 메시지를 통해서 서버로 요청을 보냄
  • 클라이언트는 서버의 응답이 올 때까지 무작정 기다림

HTTP 시대의 특징

  • 클라이언트와 서버 구조
    클라이언트와 서버 개념이 분리되어 독립적인 개발이 가능하다는 점이다.
    클라이언트는 UI만 구성하면 되고 서버에는 데이터처리, 비즈니스 로직을 몰아넣는다.

  • 무상태 프로토콜 지향 (Stateless) 서버가 클라이언트의 상태를 보존하지 않는다.
    클라이언트 서버 아키텍쳐에서 수평 확장(Scale-out)에 유리
    클라이언트는 요청 파라미터에 서버가 필요한 데이터를 모두 넘기면 됨

1
2
3
하지만 예로, 로그인 기능이 있다면 완전한 Stateless에는 한계가 있다.   
일반적으로 브라우저 쿠키와 서버 세션등을 사용해 상태를 유지한다.   
물론 가능한 stateless하게
  • 비연결성
    연결을 유지한다면 서버 자원이 지속적으로 소모된다.
    TCP/IP 구조를 예로, 응답 후 바로 연결을 끊는다면 이를 극복한다.
    이또한 3way-H 시간과 무수한 연결-종료 과정의 한계에 부딪힌다.
    지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결하고 상위 버전에선 더 많은 최적화가 이루어지고 있다.




HTTP 메시지
메시지 구조
[ start-line | header | empty line | message body ]

  • start-line

-request-

1
request-line: method SP(space) request-target(path) SP HTTP-version CRLF(enter)

method : GET 등
GET : 리소스 조회, POST : 요청 내역 처리

request-target(path)
absoulte-path와 query parameter
ex) /search?q=hello&hI=ko


-response-

1
status-line: HTTP-version SP status-code SP reason-phrase CRLF

status-code : 200, 400, 500 . . .
요청 성공, 실패를 나타냄

reason-phrase : OK . .
사람이 알아볼 수 있는 문자열(status-code에 대한)


  • header - > HTTP 전송에 필요한 모든 부가정보(meta data)를 포함

header-field
field-name “:” OWS(띄어쓰기 허용)
field-value OWS


  • message body - > 실제 전송할 데이터

HTML 문서, 이미지, 영상, JSON 등등
byte로 표현할 수 있는 모든 데이터 전송가능



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.