HTTP 메세지 개관

HTTP-message = start-line
				\*( header-field CRLF )
				CRLF
				[ message-body]
				// CRLF = 개행

헤더 필드는 여러개이고 개행 문자로 구분됨

HTTP 요청 헤더 - start-line

  • HTTP 메서드 ( 공백 ) 요청 대상 ( 공백 ) HTTP 버전 ( 개행 )
  • GET /restapi/v1.0 HTTP/1.1

HTTP 메서드 : 서버에게 요청할 동작

  • GET : 자원 조회
  • POST : 요청할 데이터 처리
  • PUT : 자원 덮어쓰기
  • PATCH : 자원 부분 변경
  • DELETE : 자원 삭제
  • HEAD : GET과 동일하지만 메시지 부분(body 부분)을 제외하고, 상태 줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

HTTP 요청 헤더 - massage-body GET 요청

  • 일반적으로 쿼리 문자열을 사용하되, 본문은 없음

POST 요청

  • 메세지 본문으로 처리할 데이터 전송
  • 메세지 본문에 해당하는 데이터를 처리하도록 요청
  • 어떻게 처리할지는 서버가 결정 ( e.g. 새 자원 생성, 가공 )

PUT 요청

  • 자원 덮어쓰기
  • 자원이 있다면 본문으로 보낸 데이터로 대체
  • 자원이 없다면 본문으로 보낸 데이터로 생성
PUT
response

PATCH 요청

  • 자원의 일부분 변경
PATCH
원본
결과

안전 : 자원의 변경되지 않는지 멱등성( Idempotent ) : 여러번 요청을 보내도 첫 요청과 같은지 캐시 가능 : 응답 결과를 캐시해서 사용할 수 있는가?

응답 코드

  • 2XX : 성공
    • 200 OK : 요청 성공 ( GET )
    • 201 Created : 요청 성공 , 새로운 자원이 생성됨 ( POST )
    • 202 Accepted : 요청 성공 , 처리는 아직 미완료
    • 204 NO Content : 요청 성공 , 응답할 데이터 없음
  • 3XX : 리다이렉션 ( 이 요청을 처리하려면 추가적인 처리가 필요함 )
    • 응답의 Location 헤더를 통해 특정 위치로 이동
  • 4XX : 클라이언트 오류
    • 401 Unauthorized : 미인증
    • 403 Forbidden : 금지된 자원에 접근 ( 접근 권한이 없음 )
    • 404 Not Found : 요청한 자원 없음 ( 공개한 자원 아님 )
  • 5XX : 서버 오류
    • 500 Internal Server Error : 서버 오류
    • 503 Service Unavailable : 현재 이용 가능하지 않음

대표적인 헤더 정보

  • Host : 요청 호스트에 대한 호스트명 + 포트 정보
  • Date : 메세지 생성 시간
  • Referer : 직전에 머물렀던 URL
  • User-Agent : 클라이언트 소프트웨어 , 브라우저 명칭과 정보
    • 디버깅 할 때 활용됨 : ex) 특정 브라우저에서 에러
  • Server : 서버 소프트웨어 명칭과 정보
  • Connection : keep-Alive 일 경우 킵 얼라이브
  • Location : 리다이렉트시 이동할 경로
  • Content-Type : HTTP 요청 및 응답에서 사용될 컴텐츠의 유형
    • MIME 타입으로 명시 ( 표기법 )
    • text/html; charset=utf-8 : HTML 문서 , 인코딩 형식은 utf-8
    • application/json : JSON 형식 데이터 , API Request-Response에서 주로 사용
    • image/png : png 타입 이미지 데이터
    • text/plain; charset=utf-8 : 텍스트 파일 데이터 , 인코딩 형식은 utf-8
    • application/xml : xml 데이터
  • Content-Encoding : 데이터의 인코딩/압축 방식
    • gzip : gzip 압축
    • deflate : deflate 압축
    • br : brotli 압축
    • identity : 압축하지 않음
  • Content-Length : 데이터의 바이트 단위 길이
  • Content-Language : 데이터의 언어
    • ko
    • ko-KR
    • en-US

