GET과 POST 방식의 비교
네트워크 전송
특정 사용자가 어떠한 홈페이지로 이동하기 위해서 URL을 주소창에 입력하고 ENTER키를 누르면 해당 주소에 맞게 원하는 페이지로 이동하게 된다. 이때 사용자가 URL을 입력함으로써 서버 내부에서는 클라이언트의 요청에 응답하기 위한 처리가 이루어진다. 클라이언트가 서버로 요청을 보내는 HTTP method에는 "GET"과 "POST" 방식이 존재한다.
이는 세부적으로 보안과 전달방식, 전달할 수 있는 데이터의 양에 대해서 차이점이 발생하게 된다.
1. GET 방식
영어단어 get은 '가져오다' 라는 뜻을 가진 단어이다. 즉 get은 어떠한 정보를 가져와서 조회하기 위해서 사용되는 방식이다. get 방식은 간단한 데이터를 URL에 넣을 수 있도록 설계된 방식이며 데이터를 보내는 양에 한계가 있다. 즉 URL 자체의 길이가 정해져있고, 길이가 너무 길어 초과된 데이터는 절단된다.
<특징>
- URL에 변수(데이터)를 포함시켜 요청한다.
- 데이터를 header에 포함하여 전송한다.
- URL에 데이터가 노출되어 보안에 취약하다 (quert의 이름과 값이 연결되어 표현됨).
- 전송하는 길이에 제한이 있다.
- 캐싱이 가능하다.
ex) www.abcdefg.com?id=aaaaa&pw=1234
위의 예시 주소와 같이 URL뒤에 "?"마크를 통해 URL의 끝을 알리고, 데이터 표현의 시작점을 알린다.
데이터는 key과 value의 쌍으로 넣어야하며 위에서 ket는 id와 pw이고, value는 aaaaa와 1234이다.
* 캐싱(cashing)?
캐싱이란 한 번 이상 접근 후, 재요청이 발생할 때 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것.
2. POST 방식
영어단어 post는 부치다, 제출하다라는 뜻이다. 즉 post방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 데이터를 전송하는 방식이다.
<특징>
- URL에 변수(데이터)를 노출시키지 않고 요청한다.
- 데이터를 body에 포함시킨다.
- URL에 데이터가 노출되지 않아서 보안이 가능하다.
- 전송하는 길이에 제한이 없다.
- 캐싱이 불가능하다.
GET방식은 URL에 데이터를 넣어서 전송하는 반면에 POST 방식은 BODY에 데이터를 넣어서 전송한다.
따라서 헤더필드 중에 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고, 어떤 데이터 타입인지를 명시한다.
ex) 1. application/x-www-form-urlencoded
2. text/plain
3. multipart/form-data ......
위와 같이 데이터를 보낼 때는 컨텐츠 타입을 헤더 필드에 명시해줘야 한다.
웹페이지를 열어보거나 게시글을 읽을 때 등 조회를 하는 경우는 GET으로 요청하게 된다/ 조회로 사용되어야 하는 다른 이유는 웹페이지를 조회할 때, 원하는 페이지로 바로 이동하거나 이동시키기 위해서는 해당 링크 정보가 필요한데 POST의 경우에는 파라메터가 HTTP의 BODY에 있기 때문에 링크정보를 가져올 수 없다. (즐겨찾기 하여도 해당페이지로 이동 불가)
GET은 URL에 파라메터를 가지고 있기 때문에 링크를 걸 때, URL에 해당 파라메터를 넎어준다면 추가적인 정보를 더하여 더욱 상세한 링크를 걸 수 있다.
POST는 서버의 상태나 데이터를 변경시킬 때 사용된다. 게시글을 쓰면 서버에 게시글이 저장되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게되면 서버의 무언가는 변경이 되도록 하기 위해 사용된다.