[Server] HTTP 지식 리마인드

easyone·2026년 8월 25일

HTTP 헤더

  • field-name은 대소문자 구분이 없다.

  • HTTP 전송에 필요한 모든 부가정보다.메시지 바디 내용, 바디 크기, 요청 브라우저 정보, 캐시 관리 정보 등등..

  • 필요 시 임의의 헤더 추가가 가능하다.

  • Content-Type: 표현 데이터의 형식 설명, 미디어 타입,문자 인코딩.. image/png 이런식으로도 가능

  • Content-Encoding: 표현 데이터 압축하기 위해 사용한다. 데이터 전달하는 곳에서 압축 후에 인코딩 헤더를 추가한다. 데이터를 읽는 쪽에서 인코딩 헤더 정보로 압축을 해제한다.

  • Content-Lanaguage: 표현 데이터의 자연 언어를 표현한다. ko, en, en-US

API URI 설계를 잘하는법

  • 리소스 식별이 가장 중요하다.
  • 회원이라는 개념이 리소스지 어떤 행위가 리소스가 아니므로 회원 자체를 식별할수만 있게 매핑해야 한다.
  • URI 계층 구조를 활용하고, 상위를 컬렉션으로 보고 복수단어 사용이 권장된다.
  • POST인데 조회 데이터 넘겨야 할때, 애매하면 POST를 쓴다.
  • POST 결과로 새로운 리소스가 생성되지 않을 수도 있다, 컨트롤 URI라고 한다.

HTTP 메서드 속성

  • 안전: 호출해도 리소스 변경이 안된다.

  • 멱등: 한번 호출하든 두번 호출하든 결과가 똑같다.

  • 캐시 가능: 실제로는 GET,HEAD 정도만 캐시로 사용한다. POST,PATCH는 본문 내용까지 고려해야 해서 구현이 쉽지 않다.

  • GET,HEAD,POST,PATCH 제외하면 다 캐시 불가능하다.

  • POST,PATCH,CONNECT는 멱등성 보장이 안된다.

기타 메서드 종류

  • HEAD: GET과 동일하지만 메시지 부분 제외하고 상태줄과 헤더만 반환한다.
  • OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명하고 주로 CORS에서 사용한다.
  • CONNECT: 대상 리소스로 식별되는 서버에 대한 터널을 설정한다.
  • TRACE: 대상 리소스에 대한 경로를 따라서 메시지 루프백 테스트를 수행한다.

503 Service Unavailable

  • 서버가 일시적 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없다.
  • Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수 있다.

쿠키 생명주기

  • expires: 만료일 되면 쿠키삭제
  • max-age: 0이나 음수 지정 시 쿠키 삭제
  • 세션 쿠키: 만료 날짜 생략하면 브라우저 종료시까지만 유지
  • 영속 쿠키: 만료 날짜 입력 시 해당 날짜까지 유지

쿠키 보안

  • Secure: 쿠키는 http, https 구분하지 않고 전송하고 Secure 적용 시 https인 경우메나 전송한다.
  • HttpOnly: XSS 공격 방지용 옵션으로 자바스크립트에서 접근 불가능하고 HTTP 전송에만 사용한다.
  • SameSite: XSRF 공격 방지용 옵션으로 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키를 전송한다.

검증 헤더와 조건부 요청

  • 클라이언트가 예전에 리소스를 받으면서 Last-Modified나 ETag 같은 검증 헤더를 캐시에 같이 저장해 두고, 캐시 max-age가 지나면 데이터 재사용 못하고 확인요청을 보낸다.
  • 이때 If-Modified-Since 또는 If-None-Match 헤더에 아까 저장해둔 값을 실어서 보내서, 해당 버전이 아직 최신인지 묻는다.
  • 서버가 확인해서 데이터가 안 바귀었다면 304 Not Modified를 바디 없이 헤더만 응답한다.
  • 클라이언트는 헤더 정보만 갱신한다. 로컬 캐시 데이터를 재사용하면 되기 때문에..
  • 요약하면 캐시 유효기간은 지났지만 실제 데이터가 안바뀐 경우, 헤더만 주고받아서 트래픽을 아낀다.
profile
백엔드 개발자 지망 대학생

0개의 댓글