본문 바로가기
CS/네트워크

HTTP 메서드 GET vs POST

by 쌩욱 2021. 11. 30.

둘 다 HTTP 프로토콜을 이용해 서버에 데이터를 전달하는 방식이다.

GET

- 서버로부터 정보를 조회하기 위해 설계된 메소드

- 요청을 전송할 때 필요한 데이터를 HTTP Request Message의 Header 부분의 URL에 담아 전송

- URL의 끝에 ?와 함께 Key=Value 형태의 쌍을 이루는 요청 파라미터를 붙임

- 요청 정보가 여러 개일 경우 '&'로 구분

ex) www.urladdress.xyz?name1=value1&name2=value2

- 이를 쿼리스트링이라고 함

 

특징

- URL에 쿼리스트링을 붙이는 방식이기 때문에 길이 제한이 있어 대용량 데이터 전송이 어렵다.

  • 한 번 요청 시 전송 데이터(주솟값 + 파라미터)의 양은 255자로 제한된다.(HTTP/1.1은 2048자)

- 요청 데이터가 URL에 그대로 노출되므로 보안상 취약하다. (ex.password)

 

- GET 요청과 그에 대한 응답이 브라우저에 의해 캐쉬된다. -> POST 보다 빠름

  • js, css 같은 정적 컨텐츠는 데이터가 크고, 변경될 일이 적어 동일한 요청을 여러 번 보낼 필요가 없음
  • 정적 컨텐츠를 요청하면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생하면 서버로 요청을 보내지 않고 캐시된 데이터를 사용함
  • ex. 프론트 개발 시 정적 컨텐츠를 변경해도 캐시된 데이터 때문에 내용이 바뀌지 않았던 경우가 있음

 

POST

- 서버의 값이나 상태를 바꾸기 위해 설계된 메소드

- 전송해야될 데이터를 HTTP Request Message의 Body 부분에 담아서 전송

- Request Header의 Content-Type에 해당 데이터의 타입을 표현 (ex. application/json)

- 타입을 명시하지 않으면 서버는 자기 혼자 타입을 유추함

 

특징

- Request Body는 길이의 제한없이 데이터를 전송할 수 있어서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다.

- 요청 정보를 Request Body 안에 담아 전송하기 때문에 GET 방식보다 보안상 안전하다.

  • POST도 크롬 개발자 도구 등을 사용하면 확인 할 수 있기 때문에 민감한 데이터는 암호화해야 함

 

조회하기 위한 용도 POST가 아닌 GET 방식을 사용하는 이유?

- GET 방식은 서버에게 여러 번 요청을 하더라도 동일한 응답이 돌아와야 한다. (Idempotent)

- POST 방식은 서버에 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.(Non-idempotent)

  • GET 방식은 가져오는 것(Select) 으로, 서버의 데이터나 상태를 변경시키지 않아야 한다.
    • Ex) 게시판의 리스트, 게시글 보기 기능
    • 예외) 방문자의 로그 남기기, 글을 읽은 횟수 증가 기능
  • POST 방식은 수행하는 것 으로, 서버의 값이나 상태를 바꾸기 위한 용도이다.
    • Ex) 게시판에 글쓰기 기능

- 이처럼 큰 차이가 있기 때문에 설계원칙에 따라 적절한 용도로 사용해야한다!

'CS > 네트워크' 카테고리의 다른 글

CORS (Cross-Origin Resource Sharing)란 무엇일까?  (0) 2022.01.14
HTTP & HTTPS(SSL, 하이브리드 암호화)  (0) 2021.11.28
TCP 와 UDP  (0) 2021.11.24