CS/네트워크

[네트워크]HTTP

빙응이 2024. 1. 2. 19:32

📝HTTP - HyperText Transfer Protocol 

모든 것이 HTTP

HTTP는 인터넷에서 데이터를 주고 받기 위한 프로토콜 중 하나이다. 

현재의 HTTP는 모든 것을 전송한다.

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML(API)
  • 거의 모든 형태의 데이터를 전송한다. 
역사
  • HTTP/0.9 1991년 : GET 메서드만 지원, HTTP 헤더X
  • HTTP/1.0 1996년 : 메서드, 헤더 추가
  • HTTP/1.1 1997년 : 가장 많이 사용
  • HTTP/2    2015년 : 성능 개선
  • HTTP/3    진행중 : TCP 대신에 UDP로 커스텀 성능 개선 
기반 프로토콜
  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3 
    • 이유 TCP는 3 way때문에 속도에 대한 한계가 있기 때문에 UDP를 사용한다. 

📝HTTP 특징

클라이언트 서버 구조에서 주로 사용
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어서 응답하는 구조 
    • 팁 : 서버에서 모든 기능을 분담하고 클라이언트는 UI만 신경쓴다. 

무상태성 프로토콜
  • 서버가 클라이언트의 상태를 보존하지 않는다. 
  • 즉. 클라이언트 -서버는 요청 응답으로 이루어진 request 스코프로 관리되며 스코프 종료 시 데이터는 유지되지 않는 것과 같음
  • 만약 로그인 같은 상태 유지가 필요한 경우 쿠키나 세션을 이용해서 유지한다.
비연결성
  • TCP, IP 모델은 연결을 유지하는 모델이다. 
    • 서버는 연결을 계속 유지하여 리소스에 대한 낭비가 심하다. 
    • 그래서 HTTP는 요청을 주고 받을 때만 연결을 한다. 
    • HTTP는 기본적으로 연결을 유지하지 않는 모델이다.
  • 비연결성의 한계
    • 통신마다 TCP/IP 연결을 새로 맺어야 한다. - 3 way handshake 시간 추가
    • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 다양한 자원이 다운로드 된다. 
    • 지금은 HTTP 지속 연결(Persistent Connection) 로 문제 해결 
      • 간단하게 말하면 한개의 TCP로 여러 응답을 처리한다.
    • HTTP2 , HTTP3에서 최적화되었다. 
HTTP 메시지
start-line 시작라인
header 헤더
empty line 공백 라인 
message body

HTTP 메시지 구조 

  • 시작 라인(요청 메시지) 
    • start-line = request-line
    • request-line = method SP(공백) request-target SP HTTP-version CRLP(엔터)
      • HTTP 메서드
        • GET.,POST, PUT, DELETE
        • 서버가 수행해야 할 동작 지정 
      • request-target 
        • /경로로 지정해서 지정
      • HTTP-version 
  • 시작 라인(응답 메시지)
    • start-line = status-line
    • status-line - HTTP-version SP status-code SP reason-phrase CRLF
      • HTTP -version
      • HTTP 상태 코드 : 요청 성공, 실패를 나타냄
        • 200 : 성공 400: 클라 요청 오류 500: 서버 내부 오류
      • 이유 문구(reason-phrase): 사람이 이해할 수 있는 짧은 상태 코드 설명 글 
  • HTTP 헤더의 용도
    • HTTP 전송에 필요한 모든 부가정보가 들어간다.  
  • HTTP 메시지 바디
    • 실제 전송할 데이터가 전송됨
단순함, 확장 가능 

 

  • HTTP는 매우 단순하다.
  • 크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술이다.