[네트워크] HTTP 메서드, GET과 POST의 차이점

hyyyynjn·2021년 10월 1일
0

면접대비

목록 보기
17/31
post-thumbnail

HTTP 요청 메서드

클라이언트가 웹서버에게 요청하는 목적 및 그 종류를 알리는 수단의 메소드이다.

  • 요청 메소드의 위치 : HTTP 요청 메세지의 첫째줄
    GET /dir/page.html HTTP/1.1

GET : 리소스 취득 ⭐

URL(URI) 형식으로 웹서버측 리소스(데이터)를 요청하는 메소드

  • Conditional GET
    • 최초 리소스를 요청할 때는 요청만 하고
      그 이후의 요청 때는 첫 요청의 응답과 함께 온 HTTP 헤더 정보를 참고하여 변경사항이 있는지 물어보는 GET 이다.
    • 웹브라우저의 캐싱 기능에 도움을 준다.

HEAD : 메세지 헤더 취득

GET 메소드와 비슷하게 서버에 존재하는 데이터를 요청하지만 header만 가져온다

  • GET과 비슷하나, 실제 문서를 요청하는 것이 아니라 문서 정보를 요청한다.
  • 이에 따라 HTTP 응답 메시지에 본문 (Body) 없이 HTTP 헤더 정보만 보낸다.

POST : 내용 전송 (파일 전송도 가능) ⭐

서버에 데이터를 생성하는 것을 요청하는 메소드

  • 클라이언트에서 요청 데이터를 HTTP Body에 담아 웹서버로 전송한다.
    • 이때, 요청 데이터의 HTTP header의 항목 Content-Type에 요청 데이터의 타입을 표시한다.
      Content-Type:application/데이터 타입
      • 예를 들어 Content-Type:application/x-www-form-urlencoded 이라면
        해당 개체가 form으로 전송하는 데이터라는 의미다.
    • 만약 요청된 리소스가 새롭게 작성된 또 다른 것이라면
      서버는 HTTP header 항목의 Location에 새롭게 작성된 리소스의 URL 정보를 포함하여 응답한다.
      Location: 새롭게 작성된 리소스의 URL 정보

PUT : 내용 갱신 위주 (파일 전송도 가능)

서버에 존재하는 데이터를 수정하거나
존재하지 않으면 생성하는 것을 요청하는 메소드

  • 정보를 서버로 제출하는 형식이 POST와 동일하지만 갱신 위주이다.
    • 그렇기 때문에 서버측에서 새롭게 갱신된 리소스의 URL 정보를 HTTP header 항목의 Location에 포함하여 보내지 않아도 된다.
  • PUT 메소드는 클라이언트 측이 서버 측 구현에 관여하는 것이다.
    • 통상적으로 PUT보다 POST를 많이 사용한다.

DELETE : 파일 삭제

서버에 데이터를 제거할 것을 요청하는 메소드

OPTIONS : 웹서버측 제공 메소드에 대한 질의

해당 uri에 대해 서버가 허용하는 메소드인지 확인할 때 사용하는 메소드

  • 서버는 HTTP header 항목 중 Allow을
    Allow: GET,POST,HEAD 로 설정한 응답메시지를 보낸다.

TRACE, CONNECT : (거의 사용 안함)

  • TRACE : 요청 리소스가 수신되는 경로를 보여줌
  • CONNECT: 프락시 서버와 같은 중간 서버 경유

📌보안상의 이유로 대부분의 웹서버가 Whitelist 방식을 통해 GET,POST 2개 또는 OPTIONS 포함 3개 만을 허용하는 경우가 일반적이다.


GET과 POST의 차이점

GET 특징

요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.
(HTTP 요청 메시지의 Header부분의 url에 담겨 전송한다)

www.example-url.com/resources?name1=value1&name2=value2

위의 예시처럼 url에 ?뒤에 name=value 형태의 쿼리스트링으로 데이터정보가 담긴다.
요청 파라미터가 여러 개이면 &로 연결한다.

  • GET 방식은 url을 통해 데이터를 전송하기 때문에 보낼 수 있는 데이터의 크기가 제한적이다.
  • 또한 보안이 필요한 데이터를 전송할 때 GET 방식은 데이터가 모두 노출되기 때문에 적절하지 않다.

GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.

그래서 캐싱되지 않는 요청은 GET 요청이 적합하지 않을 수 있다.

  • js, css, 이미지 같은 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다.
  • 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.
    • 그래서 프론트엔드 개발을 하다보면 정적 컨텐츠가 캐시돼 컨텐츠를 변경해도 내용이 바뀌지 않는 경우가 종종 발생한다.
      이 때는 브라우저의 캐시를 지워주면 다시 컨텐츠를 조회하기 위해 서버로 요청을 보내게 된다.

POST 특징

리소스를 생성/변경하기 위해 설계된 POST 메소드는 HTTP 요청 메시지의 Body부분에 데이터를 담아 전송한다.

  • HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다.
  • 보안적인 측면에서 데이터가 Body로 전송되기 때문에 눈에 보이지 않아 GET보다 안전하다고 생각할 수 있지만 데이터를 암호화하지 않는 이상 고만고만하다.
    (크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있다)
  • POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다.
    Content-Type:application/데이터 타입
    • 데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추하게 된다.
    • 데이터 타입을 알 수 없는 경우 Content-Type:application/octet-stream으로 표시한다.

GET과 POST의 차이

GET

GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 성질을 가진다. (Idempotent)

  • 주로 조회를 할 때에 사용해야합니다.
  • GET은 불필요한 요청을 제한하기 위해 요청이 캐시된다.
    • POST 방식으로 요청해야 할 것을 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청하면
      caching 되었던 데이터가 응답될 가능성이 존재한다.

POST

POST으로 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다. (Non-idempotent)

  • POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.
  • POST는 생성, 수정, 삭제에 사용할 수 있지만
    생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있다.

0개의 댓글