ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Get과 Post의 차이
    네트워크/네트워크 정리 2020. 2. 5. 14:26

     

    GET 메서드 방식

    • 개념
      • 정보를 조회하기 위한 메서드
      • 서버에서 어떤 데이터를 가져와서 보여주기 위한 용도의 메서드
      • 가져오는 것(Select)
    • 사용 방법
      • URL의 끝에 '?'가 붙고, 요청 정보가 (key=value)형태의 쌍을 이루어 ?뒤에 이어서 붙어 서버로 전송한다.
      • 요청 정보가 여러 개일 경우에는 '&'로 구분한다.
      • Ex) www.urladdress.xyz?name1=value1&name2=value2
    • 특징
      • URL에 요청 정보를 붙여서 전송한다.
      • URL에 요청 정보가 이어붙기 때문에 길이 제한이 있어서 대용량의 데이터를 전송하기 어렵다.
        • 한 번 요청 시 전송 데이터(주솟값 + 파라미터)의 양은 255자로 제한된다.(HTTP/1.1은 2048자)
      • 요청 정보를 사용자가 쉽게 눈으로 확인할 수 있다.
        • POST 방식보다 보안상 취약하다.
      • HTTP 패킷의 Body는 비어 있는 상태로 전송한다.
        • 즉, Body의 데이터 타입을 표현하는 'Content-Type' 필드도 HTTP Request Header에 들어가지 않는다.
      • POST 방식보다 빠르다.
        • GET 방식은 캐싱을 사용할 수 있어, GET 요청과 그에 대한 응답이 브라우저에 의해 캐쉬된다.

     

     

    • POST 메서드 방식 
      • 개념
        • 서버의 값이나 상태를 바꾸기 위한 용도의 메서드
        • 수행하는 것(Insert, Update, Delete)
      • 사용 방법
        • 요청 정보를 HTTP 패킷의 Body 안에 숨겨서 서버로 전송한다.
        • Request Header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자 하는 데이터 타입을 적어주어야 한다.
          • Default: application/octet-stream
          • 단순 txt의 경우: text/plain
          • 파일의 경우: multipart/form-date
      • 특징
        • Body 안에 숨겨서 요청 정보를 전송하기 때문에 대용량의 데이터를 전송하기에 적합하다.
        • 클라이언트 쪽에서 데이터를 인코딩하여 서버로 전송하고, 이를 받은 서버 쪽이 해당 데이터를 디코딩한다.
        • GET 방식보다 보안상 안전하다.

    HTTP

    HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜.

    클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송한다.

    이때 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용한다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점을 알아보자.

    GET

    HTTP/1.1 스펙인 RFC2616의 Section9.3에 따르면 GET은 서버로부터 정보를 조회하기 위해 설계된 메소드

    GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다. URL의 끝에 ?와 함께 이름과 값으

    로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부른다. 만약, 요청 파라미터가 여러 개이면 &로 연결한다. 쿼리스트링을

    사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있다.

     

     

    그리고 GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다. js, css, 이미지 같은 정적 컨텐츠는 데이터양이 크고,

    변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다. 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해

    두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다. 그래서 프론트엔드 개발을 하다보면 정

    적 컨텐츠가 캐시돼 컨텐츠를 변경해도 내용이 바뀌지 않는 경우가 종종 발생한다. 이 때는 브라우저의 캐시를 지워주면 다시

    컨텐츠를 조회하기 위해 서버로 요청을 보내게 된다.

    POST

    POST는 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전

    송한다. HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다.

     

    그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다. 이처럼 POST는 데이터가 Body로 전송되고 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.

     

    그리고 POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다. 데이터 타입을 표시하지

    않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추한다. 만약, 알 수 없는 경우에

    는 application/octet-stream로 요청을 처리한다.

     

     

    GET과 POST의 차이

    GET은 Idempotent, POST는 Non-idempotent하게 설계되었는데

    Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있다.

    수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

    즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다는 것

     

     

     

    GET은 Idempotent

    여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌

    아와야 한다는 것을 의미한다.

     

    이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야한다. 예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다.

     

     

    POST는 Non-idempotent

    POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

     

    이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용된다. 이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있다.

     

    마지막으로 웹페이지를 조회할 때, 링크를 통해 특정 페이지로 바로 이동하려면 해당 링크와 관련된 정보가 필요한데 POST는 요

    청 데이터가 Body에 담겨 있기 때문에 링크 정보를 가져올 수 없다. 반면, GET은 URL에 요청 파라미터를 가지고 있기 때문

    에 링크를 걸 때, URL에 파라미터를 사용해 더 디테일하게 페이지를 링크할 수 있다.

     

    GET과 POST는 이처럼 큰 차이가 있기 때문에 설계원칙에 따라 적절한 용도로 사용해야한다.

     

     

     

    https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

     

    GET과 POST의 차이

    HTTP HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜입니다. 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송합니다. 이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점을 알아보겠습니다.

    hongsii.github.io

     

    '네트워크 > 네트워크 정리' 카테고리의 다른 글

    OAuth2 인증 방식 정리  (0) 2020.05.13
    Https는 공개키? 대칭키? 비대칭키?  (1) 2020.04.03
    TCP 3 way handshake & 4 way handshake  (0) 2020.01.29
    웹에서의 쿠키와 세션  (0) 2020.01.18
    Http와 Https 의 차이  (0) 2020.01.18
Designed by Tistory.