본문 바로가기
개발상식

[개발상식] HTTP란

by devjh 2021. 1. 21.
반응형

 

 

 

 

1. HTTP란?

 

HTTP란 HyperText Transfer Protocol의 약자로 html파일을 전송하기 위해 만들어진 프로토콜입니다.

기본 목적은 osi7계층의 가장 위의 계층인 응용계층에서 단순히 html파일을 전송하기 위한 프로토콜이었지만,

지금은 이미지, 영상, 음성, JSON, XML 등 모든 것을 전송하는데 사용하고 있습니다.

 

 

2. HTTP의 버전

 

(1) HTTP/1.1 

  • 1997년에 등장하였습니다.
  • 2014년까지 계속 최신버전으로 유지되었으며 가장 보편화된 버전입니다.

(2) HTTP/2 

  • 2015년에 등장하여 성능이 개선되었습니다.

(3) HTTP/3 

  • 전송계층에서 TCP 대신 UDP를 사용하는 방식으로 진화한 버전입니다.
  • 그동안은 신뢰성이 중요시하여 TCP를 사용하였지만 HTTP3 버전부터는 무거운 TCP 대신에 UDP를 사용합니다.

 

 

3. HTTP의 특징

 

(1) 무상태 프로토콜(stateless)

  • 서버가 클라이언트의 상태를 기억해놓지 않습니다.
  • 클라이언트가 필요한 정보를 서버에게 모두 전달하는 구조입니다.
  • 서버를 쉽게 증설 할 수 있습니다.
  • 필요에 따라 세션을 사용하여 상태를 유지할 수도 있습니다.

(2), 비 연결성의 구조

클라이언트의 요청에 대한 응답을 내려주고 연결을 끊습니다.

연결을 유지하는데 드는 자원을 최소화 하도록 설계되었습니다.

 

 

 

 

4. HTTP 메시지

(1) http메시지란

Body와 Header가 합쳐져 httpMessage가 되어 하위계층으로 이동하게 되며 Header에는 HTTP 컨텐츠 타입, 요청메서드, HTTP Status 등 을 포함하고 Body에는 자원의 정보(JSON/XML 폼 콘텐츠 등)를 포함합니다.

 

(2) http 메시지의 구조

크게는 헤더와 바디로 구분하며 세분화하면

start-line, header, empty line, message body 로 구분됩니다.

 

 

(3) http 요청 메서드

  • start-line : HttpMethod (공백) URL의 query, path (공백) http 버전 
  • header : HOST(도메인, ip주소), Content-Type(바디의 종류) 등등 요청에 필요한 부가정보를 넣어줍니다.
  • empty line : 한줄 비워줘야합니다.
  • message body : 본문을 의미하며 있을수도있고 없을수도 있습니다.

(3) response Message의 구조

  • start-line : http 버전 (공백) http 응답코드
  • header : Content-Type(바디의 종류), 바디의 크기, 인증, 캐시정보 등등 응답에 필요한 부가정보가 들어갑니다.
  • empty line : 한줄 비워줘야합니다.
  • message body : 본문을 의미하며 html, json, 이미지, 영상 등 요청에 대한 본문이 들어갑니다.

 

5. HTTP 상태코드

 

(1) 100번대(information) - 요청 수신, 처리중

200번이 OK이길래 100번대는 안쓰는줄 아는 사람이 있을정도로 100번대는 안보입니다.

그냥 information이라는것만 알면 될 것 같습니다. 

 

(2) 2xx(Success) 요청 정상 처리

   - 200번으로 모든걸 통일하는 경우도 많고 201번까지는 자주 사용하는 편 입니다.

   

  • 200 OK
    • 요청성공을 뜻합니다.
    • 가장 흔하게 접하는 상태코드중 하나입니다.
  • 201 Created
    • 리소스가 생성됐음을 알립니다. 
    • POST로 리소스를 생성했을 때 자주 사용합니다.
  • 202 Accepted
    • 요청이 정상적으로 접수되었고 처리를 하겠다고 알립니다.
    • 배치를 예약하는경우 내려줍니다.
  • 204 NoContent
    • 요청은 수행했지만 응답 페이로드 본문에 보낼 내용은 없다는 것을 뜻합니다.
    • 클라이언트가 현재 페이지에서 벗어나지 않아도 된다는 것을 의미하기도 합니다.

 

