본문 바로가기

JavaScript

JavaScript - HTTP 메소드

HTTP 메서드란, 클라이언트와 서버 사이에 이루어지는 요청과 응답데이터를 전송하는 방식을 말한다.

서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야할 동작을 지정하는 요청을 보내는 방법이다.

 

주요 종류는 총 9가지이다.

 

주요메서드 5가지

GET

  • 리소스를 조회한다.
  • 오직 데이터를 받기만 한다.
  • 데이터는 쿼리스트링을 통해 전달할 수 있다.
  • 쿼리스트링 외에 메세지 바디를 통해 데이터를 전달할 수도 있지만 권장하지 않는다.
  • post도 데이터 조회시 사용될 수 있지만, get메서드는 캐싱이 가능하기때문에 get을 사용하는 것이 좋다.

POST

  • 전달한 데이터를 처리/생성을 요청하는 메서드.
  • 메시지바디를 통해 서버로 요청데이터를 전달하면 서버는 요청 데이터를 처리하여 업데이트한다.
  • 전달된 데이터로 신규리소스를 등록하거나 프로세스를 처리한다.

PUT

  • 리소스를 대체(수정)하는 메서드
  • 전달하는 데이터가 리소스에 있으면 덮어쓰고, 없으면 새로 생성한다.
  • 데이터를 대체해야하기때문에 클라이언트에서 리소스의 구체적인 전체 경로를 지정해줘야한다.

PATCH

  • 리소스의 일부분을 수정하는데 사용한다.
  • patch를 지원하지 않는 서버에서는 post를 사용할 수 있다.

DELETE

  • 특정 리소스를 삭제한다.
  • 상태코드는 대부분 200을 사용하고, 상황에 따라 204를 사용한다.

 

기타 메서드 4가지

HEAD

  • get메서드의 요청과 동일한 응답을 요구하지만, body를 리턴하지 않고 상태줄과 헤더만 리턴한다.
  • 응답의 상태코드만 확인할 때와 같이, resource를 받지 않고 오직 찾기만 원할때 사용한다.
  • 서버의 응답헤더를 봄으로써 Resource가 수정되었는지 확인할 수 있다.

OPTIONS

  • 예비요청에 사용되는 메서드이다.
  • 본요청을 하기 전에 안전한지 미리 검사하는 용도로 사용된다.
  • 서버의 지원가능한 HTTP메서드와 출처를 응답받아 CORS정책을 검사하기 위한 요청이다.

CONNECT

  • 대상 자원으로 식별되는 서버에 대한 터널을 설정

TRACE

  • 서버에 도달했을 때의 최종 패킷의 요청 패킷내용을 응답 받을 수 있다.
  • 요청의 최종 수신자는 반드시 송신자에게 200응답의 내용으로 수신한 메세지를 반송해야한다.
  • 최초 클라이언트 요청에는 body가 포함될 수 없다.

 

HTTP 메소드의 속성

안전(Safe Methods)

  • 계속해서 메소드를 호출해도 리소스를 변경하지 않는다는 뜻이다.
  • 주요 메소드중에는 GET 메소드가 안전하다고 볼 수 있다.

멱등(Idempotent Methods)

  • 메소드를 계속 호출해도 결과가 똑같다는 뜻이다.
  • Get, PUT, DELETE는 멱등하다고 볼 수 있다.
  • POST나 PATCH는 구현방법에 따라서 멱등하지 않을 수도 있다.( 값을 1 증가시키는 등의 작업을 할 경우)

캐시가능(Cacheable Methods)

  • 캐시가능하다는 말은 말 그대로 캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻이다. 
  • GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET과 HEAD만 주로 캐싱이 쓰인다고 한다.


HTTP 상태코드란

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

보통 100~500번대를 사용한다.

  • 1xx (Informational): 요청이 수신되어 처리중
  • 2xx (Successful): 요청 정상 처리
200 OK : 요청 성공
201 Created : 요청 성공해서 새로운 리소스가 생성됨
202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

 

 

 

  • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
304 Not Modified : 캐시를 목적으로 사용
307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)

 

 

 

  • 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
404 Not Found : 요청 리소스를 찾을 수 없음

 

 

 

  • 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
503 Service Unavailable : 서비스 이용 불가

 

 

 

POST 와 GET의 차이

  • GET에는 URL에 데이터의 정보가 들어있기때문에 POST가 조금 더 안전하다고 볼 수 있다.
  • GET은 캐싱을 하기때문에, 여러번 요청시 저장된 데이터를 활용하기에 조금 더 빠를 수 있다.

POST와 PUT의 차이

  • POST는 새로운 데이터를 계속 생성한다.
  • PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 매 요청마다 데이터가 생기진 않는다.

PUT과 PATCH의 차이

  • PUT은 지정한 데이터를 전부 수정하고, 멱등하다.
  • PATCH는 일부분만 수정하고, 멱등하지 않는다.

 

 

 

참조

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

https://velog.io/@haron/HTTP-%EB%A9%94%EC%84%9C%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%84%EB%8A%94%EB%8C%80%EB%A1%9C-%EB%A7%90%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94

'JavaScript' 카테고리의 다른 글

JavaScript - 데이터타입, 연산자  (1) 2023.10.11
JavaScript - 모던 자바스크립트 정의  (1) 2023.10.11
JavaScript - this  (1) 2023.10.07
JavaScript - 이벤트 핸들링  (0) 2023.10.03
JavaScript - 노드 선택  (0) 2023.10.03