귀염둥이의 메모

[Network] HTTP 프로토콜, 요청, 응답, GET, POST ... 본문

CS/네트워크

[Network] HTTP 프로토콜, 요청, 응답, GET, POST ...

겸둥이xz 2021. 8. 27. 17:35
반응형

HTTP (HyperText Transfer Protocol)

  • 클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어진다
  • HTTP/1.1 버전을 가장 많이 쓰고 있음 (Persistent HTTP, Keep-Alive 지원)
  • TCP 기반 (HTTP/3 : 구글이 만든 UDP 기반)
  • 80번 포트를 주로 사용
  • 클라이언트가 Request, 서버가 Response 형식으로 동작
  • Stateless

 

Stateless

  • 서버에 연결하고 요청해서 응답을 받으면 연결을 끊는 방식
  • 말 그대로 상태를 저장하지 않는다
  • 클라이언트의 이전 상태를 알 수 없음
    • 로그인 정보 유지 불가
    • 이를 해결하기 위해 쿠키, 세션 등을 이용

 

Keep-Alive (Persistent HTTP connection)

출처 : https://en.wikipedia.org/wiki/HTTP_persistent_connection#/media/File:HTTP_persistent_connection.svg

HTTP는 하나의 연결에 하나의 요청을 하는 것을 기준으로 설계가 되었다.

문서에 5개의 파일이 있다면 연결 후 다운로드하고 연결을 끊는 과정을 5번 반복한다.

그러면 TCP 통신 과정에서 많은 비용이 소모된다. 이를 해결하기 위해 Keep-Alive (Persistent HTTP connection) 기능이 등장했다

 

 

HTTP 주요 메서드

  • GET ⭐️ : 서버로부터 데이터를 받아올 때 주로 사용
    • 파라미터를 URI에 포함해서 요청
    • 파라미터의 길이 제한이 있음
  • POST⭐️ : 데이터를 생성/수정/삭제할 때 주로 사용
    • 파라미터를 HTTP Body에 포함해서 요청
  • HEAD : HTTPD Header만 응답 요청
  • PUT : 데이터를 생성할 때 사용
  • DELETE : 데이터를 서버에서 삭제할 때 사용
  • OPTIONS : 요청 URI에서 사용할 수 있는 메서드 정보 요청
  • ...

 

 

HTTP Request

  • Request Line :  ex) GET / HTTP/1.1
    • 요청 메서드 : GET, POST,...
    • 요청 URI
    • HTTP 버전
  • Request Header : key : value 형식
    • Accept : 클라이언트가 받을 수 있는 데이터 타입
    • Cookie : 쿠키
    • Content-Type : 메시지 바디 데이터 타입 ex) JSON
    • Content-Length : 메시지 바디 길이
  • Body

 

 

HTTP Response

  • Response Line : ex) HTTP/1.1 200 OK
    • HTTP 버전
    • 상태 코드
    • 상태 메시지
  • Response Header
    • Content-Type : 메시지 바디 데이터 타입 ex) JSON
    • Set-Cookie : 쿠키 설정
    • ETag : 엔티;티 태그
  • Reponse Body
    • Content-Type에 따른 바디
    • ex) { name : '홍길동, age : 20 ,... } => JSON
  • 응답 코드
    • 1xx : 단순 정보
    • 2xx : 클라이언트 요청 성공
      • 200 : OK
      • 201 : Created
      • 202 : Accepted
      • 204 : 성공했으나 돌려줄 게 없음
    • 3xx : 리다이렉션
      • 300 : Multiple choices, 여러 리소스에 대한 결과 목록
      • 301, 302, 303 : 리소스 위치가 변경된 상태
      • 304 : 리소스가 수정되지 않았음
    • 4xx : 클라이언트 요청 오류
      • 400 : Bad Request, 요청 오류
      • 401 : Unauthorized, 권한 없음
      • 403 : Forbidden, 요청 거부
      • 404 : Not Found, 리소스가 없음
    • 5xx : 서버 오류
      • 500 : Internal ServerError
      • 501 : Not Implemented
      • 503 : Service Unavailable
반응형
Comments