HTTP 메시지의 구조와, 요청 메소드 및 응답 코드

junu-devlog·2021년 6월 23일
0

HTTP 정보는 HTTP 메시지로부터 나온다!

HTTP 메시의 구조

img

  • Http 통신에서 교환되는 정보를 보통 Http 메시지라고 함

    • 리퀘스트 메시지와 리스폰스 메시지의 총 2가지가 존재
  • Http 메시지는 복수행 의 데이터로 구성된 텍스트 문자열의 형태이며 크게 메시지 헤더메시지 바디 로 구성되어있으며, 각각은 개행 문자(CR+LF) 로 구분됨

    • 혹은 메시지 헤더를 시작줄과 헤더 블록(필드)로 나눌 수도 있음
    • 메시지 헤더 : 서버와 클라이언트가 반드시 처리해야 하는 리퀘스트나 리스폰스의 내용 및 속성이 정의되어 있음
      • HTTP 통신에 필요한 모든 부가정보가 헤더에 명시 되어 있는 것
      • ex) 메시지 바디의 크기, 인증, 클라이언트 정보, 캐시 관리 정보 등등
    • 메시지 바디 : 전송되는 데이터 그 자체가 들어 있음
      • 여기에는 HTML 문서와 json 형식의 데이터에서부터 이미지 및 영상에 이르기까지 byte로 표현 가능한 모든 데이터가 전송될 수 있음
  • 리퀘스트 헤더의 첫 시작 라인은 리퀘스트 라인(요청 라인) 으로 구성됨

    • 리퀘스트 라인(요청 라인) : 요청에 사용될 메소드(GET, POST 등)와 요청 URI, 그리고 사용되는 HTTP 버전 정보가 명시되어 있음
    GET/search HTTP/1.1 
  • 리스폰스 헤더의 첫 시작 라인은 상태 라인(응답 라인) 으로 구성됨

    • 상태 라인(응답 라인) : 리스폰스 결과를 나타내는 상태코드와 설명, 그리고 사용된 HTTP 버전 정보가 명시되어 있음
    HTTP/1.1 200 OK
  • keep-alive 헤더 : 아래와 같이 명시되며, 연결을 계속 유지하겠다는 것을 의미함(HTTP 1.1부터 기본적으로 동작)
    Connection:Keep-Alive
    Keep-Alive: timeout=5, max=1000
  • 기본적으로 Http 통신은 TCP 통신을 기반으로 동작하는데, TCP 통신은 일단 전송하면 연결이 끊어지므로 Http 역시 전송이 끝나면 연결이 끊어지며 이후의 일에 대해서는 신경쓰지 않음
  • 따라서 이러한 문제를 막고자 Keep-Alive 헤더가 사용되는 것이며, 특정 시간(timeout) 동안 최대 요청(max) 의 수를 명시함
     

자주 사용되는 HTTP 메소드 및 응답(상태) 코드

  • HTTP 메소드

    • GET : 서버로부터 특정 정보(혹은 문서)를 가져올 때 사용
    • HEAD : GET과 비슷한 동작을 하되, 서버의 응답에는 헤더만 포함되며 본문은 존재하지 안흥ㅁ
      • 단순히 리소스의 존재 및 변경 여부와 같은 정보가 필요한 경우에는 본문에 리소스를 포함시키지 않고 헤더의 확인만으로도 충분하기 때문
      • 단, 서버개발을 할 경우에는 HEAD 요청으로 응답받은 헤더와 GET 요청으로 응답받은 헤더의 정확한 일치를 항상 염두에 둬야 함!
    • POST : 서버가 처리해야 할 데이터를 전송하며, 보통 새로운 데이터를 서버에 입력할 경우 사용
      • 데이터는 메시지 바디에 포함되므로(ex. 요청 json), 헤당 메소드 사용시에는 본문이 존재
    • PUT : 서버에 존재하는 데이터를 수정하고자 할 경우 사용(새 문서를 만들거나, 요청한 본문으로 교체)
      • 마찬가지로 본문이 존재하며, POST와 달리 멱등성(Idempotence) 을 지님(GET, DELETE도 동일)
    • PATCH : PUT과 마찬가지로 자원의 수정을 위한 메소드지만, 일부만을 수정할 경우에 사용됨
      • PUT의 경우 요청을 일부만 보낼 경우에는 나머지 부분은 default값으로 수정되는 문제가 있음
        • 자칫 보내지 않은 데이터가 null로 변경될 수 있기 때문에, 변경되지 않는 데이터도 모두 전달해야 함
      • 반면, PATCH의 경우에는 요청 본문에 포함된 부분만 수정됨
    • DELETE : 서버에서 특정 정보(혹은 문서)를 제거
      • 하지만 서버가 요청을 무시할 수도 있기 때문에 클라이언트는 항상 삭제가 정상적으로 수행되는 것을 보장받지 못함
  • 상태 코드

    • 100-199 : 정보
    • 200-299 : 성공(200 OK)
    • 300-399 : 리디렉션
    • 400-499 : 클라이언트 에러(404 Not Found)
    • 500-599 : 서버 에러(500 Internal Server Error)
profile
배운 것들을 꾸준히 기록하자

0개의 댓글