[CS-Challenge : HTTP]

SELOG·2024년 1월 31일
0

CS-CHALLENGE

목록 보기
3/5

:) HTTP 프로토콜에서 가장 많이 사용되는 두 가지 방식인 GET 방식과 POST 방식의 차이를 설명할게욥

HTTP란?

  • 우선, HTTP을 간단하게 설명하자면

    HTTP는 "HyperText Transfer Protocol"의 약자로, 인터넷에서 데이터를 주고받기 위한 프로토콜(규약)이다. 주로 웹 브라우저와 웹 서버 간에 HTML 문서나 이미지와 같은 리소스를 주고받는 데 사용된다.


GET 방식

정의

  • GET 방식은 서버에 정보를 요청할 때 사용된다.

사용방식

특징

  • 데이터가 URL에 노출되기 때문에 사용자나 로그를 통해 쉽게 볼 수 있다.

    • GET 요청은 URL의 일부로 데이터를 전송한다. 예를 들어, http://example.com/?search=query와 같이, 검색어 'query'가 URL에 직접 포함된다.
      이런 특성 때문에 사용자는 주소창을 통해 전송된 데이터를 직접 볼 수 있고, 브라우저의 히스토리나 서버 로그에도 이 정보가 저장된다.
    • 이는 디버깅에 유리하며, URL 자체를 공유함으로써 동일한 검색 결과나 페이지 상태를 다른 사용자와 쉽게 공유할 수 있게 한다.
  • 보안에 민감한 데이터를 전송하기에는 부적합하다.

    • 데이터가 URL에 노출되므로, 비밀번호나 개인정보와 같은 민감한 정보를 GET 방식으로 전송하는 것은 매우 위험하다. 절대 노노 !.
  • URL 길이 제한이 있기 때문에 전송할 수 있는 데이터 양에 제한이 있다.

    • 대부분의 웹 서버와 브라우저는 URL 길이에 제한을 두고 있다. 이는 대략 2000~8000 문자 사이에서 변할 수 있지만, 환경에 따라 다르다.
    • 긴 쿼리 문자열이나 대량의 데이터를 요청하는 경우에는 POST 방식이 더 적합하다.
  • 캐싱이 가능하여 빠른 성능을 제공한다.

    • 웹 페이지나 이미지와 같은 정적 리소스는 한 번 로드된 후 브라우저 캐시에 저장되어, 같은 리소스에 대한 재요청 시 서버에 다시 요청하지 않고 캐시에서 빠르게 로드할 수 있다.
    • 캐싱은 특히 네트워크 대역폭이 제한적이거나 서버 응답 시간이 중요한 경우에 유용하다.

장점

  • 간단함과 효율성
    GET은 구현이 간단하고 사용하기 쉽다. 웹 페이지에 대한 간단한 요청을 처리하는 데 매우 효율적이다.

  • 캐싱
    GET 요청은 캐시될 수 있어, 같은 요청에 대해 빠른 응답을 제공한다. 이는 네트워크 대역폭을 절약하고 서버 부하를 줄인다.

  • 북마크와 공유 용이성
    GET 요청은 URL에 데이터가 포함되므로, 사용자가 해당 URL을 북마크하거나 공유하기 쉽다.

  • 브라우저 호환성 및 서버 로깅
    거의 모든 웹 브라우저와 서버에서 지원되며, 서버 로그에 요청 URL이 기록되어 디버깅이 용이하다.

단점

  • 보안 취약성
    GET은 URL에 데이터를 포함시키기 때문에, 보안에 민감한 정보를 전송하는 데 부적합하다.

  • 데이터 크기 제한
    URL의 길이에는 제한이 있으므로, GET 방식은 상대적으로 작은 양의 데이터를 전송하는 데 사용된다.

  • 데이터 타입 제한
    GET은 주로 문자열 데이터를 전송하는 데 사용되며, 바이너리 데이터 전송에는 적합하지 않다.

  • 캐싱의 단점
    캐싱은 장점이기도 하지만, 잘못 구성된 경우 오래된 데이터가 제공될 위험이 있으며, 동적인 컨텐츠에는 적합하지 않을 수 있다.


POST 방식

정의

  • POST 방식은 서버에 데이터를 제출할 때 사용된다.

