request method : GET과 POST

이원석·2022년 3월 30일
0

Network

목록 보기
4/7
HTTP 프로토콜은 대칭키를 활용하는 HTTPS와는 동작방식이 다릅니다. 
Requeset method는 HTTP 프로토콜을 사용하여 서버에 데이터(요청 정보)를 전달합니다.

이미지 출처: https://dev.to/williamragstad/how-to-use-ajax-3b5e



1.GET 메서드


GET 메서드는 서버에서 특정 데이터를 가져와 클라이언트가 조회할 수 있도록 보여주는 용도의 메소드입니다.


[GET 메서드 사용방법]

URL의 끝에 ?를 붙이고, 요청정보가(key=value)의 해시맵 형태의 쌍을 ?뒤에 붙여서 서버로 전송한다. 요청 정보가 여러개일 경우에는 '&'로 구분한다.
ex) www.url.com?name1=value1&name2=value2


[GET 메서드 특징]

  • URL에 요청 정보를 붙여서 전송하며, 요청 정보가 이어붙기 떄문에 길이 제한이 있어 대용량의 데이터를 전송하기 어렵다.
    - 한번 요청시 전송 데이터의 양(url+파마리터) 은 255자로 제한된다.

  • 요청 정보를 사용자가 쉽게 확인할 수 있으나, POST 방식보다 보안상 취약하다.

  • HTTP 패킷은 쿼리 스트링을 통해 전송하므로 Body는 비어있는 상태로 전송한다.
    -Body의 데이터타입을 표현하는 'Content-Type' 필드도 HTTP Request Header에 들어가지 않는다.

  • GET 메서드는 불필요한 반복 요청을 제한하기 위해 캐시될 수 있다. 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적기때문에 동일한 요청을 보낼 필요가 없다. 따라서 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.

  • GET 방식은 캐싱을 사용할 수 있어 POST 방식보다 빠르다.




2.POST 메서드


POST 메서드는 클라이언트가 서버의 값이나 상태를 바꾸기 위한 용도의 메소드입니다. (Insert, Update, Delete)


[POST 메서드 사용방법]

유청 정보를 HTTP 패킷의 Body안에 숨겨 서버로 전송한다. Request Header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자 하는 데이터 타입을 적어주어야 한다.
- Default : application/octet-stream
- 단순 TEXT : text/plain
- 파일 : multipart/form-data


[POST 메서드 특징]

  • Body안에 요청정보를 숨겨 서버에 전송하기 때문에(GET 방식보다 보안상 안전하다) 대용량의 데이터를 전송하기에 적합하다.

  • POST 요청은 GET 방식과는 다르게 캐시되지 않으며 브라우저 히스토리에 남지 않는다.

  • 클라이언트에서 데이터를 인코딩 하여 서버로 전송하고, 이를 받은 서버에서 해당 데이터를 디코딩한다.




3.GET과 POST의 차이점


  1. 목적성 : GET은 서버의 리소스에 데이터를 요청할 때. POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.

  2. Body의 유무 : GET은 URL에 쿼리파라미터 형식으로 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 Body가 없다. POST는 Body에 데이터를 담아 보내기 때문에 HTTP 메시지에 Body가 존재한다.

  3. 멱등성(idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.

멱등성이란?

멱등의 사전적 정의는 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
GET은 조회방식이기 때문에 여러번의 요청에도 응답이 달라지지 않지만, POST는 리소스의 상태를 변경할 수 있기 때문에 멱등이 아니라고 볼 수 있습니다.




[참고문헌]
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://brilliantdevelop.tistory.com/33

0개의 댓글