본문 바로가기
SpringBoot

[SpringBoot] API 상태코드, HTTP 헤더, 콘텐츠 네고시에이션, 쿠키, 캐시

by 오렌지마끼야또 2024. 3. 18.
728x90
반응형

 

 

 

이쁘게 그림도 넣고 설명하고 싶지만 지금은 공부만 하는걸로도 시간이 부족하다.. 일단 설명만,,

 


김영한의 모든 개발자들을 위한 HTTP 웹 기본 지식

 

20240215

- HTTP 메소드 활용

  ㄱ) 데이터 전달 방식 : 쿼리 파라미터, 바디

  ㄴ) 정적데이터 조회, 동적데이터 조회, html form 전송, http api 로 전송

 

- API 설계 예시

 

- API 상태코드

  ㄱ) 2xx : Successful 정상처리. 200 OK, 201 Created 생성됨, 202 Accepted 요청은 잘 받았지만 아직 완료되지 않음 ex 배치, 204 No Content 정상처리 했고 클라이언트에게 추가로 보낼 바디 없음 ex 작성 중 저장.

 

  ㄴ) 3xx : Redirection 추가조치 필요.

       a) 영구 리다이렉션. url이 완전 바뀐 경우. 301 http메소드가 get으로 바뀌고 바디가 없어짐. 308 요청 온 http메소드가 그대로 유지되고 바디도 그대로 보냄. 하지만 실무에서는 308과 같이 POST등을 그대로 유지하는 것을 쓰지 않음. get으로 바꾸는게 맞음. /event에서 /new-event로 바뀌면 어차피 요청 데이터가 다 바뀌기 때문에.

        b) 일시적 리다이렉션. url이 일시적으로 바뀜. 302 http메소드가 get으로 바뀌고 바디가 없어짐. 307 http메소드, 바디 유지. 303 http메소드가 get으로 무조건 바뀜.

        c) 일시적 리다이렉션이 필요한 경우 : 주문 완료 후 실수로 새로고침을 눌러 또 주문되는 것을 막기위해 주문완료 정보(get)로 리다이렉트

        d) 기타 리다이렉션. 304 클라이언트에게 리소스가 수정게 없으니 로컬 캐시에 있는 데이터 그대로 쓰게 함. 요청을 받았지만 캐시로 리다이렉트하는 개념. 서버가 응답 시 바디X

 

  ㄷ) 4xx : Client Error 잘못된 문법, 파람 에러 등 서버가 요청 수행 불가

        a) 400 Bad Request API 스펙과 다르거나 파람 에러 등

        b) 401 Unauthorized 클라이언트가 해당 리소스에 대한 인증이 필요함. ex 로그인 해야 볼 수 있는 데이터

        c) 403 Forbidden 서버가 요청을 이해했지만 거부함. ex 로그인은 했지만 관리자만 접근 가능한 데이터

        d) 404 Not Found 리소스가 서버에 없음. 우린 그런 데이터 없는데? 또는 403 대신. 403은 있지만 거부했다는 뜻으로 있다는 사실을 알 수 있음. 그 사실조차 숨기고 싶을 때.

 

  ㄹ) 5xx : Server Error 서버가 정상적으로 처리하지 못함.

        a) 500 Internal Server Error 서버 내부 오류.

        b) 503 Service Unavailable 서비스 이용 불가. 서버가 일시적으로 과부화되거나 특정 작업을 해야해서 요청을 처리할 수 없을 때.

 

- HTTP 헤더

  ㄱ) 표현 헤더

        a) Content-Type : 표현 데이터(바디)의 형식. text/html, application/json;charset=UTF-8 등

        b) Content-Encoding : 표현 데이터의 압축 방식. gzip, identity 등

        c) Content-Language : 표현 데이터의 언어. ko, en, en-US 등

 

  ㄴ) payload 헤더

        a) Content-Length : 표현 데이터의 길이. 5. 하지만 Transfer-Encoding(전송 인코딩)을 사용한다면 그 안에 길이 정보가 있기 때문에 Content-Length를 쓰면 안됨.

 

 

 

 

20240220

1. http 헤더

      - 콘텐츠 네고시에이션(협상) : Accept ~. 클라이언트가 선호하는 것을 헤더에 같이 써서 보냄. 언어, 데이터 타입, charset, 인코딩 등. Quality Value 로 선호도 명시 가능.

       - 서버에서 클라이언트로 응답 방식 : 단순전송, 압축전송, 분할전송, 범위전송

       - referer : 이전 웹페이지 주소. 유입 경로 분석 시 주로 사용.

       - User-Agent : 클라이언트의 애플리케이션 정보(웹 브라우저 정보 등). 어떤 브라우저에서 장애가 발생했는지 파악 가능.

       - Host : 도메인 주소. 필수값.

       - Authorization : 클라이언트 인증 정보를 서버에 전달

 

2. 쿠키 : http의 stateless(무상태) 특징을 보완하기 위해 사용. response에 Set-Cookie: user=홍길동 이라는 헤더를 같이 보냄. 받은 클라이언트(웹브라우저)는 웹브라우저 내부에 있는 쿠키 저장소에 user=홍길동 이라는 key, value를 저장. 이후부터 웹브라우저는 요청을 보낼 때 무조건 Cookie: user=홍길동 헤더를 추가해서 보냄. 단점, 쿠키정보를 항상 추가해서 보내기 때문에 추가적인 네트워크 트래픽이 발생함.

 

3. 캐시 : 서버가 응답 헤더에 cache-control: max-age=60 과 같이 캐시 헤더를 추가하면, 웹브라우저는 웹브라우저 캐시에 60초 동안 저장함. 검증 헤더 : ETag, Last-Modified / 조건부 요청 헤더 : If-None-Match, If-Modified-Since. 원(origin) 서버가 너무 멀리 있으면(미국) 가까운 곳(한국)에 프록시 캐시 서버 운용.

728x90
반응형

댓글