GET vs. POST

HTTP POST 요청은 클라이언트 (브라우저)에서 메시지 본문의 서버로 추가 데이터를 제공합니다. 반대로 GET 요청에는 URL에 필요한 모든 데이터가 포함됩니다. HTML 양식은 메소드에서 method = "POST" 또는 method = "GET" (기본값)을 지정하여 메소드를 사용할 수 있습니다. 요소. 지정된 방법에 따라 양식 데이터가 서버에 제출되는 방법이 결정됩니다. 메소드가 GET 인 경우 모든 양식 데이터가 조치 문자열에 조회 문자열 매개 변수로 추가 된 URL로 인코딩됩니다. POST를 사용하면 양식 데이터가 HTTP 요청의 메시지 본문에 나타납니다.

비교 차트

GET vs POST 비교 차트
가져 오기 우편
역사매개 변수는 URL의 일부이므로 브라우저 히스토리에 남아 있습니다.매개 변수는 브라우저 히스토리에 저장되지 않습니다.
북마크북마크 할 수 있습니다.북마크 할 수 없습니다.
BACK 버튼 / 다시 제출 동작GET 요청은 다시 실행되지만 HTML이 브라우저 캐시에 저장된 경우 서버에 다시 제출되지 않을 수 있습니다.브라우저는 일반적으로 사용자에게 데이터를 다시 제출해야한다고 알립니다.
인코딩 유형 (enctype 속성)application / x-www-form-urlencodedmultipart / form-data 또는 application / x-www-form-urlencoded 이진 데이터에는 multipart 인코딩을 사용하십시오.
매개 변수보낼 수 있지만 매개 변수 데이터는 요청 라인 (URL)에 입력 할 수있는 것으로 제한됩니다. 2K 미만의 매개 변수를 사용하는 것이 가장 안전한 일부 서버는 최대 64K를 처리합니다.파일 업로드를 포함하여 매개 변수를 서버로 보낼 수 있습니다.
해킹스크립트 키드를 쉽게 해킹해킹하기가 더 어렵다
양식 데이터 형식에 대한 제한예, ASCII 문자 만 허용됩니다.제한 없음. 이진 데이터도 허용됩니다.
보안GET은 전송 된 데이터가 URL의 일부이기 때문에 POST에 비해 덜 안전합니다. 따라서 브라우저 기록 및 서버 로그에 일반 텍스트로 저장됩니다.POST는 매개 변수가 브라우저 기록 또는 웹 서버 로그에 저장되지 않기 때문에 GET보다 약간 안전합니다.
양식 데이터 길이에 대한 제한 사항예, 양식 데이터가 URL에 있고 URL 길이가 제한되어 있기 때문입니다. 안전한 URL 길이 제한은 대개 2048 자이지만 브라우저와 웹 서버에 따라 다릅니다.제한 없음
사용성비밀번호 나 기타 민감한 정보를 보낼 때 GET 방법을 사용해서는 안됩니다.비밀번호 또는 기타 민감한 정보를 보낼 때 사용되는 POST 방법.
시계GET 방법은 모든 사람이 볼 수 있으며 (브라우저의 주소 표시 줄에 표시됨) 보낼 정보의 양에 제한이 있습니다.POST 메소드 변수는 URL에 표시되지 않습니다.
캐시캐시 가능캐시되지 않음

양식 제출의 차이점

METHOD = "GET"METHOD = "POST" 의 근본적인 차이점은 HTTP 사양에 정의 된대로 서로 다른 HTTP 요청에 해당한다는 것입니다. 두 방법 모두에 대한 제출 프로세스는 동일한 방식으로 시작됩니다. 양식 데이터 세트는 브라우저에서 구성한 다음 enctype 속성으로 지정된 방식으로 인코딩됩니다. METHOD = "POST의 경우 enctype 속성은 multipart / form-data 또는 application / x-www-form-urlencoded 일 수 있지만 METHOD ="GET " 의 경우 application / x-www-form-urlencoded 만 허용됩니다. 그런 다음 세트는 서버로 전송됩니다.

METHOD = "GET"을 사용한 양식 제출의 경우 브라우저는 action 속성 값을 사용하여 ?를 추가하여 URL을 구성합니다 . 그런 다음 양식 데이터 세트를 추가하십시오 (application / x-www-form-urlencoded 컨텐츠 유형을 사용하여 인코딩 됨). 그런 다음 브라우저는 링크를 따르는 것처럼 (또는 사용자가 URL을 직접 입력 한 것처럼)이 URL을 처리합니다. 브라우저는 URL을 부분으로 나누고 호스트를 인식 한 다음 나머지 URL을 인수로 사용하여 GET 요청을 해당 호스트에 보냅니다. 서버는 거기에서 가져옵니다. 이 프로세스는 양식 데이터가 ASCII 코드로 제한됨을 의미합니다. 다른 유형의 문자를 ASCII 형식의 URL을 통해 전달할 때는 특별한주의를 기울여야합니다.

METHOD = "POST"를 사용하여 양식을 제출하면 조치 속성 값과 enctype 속성으로 지정된 컨텐츠 유형에 따라 작성된 메시지를 사용하여 POST 요청이 전송됩니다.

장점과 단점

