HTTP 프로토콜은 대칭키를 활용하는 HTTPS와는 동작방식이 다릅니다.
Requeset method는 HTTP 프로토콜을 사용하여 서버에 데이터(요청 정보)를 전달합니다.
이미지 출처: https://dev.to/williamragstad/how-to-use-ajax-3b5e
GET 메서드는 서버에서 특정 데이터를 가져와 클라이언트가 조회할 수 있도록 보여주는 용도의 메소드입니다.
URL의 끝에 ?를 붙이고, 요청정보가(key=value)의 해시맵 형태의 쌍을 ?뒤에 붙여서 서버로 전송한다. 요청 정보가 여러개일 경우에는 '&'로 구분한다.
ex) www.url.com?name1=value1&name2=value2
- URL에 요청 정보를 붙여서 전송하며, 요청 정보가 이어붙기 떄문에 길이 제한이 있어 대용량의 데이터를 전송하기 어렵다.
- 한번 요청시 전송 데이터의 양(url+파마리터) 은 255자로 제한된다.
- 요청 정보를 사용자가 쉽게 확인할 수 있으나, POST 방식보다 보안상 취약하다.
- HTTP 패킷은 쿼리 스트링을 통해 전송하므로 Body는 비어있는 상태로 전송한다.
-Body의 데이터타입을 표현하는 'Content-Type' 필드도 HTTP Request Header에 들어가지 않는다.
- GET 메서드는 불필요한 반복 요청을 제한하기 위해 캐시될 수 있다. 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적기때문에 동일한 요청을 보낼 필요가 없다. 따라서 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.
- GET 방식은 캐싱을 사용할 수 있어 POST 방식보다 빠르다.
POST 메서드는 클라이언트가 서버의 값이나 상태를 바꾸기 위한 용도의 메소드입니다. (Insert, Update, Delete)
유청 정보를 HTTP 패킷의 Body안에 숨겨 서버로 전송한다. Request Header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자 하는 데이터 타입을 적어주어야 한다.
- Default : application/octet-stream
- 단순 TEXT : text/plain
- 파일 : multipart/form-data
- Body안에 요청정보를 숨겨 서버에 전송하기 때문에(GET 방식보다 보안상 안전하다) 대용량의 데이터를 전송하기에 적합하다.
- POST 요청은 GET 방식과는 다르게 캐시되지 않으며 브라우저 히스토리에 남지 않는다.
- 클라이언트에서 데이터를 인코딩 하여 서버로 전송하고, 이를 받은 서버에서 해당 데이터를 디코딩한다.
멱등의 사전적 정의는 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
GET은 조회방식이기 때문에 여러번의 요청에도 응답이 달라지지 않지만, POST는 리소스의 상태를 변경할 수 있기 때문에 멱등이 아니라고 볼 수 있습니다.
[참고문헌]
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://brilliantdevelop.tistory.com/33