HTTP Method 와 Status Code

김하밍·2023년 7월 12일
1

HTTP

목록 보기
3/5

리소스란 무엇일까요?


  • URL을 검색해서 받아온 결과물
  • TEXT, HTML, JSON, XML
  • IMAGE, 음성, 영상, 파일
  • 서버에서 전달받은 데이터
    ...

웹 브라우저 요청 흐름


검색했을 때, 검색한 결과 데이터를 가져오기 위해 구글 서버 주소를 찾아 HTTP 요청 메시지를 패킷 안에 담아 구글 서버에게 전달합니다.
-> 구글 서버는 전달받은 메시지를 분석해서 HTTP 응답 메시지를 패킷에 담아 웹 브라우저에 전달합니다.
-> 웹 브라우저는 전달받은 데이터로 화면을 보여줍니다.

HTTP Method

주요 메서드


  • GET: 리소스 조회
  • POST: 요청 데이터 처리, 주로 등록에 사용
  • PUT: 리소스를 완전히 대체, 해당 리소스가 없으면 생성
  • PATCH: 리소스의 일부분만 변경
  • DELETE: 리소스 삭제

GET
클라이언트가 /users/10 데이터를 요청
-> 서버에서 해당 메시지에 맞는 데이터를 찾아 클라이언트에게 보내주게 된다
-> HTTP 응답 메시지의 바디 부분에서 해당 데이터 확인할 수 있다

POST
클라이언트에서 서버의 users에 데이터 요청
-> 서버에서는 users에 신규 리소스 식별자를 생성해서 데이터를 등록한다
-> header 필드에 Location 값이 추가된 응답 데이터를 보내준다
-> Location은 신규 리소스 주소를 가리키기 때문에 /users/11
-> 신규 리소스 생서에 대한 상태코드인 201이 포함된 것을 함께 확인할 수 있다

PUT
클라이언트에서 users/11에 데이터를 요청
-> 서버에서는 원래 있던 데이터를 요청받은 데이터로 변경한다
-> 만약에 필드값이 없는 데이터를 보내게 되면, 기존 필드값이 사라지는 것
(POST 와의 차이점❗️)

POST vs PUT
PUT: 리소스의 주소를 정확히 알고 있어야 합니다. /users/11
POST: /users 으로 가능합니다.

PATCH
변경하고자 하는 데이터를 서버에 요청한다
-> 해당 부분만 변경된다

DELETE
클라이언트에서 요청을 보내면
-> 해당 리소스 삭제한다

HTTP 상태 코드


클라이언트가 보낸 요청의 처리가 어떻게 됐는지 상태를 응답에서 알려줍니다.

  • 100번대 (정보): 요청을 받았으며 프로세스를 계속 처리중
  • 200번대 (성공): 요청을 성공적으로 처리
  • 300번대 (리다이렉션): 요청 완료를 위해 웹 브라우저에서 추가 작업 조치가 필요
  • 400번대 (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
  • 500번대 (서버 오류): 서버가 정상 요청을 처리하지 못함
- 200 OK (자주 볼 수 있음 ⭐️)
요청 성공
- 201 Created (자주 볼 수 있음 ⭐️)
요청 성공해서 새로운 리소스가 생성된다
- 202 Accepted
요청을 수신했지만 아직 처리가 완료되지 않음
- 204 No Content
요청을 성공했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect

리다이렉션


300번대 응답 코드는 요청 완료를 위해 웹 브라우저에서 추가 작업 조치가 필요합니다.

웹 브라우저는 300번대 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동합니다. (자동 리다이렉트)

자동 리다이렉트
Location: /새로운 url 헤더가 300번대 응답의 결과로 포함되어 있다는 것은 /coke --> /zero-coke 으로 변경되었다는 것입니다. 변경된 주소를 Location 헤더로 보내줄 수 있다면, 현재 Location 위치로 자동으로 보내줍니다

리다이렉션의 종류


  • 영구적인 리다이렉션: 특정 리소스의 URI가 영구적으로 이동
  • 일시적인 리다이렉션: 일시적인 변경
  • 특수한 리다이렉션: 결과 대신 캐시를 사용

실제 구현


  • 304 Not Modified
    : 똑같은 리소스 요청했을 때, 새롭게 다운로드 하지 않고
    캐시에 저장되어있는 똑같은 리소스 사용합니다.
    웹 브라우저가 계속되는 다운로드를 하지 않아 쾌적한 웹 브라우저 제공 가능합니다.

해당 리소스가 있는 같은 리소스인지 어떻게 알 수 있을까요 ?
Response Headers의 etag 값 == Request Headers의 if-none-match: etag 값 을 비교하여 알 수 있습니다.

etag 값이 다르다면, 새로운 리소스를 보내줘야 합니다.
똑같다면, 캐시에서 해당 리소스 사용하면 됩니다.

서버에서 비교하여 응답 코드를 304 또는 200 으로 보내주게 됩니다.

profile
나만의 언어로 기록하며 성장하기 !

1개의 댓글

comment-user-thumbnail
2023년 7월 15일

많은 도움이 되었읍니다 ^^..

답글 달기