(3) 3xx(Redirection) 요청을 완료하기위해 블라우저의 추가 조치 필요

    - (Location 헤더가 존재하여 해당 위치로 이동하는 특징이 있습니다.)

    - 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 변경된 경우

    - 일시 리다이렉션 : 일시적인 변경으로 게시판 글 등록후 게시판 글 목록으로 이동(PRG : Post/Redirect/Get)

    - 특수 리다이렉션 : 결과 대신 캐시를 사용

    - 리다이렉션시 본문을 유지하는 경우보다는 대부분 GET으로 메서드를 바꾼 후 본문도 날리는 경우가 일반적입니다.

    - 상태코드는 모호한 302를 대신 303 307이 등장, 같은원리로 301대응으로 308 등장하였습니다.

    - 그러나 303 307보다는 302를 사용하는경우가 가장 많으며 302를 사용해도 무관합니다.

 

  • 301(Moved Permanently) - 영구 리다이렉션
    • 리다이렉트 요청 메서드가 GET으로 변하고 본문을 제거합니다.
    • 게시판글쓰기를 했는데 게시판 글쓰기 URL이 변경된 경우 게시판목록이나, 글쓰기화면으로 다시 이동되는경우가 이에 해당합니다.
  • 308(Pernament Redirect) - 영구 리다이렉션
    • 리다이렉트 요청 메서드가 유지되면서 본문을 유지하는 경우가 많습니다
  • 303(See Other) - 일시 리다이렉션
    • 리다이렉트시 요청 메서드가 GET으로 바뀌고 본문을 제거하는 경우가 많습니다.
  • 307 (Temporary Redirect) -일시 리다이렉션
    • 리다이렉트 요청 메서드와 본문을 유지합니다.(메서드를 변경하면 안됩니다.)
  • 302(Found) - 일시 리다이렉션
    • 리다이렉트 요청 메서드가 GET으로 변하고 본문이 제거될 수도 있습니다.
    • 일시 리다이렉션 302의 기능 보완을 위해 303과 307이 파생되었습니다.
    • 302와 307 대신 302를 사용하는 경우도 많습니다.
  • POST 요청을 보내자마자 새로고침을 눌러서 중복요청이가는경우?
    • 일시적인 리다이렉션 PRG를 사용합니다.
    • POST 주문후에 결과화면을 GET 메서드로 리다이렉트 시킵니다.
    • 302나 303을 주면서 Location헤더에 위치를 전달하면
    • 새로고침을 해도 GET으로 조회만 됩니다.
  • 304(Not Modified)
    • 캐시를 목적으로 사용합니다.
    • 클라이언트에게 리소스가 수정되지 않았음을 알려줍니다.
    • 클라이언트는 캐시를 재사용하며 캐시로 리다이렉트합니다.
    • 304 응답은 바디를 포함해서는 안됩니다.(로컬캐시 사용)

(4) 4xx(Client Error) - 클라이언트의 요청에 잘못된 문법이 있음

 

  • 400(Bad Request) - 클라이언트가 잘못된 요청을 함
    • 요청 구문, 메시지등등의 오류를 포함합니다.
    • ex) 요청 파라미터가 잘못된 경우
  • 401(Unauthorized) - 인증이 없음(영어해석은 인가가없음)
    • 인증의 에러
  • 403(Forbidden) - 인가가없음
    • 인가의 에러
  • 404(Not Found) - 요청 리소스를 찾을 수 없음
    • 클라이언트가 권한이 부족한 상태로 리소스에 접근할때 해당 리소스를 숨기고 싶을때도 적용됩니다
  • 405(Method Not Allowed)
    • 리소스에 맞지않는 잘못된 Method를 사용
  • 408
    • 클라이언트의 타임아웃

 

(5) 5xx(Server Error) 서버의 문제로 오류 발생

  •  503(Service Unavaliable)
    • 서버가 일시적인 과부하로 서비스 이용 불가
  • 504
    • 서버의 타임아웃




반응형

댓글