HTTP 헤더 형식 header-field = field name ”:” field-value

  • 메세지 전송에 필요한 부가 정보

Info

MIME

  • Multiprupose Internet Mail Extensions
  • 문서 , 파일 또는 바이트 집합의 성격과 형식을 나타냄

MIME 구조

  • type / subtype
  • 일반적으로 / 로 나눠진 두 부분으로 구성됨
  • type
    • video , text 와 같은 데이터 타입이 속하는 일반 카테고리
  • subtype
    • plain , html , calendar etc
    • 정확한 데이터 종류
[추가 정보](https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types)

캐시

네트워크에서 캐시란?

  • HTTP는 상태를 유지하지 않는다.
  • 그렇다면 자원을 요청할 때마다 자원은 새롭게 응답될까?

네트워크에서 캐시

  • 서버의 지연을 줄이기 위해 웹 페이지, 이미지 등의 자원 사본을 임시 저장하는 웹 기술
  • 캐시된 자원이 저장되는 공간 : 클라이언트(브라우저) 혹은 특별한 서버 (캐시 서버 , 프록시 서버)

cache-control 헤더

  • cache-control 헤더로 캐시 기능을 알린다
  • cache-control : max-age = 숫자(초) 캐시한 자원의 지속 시간
  • cache-control : no-cache 캐시 가능한 자원이나, 항상 origin 서버에 검증하기
  • cache-control : no-store 캐시하면 안될 자원

Last-Modified 헤더

  • 해당 자원이 언제 마지막으로 변경되었는지를 알림

클라이언트는 요청시 If-modified-since 헤더로 특정 시점 이후 자원 변경 여부를 묻는다. 만일 변경되었다면 다시 다운로드 만일 변경 되지 않았다면 서버는 304 Not Modified 응답을 보낸다.

Etag를 통해 자원의 변경 여부를 감지 할 수 있다 서버는 캐시된 자원이 Etag라는 식별 문자를 붙이고 (Etag 는 버전 ) 클라이언트는 If-Non-Match 헤더를 통해 해당 Etag가 변경되었는지를 물어본다

쿠키

  • HTTP의 무상태성을 보완
  • 서버로부터 받은 정보를 클라이언트 측(웹 브라우저)에 임시 저장되는 이름=값 형태의 데이터
  • 유효 기간이 있음
  • 쿠키를 전송할 도메인과 경로가 정해져 있음

쿠키(cooke) 확인

  • 브라우저 개발자 도구 Application Storage Cookies

  • 서버가 Set-Cookie 헤더로 쿠키를 전달하면 클라이언트는 쿠키를 저장하여 다음 HTTP 요청의 Cookie 헤더로 활용한다.

  • Set-Cookie : domain=example.com

  • example.com 에 접근할 때 쿠키 활

경로를 나타 낼 때

  • Set-Cookie : path=/
  • path에 명시된 경로 하위 경로에서 쿠키 활용
  • path=/posts

유효기간 설정

  • Set-Cookie : expires=Wed, 10 Aug 2023 12:00:00 GMT
    • 해당 날짜에 폐기
  • Set-Cookie : max-age=1000
    • 해당 횟수만큼 사용

쿠키는 보안에 민감하다 쿠키 정보를 탈취당하지 않도록 주의가 필요함

쿠키(Cookie)와 세션(Session) 쿠키의 저장/관리 주체가 클라이언트(브라우저) 세션의 저장/관리 주체는 서버

서버는 클라이언트를 식벼할 수 있는 세션 ID 를 제공하고, 클라이언트는 서버에게 세션 ID를 (쿠키로) 넘겨 호스트를 식별하게 할 수 있다

쿠키(Cookie)의 보안 기능

  • Secure
    • HTTPS인 경우에만 전송
  • HTTPOnly
    • 자바스크립트에서 접근 불가 (document.cookie)
    • XSS 공격 방지