GET 을 사용할 때 양식 데이터가 URL의 일부로 전송되므로

  • 양식 데이터는 ASCII 코드로 제한됩니다. 다른 유형의 문자를 ASCII 형식의 URL을 통해 전달할 때는 특별한주의를 기울여야합니다. 한편, 바이너리 데이터, 이미지 및 기타 파일은 모두 METHOD = "POST"를 통해 제출할 수 있습니다.
  • 채워진 모든 양식 데이터가 URL에 표시됩니다. 또한 브라우저의 사용자 웹 탐색 기록 / 로그에도 저장됩니다. 이러한 문제로 인해 GET 보안이 약화됩니다.
  • 그러나 URL의 일부로 양식 데이터를 전송하는 한 가지 장점은 URL을 책갈피로 지정하고 직접 사용하여 양식 작성 프로세스를 완전히 무시할 수 있다는 것입니다.
  • URL 길이가 제한되어 있기 때문에 전송할 수있는 양식 데이터 양에는 제한이 있습니다.
  • 스크립트 키드는 시스템의 취약점을보다 쉽게 ​​노출시켜 해킹 할 수 있습니다. 예를 들어 Citibank는 URL 문자열에서 계정 번호를 변경하여 해킹당했습니다. [1] 물론, 숙련 된 해커 나 웹 개발자는 POST를 사용하더라도 이러한 취약점을 노출시킬 수 있습니다. 조금 더 어려워요. 일반적으로 서버는 클라이언트가 보낸 데이터를 의심하고 안전하지 않은 직접 객체 참조를 방지해야합니다.

서버 측 처리의 차이점

제출 된 양식 데이터의 처리는 원칙적으로 METHOD = "GET" 또는 METHOD = "POST" 로 전송되는지 여부에 따라 다릅니다. 데이터가 다른 방식으로 인코딩되기 때문에, 다른 디코딩 메커니즘이 필요하다. 따라서 일반적으로 METHOD를 변경하면 제출을 처리하는 스크립트의 변경이 필요할 수 있습니다. 예를 들어, CGI 인터페이스를 사용할 때 스크립트는 GET 이 사용될 때 환경 변수 (QUERYSTRING)로 데이터를 수신합니다. 그러나 POST 를 사용하면 양식 데이터가 표준 입력 스트림 ( stdin )에 전달되고 읽을 바이트 수는 Content-length 헤더에 의해 제공됩니다.

권장 사용법

GET은 "세계의 상태를 크게 변화시키지 않는" "등 전성"양식을 제출할 때 권장됩니다. 즉, 데이터베이스 쿼리 만 포함하는 양식입니다. 또 다른 관점은 여러 dem 등원 쿼리가 단일 쿼리와 동일한 효과를 갖습니다. 데이터베이스 업데이트 또는 이메일 트리거링과 같은 다른 조치가 관련된 경우 POST 사용을 권장합니다.

Dropbox 개발자 블로그에서 :

브라우저는 특정 HTML 양식의 기능을 정확히 알지 못하지만 HTTP GET을 통해 양식을 제출하면 네트워크 오류가있는 경우 자동으로 제출을 다시 시도하는 것이 안전하다는 것을 브라우저가 알고 있습니다. HTTP POST를 사용하는 양식의 경우 다시 시도하는 것이 안전하지 않으므로 브라우저가 사용자에게 먼저 확인을 요청합니다.

"GET"요청은 종종 캐시 가능하지만 "POST"요청은 거의 불가능합니다. 캐시가 가장 빈번한 쿼리를 처리 할 수 ​​있으므로 쿼리 시스템의 경우 특히 쿼리 문자열이 단순 할 경우 효율성에 상당한 영향을 줄 수 있습니다.

경우에 따라 dem 등원 쿼리에도 POST 를 사용하는 것이 좋습니다.

  • 양식 데이터에 ASCII가 아닌 문자 (예 : 악센트 부호가있는 문자)가 포함 된 경우 METHOD = "GET" 은 원칙적으로 적용 할 수 없지만 실제로는 ISO 라틴어 1 문자로 작동 할 수 있습니다.
  • 양식 데이터 세트가 큰 경우 ( 예 : 수백 자) METHOD = "GET" 은 긴 URL을 처리 할 수없는 구현에 실제 문제를 일으킬 수 있습니다.
  • 특히 URL에 나타나지 않아서 "숨겨진"필드 (INPUT TYPE = "HIDDEN")를 더 숨기려면 양식이 작동하는 방식을 사용자에게 덜 보이게하기 위해 METHOD = "GET" 을 사용하지 않을 수 있습니다. 그러나 METHOD = "POST" 와 함께 숨겨진 필드를 사용하더라도 HTML 소스 코드에 계속 나타납니다.

HTTPS는 어떻습니까?

2015 년 5 월 15 일 업데이트 : HTTPS (HTTP over TLS / SSL)를 사용할 때 POST는 GET보다 더 많은 보안을 제공합니까?

이것은 흥미로운 질문입니다. 웹 페이지에 GET 요청을한다고 가정하십시오.

 GET //www.example.com/login.php?user=mickey&passwd=mini 

인터넷 연결이 모니터링되고 있다고 가정하면 스누 퍼가이 요청에 대해 어떤 정보를 사용할 수 있습니까? 대신 POST를 사용하고 사용자 및 비밀번호 데이터가 POST 변수에 포함 된 경우 HTTPS 연결의 경우 더 안전합니까?

내 대답은 아니오 야. 이러한 GET 요청을하면 웹 트래픽을 모니터링하는 공격자에게 다음 정보 만 알려집니다.

  1. HTTPS 연결을했다는 사실
  2. 호스트 이름 – www.example.com
  3. 요청의 총 길이
  4. 응답의 길이

URL의 경로 부분 (즉, 요청 된 실제 페이지와 쿼리 문자열 매개 변수)은 "전선을 통해"즉, 대상 서버로 이동하는 동안 보호 (암호화)됩니다. 상황은 POST 요청과 동일합니다.

물론 웹 서버는 전체 URL을 일반 텍스트로 액세스 로그에 기록하는 경향이 있습니다. 따라서 GET을 통해 민감한 정보를 보내는 것은 좋은 생각이 아닙니다. 이것은 HTTP 또는 HTTPS 사용 여부에 관계없이 적용됩니다.

관련 기사