사용방식

  • 데이터는 HTTP 메시지의 본문(body)을 통해 전송된다.

    POST 요청 예시

    • HTML 폼을 통한 데이터 전송
    <form action="http://example.com/submit" method="post">
        <input type="text" name="username" />
        <input type="password" name="password" />
        <input type="submit" value="Submit" />
    </form>  
    • AJAX를 사용한 데이터 전송
    fetch('http://example.com/submit', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({username: 'user', password: 'pass'})
    });

특징

  • 데이터가 URL에 노출되지 않아 GET보다 보안적으로 우수하다.

    • 보안성: POST 방식은 데이터를 HTTP 요청의 본문(Body)에 포함시켜 전송한다. 특히 로그인 정보나 개인정보 같은 민감한 데이터를 전송할 때 주로 사용된다.
    • URL 노출 없음: 데이터가 URL에 노출되지 않기 때문에, 브라우저의 주소창이나 히스토리, 로그 파일에 민감한 정보가 남지 않는다.
  • 전송할 수 있는 데이터 양에 제한이 없다.

    • 큰 데이터 전송: POST 방식은 URL 길이에 제한을 받지 않기 때문에, 상대적으로 많은 양의 데이터를 전송할 수 있다. 이는 대규모의 데이터를 서버로 보내야 하는 상황에 적합하다.
    • 폼 데이터 전송, 파일 업로드, JSON/XML 데이터 전송 등 크기가 큰 데이터를 처리할 때 주로 사용된다.
  • 데이터가 본문에 포함되어 있어 외부에서 볼 수 없다.

    • 데이터 은닉: POST 요청은 데이터를 HTTP 본문에 숨겨 전송한다. 이는 네트워크를 통해 데이터가 전송될 때 외부에서 쉽게 볼 수 없도록 한다.
    • 네트워크 보안: 데이터가 본문에 포함되어 전송되므로, 네트워크 스니핑을 통한 데이터 노출 위험이 줄어든다. 그러나 전송 데이터를 완벽하게 보호하려면 HTTPS와 같은 보안 프로토콜을 사용하는 것이 필수!!.
      • HTTPS (HyperText Transfer Protocol Secure)
        HTTP에 데이터 암호화를 추가한 프로토콜. 웹 브라우저와 웹 서버 간의 통신을 암호화하여 보안을 강화한 것!

장점

  • 보안성
    POST는 데이터를 HTTP 메시지의 본문에 포함하여 전송하기 때문에, URL에 민감한 정보가 노출되지 않는다. 이는 보안에 민감한 데이터 전송에 적합하다.

  • 데이터 크기에 제한 없음
    POST는 URL 길이 제한의 영향을 받지 않으므로, 많은 양의 데이터를 전송할 수 있다.

  • 다양한 데이터 타입 지원
    POST 방식은 다양한 종류의 데이터(텍스트, 바이너리 데이터, JSON 등)를 전송할 수 있다. 이는 파일 업로드, JSON 데이터 전송 등 다양한 애플리케이션에 유용하다.

  • 부가적인 헤더 필드 사용
    POST 요청은 필요에 따라 추가적인 헤더 필드(Content-Type 등)를 사용하여 데이터 형식을 명시할 수 있다. 이는 데이터 처리의 정확성과 효율성을 높인다.

단점

  • 상대적으로 복잡함
    데이터를 본문에 담아 전송해야 하기 때문에, 요청의 구성이 GET보다 복잡해질 수 있다.

  • 캐싱 불가
    일반적으로 POST 요청은 캐시되지 않는다. 따라서 동일한 요청을 반복할 때마다 서버로부터 새로운 응답을 받아야 하기 때문에, 네트워크 트래픽과 서버 부하를 증가시킬 수 있다.

  • 서버 부하 증가
    POST 요청은 매번 서버에서 요청을 처리해야 하므로, GET 요청보다 서버에 더 많은 부하를 줄 수 있다. 특히, 대용량 데이터를 처리할 때 서버의 부하가 더욱 증가할 수 있다.

  • 북마크와 공유의 어려움
    POST 요청은 데이터가 URL에 포함되지 않기 때문에, 사용자가 특정 상태의 페이지를 북마크하거나 공유하기 어렵다.

profile
금융 IT 전문가가 될거야

0개의 댓글