Kraken-Addicts / HTTP-The-Definitive-Guide

HTTP/Network Group Study
36 stars 4 forks source link

Q1) GET vs POST (Interview Question in HTTP) #11

Open ku-kim opened 3 years ago

ku-kim commented 3 years ago

GET과 POST에 대해 설명하고 그 차이점에 대해 말씀해주세요. (엄근진 😶)

ku-kim commented 3 years ago

GET과 POST 모두 HTTP에서 사용되는 request methods(요청 메소드) 입니다. 다른 말로 HTTP 동사라고도 하죠. HTTP에서 무언가 하기 위해선 필수적으로 필요한 문법입니다. 메소드를 통해서 클라이언트는 서버에게 어떤 요청을 할 수 있고 서버는 그에 따른 응답을 해주어 클라이언트는 자신이 원하는 결과를 보거나 수정, 삭제 할 수 있습니다.

그 중 GET 메소드는 일반적으로 가장 많이 사용되는 메소드인데 이는 URL 형식으로 웹서버의 리소스(데이터)를 요청하는 메소드입니다. 예를 들어 네이버 메인 웹 페이지를 보고 싶을 때 www.naver.com URL로 GET 요청 메소드를 통해 네이버 서버에 요청하고 네이버 서버는 클라이언트의 GET 요청에 따라 서버 리소스 www.naver.com/index.html을 클라이언트에게 보내줍니다. 클라이언트는 그 결과를 볼 수 있는 것이죠. 만약 네이버에서 로그인을 하고 싶을 땐 어떻게 해야 할까요?

이때 사용되는 메소드가 POST 메소드입니다. 클라이언트가 서버에게 내용이나 파일을 전송할 때 사용하죠 예를 들어 GET 요청을 통해 네이버 메인 페이지를 보고 있습니다. 이 때 로그인이 하고 싶다면 id와 pw를 입력하고 로그인 버튼을 누르는 순간 id와 pw는 네이버 서버에 보내지게 되는 것이죠. 이 때 클라이언트가 서버에게 보낼 때 사용되는 메소드가 POST 메소드입니다.

차이점으로는 GET은 요청 메세지의 헤더, URL로 모든 정보를 요청하고 POST는 요청 메세지의 바디에 해당 내용을 담아 요청합니다. 또한 GET은 여러번 요청해도 항상 같은 결과를 응답받고(멱등함) POST는 응답 결과가 변할 수 있습니다

terry-yes commented 3 years ago

🦊 HTTP Method

🦊 GET Method

쿼리 스트링 Clean URL(Semantic URL)
http://example.com/index.php?page=foo http://example.com/foo
http://example.com/index.php?page=consulting/marketing http://example.com/consulting/marketing
http://example.com/products?category=2&pid=25 http://example.com/products/2/25
http://example.com/cgi-bin/feed.cgi?feed=news&frm=rss http://example.com/news.rss

🦊 POST Method

joey-ful commented 3 years ago

🦋 GET

서버에서 특정 데이터를 가져와서 보여주는 용도

🦋 POST

서버의 값이나 상태를 바꾸어 데이타베이스값을 추가하거나 수정하는 것


GET POST
URL에 데이터 노출 노출O 바디에 담겨있어 URL엔 노출X
URL예시 http://localhost/getexample?id=jehong&password=secret http://localhost/postexample
데이터가 포함되는 위치 Header에 데이타 포함 Body에 데이타 포함
북마크 가능 여부 북마크O 북마크X
데이타 전송 길이 제한 제한O 대용량 데이타 전송 가능
캐싱 가능 여부 캐싱O 캐싱X
멱등(동일한 요청에 동일한 응답) 동인한 요청에 동일한 응답 동일한 요청에 다른 응답
365kim commented 3 years ago

(즉석) GET과 POST 모두 클라이언트가 서버로 요청을 보낼 때 사용하는 HTTP 메서드입니다. GET은 CRUD의 R 즉, 리소스의 조회를 할 때 사용하고, POST는 CRUD의 C 즉, 리소스를 생성해서 서버에 저장할 때 사용합니다.

(보충) POST의 경우 GET과 달리 바디에 내용을 담아 보낼 수 있어, 단순히 URL로 리소스를 요청하는 GET 뿐만 아니라 대부분의 메서드를 대체할 수 있지만 특별한 경우가 아니라면 각각의 메서드에 맞는 역할로 사용하는 것이 좋습니다. (POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있습니다.)

SeongsangCHO commented 3 years ago

GET, POST라는 HTTP메소드를 통해 서버에 요청을 보내고 이에 대한 응답을 받을 수 있습니다.

GET요청은 주로 조회의 목적으로 URL와 쿼리스트링을 함께 서버에 전송해 이에 대한 응답을 받습니다. 예를들어 게시글 중 3번을 보고싶을 때 게시판.com/게시글?postId=3 처럼 ? 뒤에 이름, 값을 가지고 조건을 주어 요청을 전송할 수 있습니다. 데이터를 URL에 붙여 전송하므로 전송길이에 제한이 있습니다. GET에 대한 응답은 항상 같습니다.

POST요청은 생성, 변경의 목적으로 GET과 달리 URL에 데이터를 붙이지 않고 메시지의 body에 담아서 전송해서 길이제한이 없습니다. 응답이 GET과달리 항상 같지 않습니다.

yeosong1 commented 3 years ago

둘 다 클라이언트가 서버에게 사용하는 요청 메시지의 메서드 중 하나로, 요청하는 내용/목적/특징에 따라 메서드를 정해 사용하면 이에 따라 응답 코드(+ 요청한 내용에 맞는 데이터)를 포함한 응답 메시지를 받게 됩니다.

GET는 이 페이지의 7번 카테고리 21번 제품을 보여줘! 처럼 클라이언트가 정보를 받을 때 쓰고, POST는 말 그대로 블로거가 새로운 글을 쓰기 위해 내용을 적고 포스팅 버튼을 누를 때처럼, 클라이언트의 데이터를 서버로 보낼 때 (그래서 서버의 어느 리소스를 생성하거나 변경할 때) 주로 쓰입니다.

GET은 POST에 비해 정보 조회에 용이합니다. URL에 필요한 내용을 모두 담아 요청하기 때문에 비교적 구체적인 내용을 쿼리스트링을 통해 요청할 수 있습니다. 항상 같은 결과를 보장(멱등)하기 때문에, 캐싱이 가능해서 더 빨리 로드할 수 있다는 장점이 있습니다. 유의할 부분은 URL 길이에 한계가 있다는 점(브라우저 별로 제한이 다름)인데, HTTP 메시지의 헤더만 사용하여 정보가 전달되기 때문이고, POST는 바디에 데이터를 담아 전달하기 때문에 전송 정보량에 한계가 없다는 점이 GET과 크게 다른 점 입니다. 그래서 POST는 정보 전송에 더 용이합니다.

hyunjune-lee commented 3 years ago

GET과 POST는 둘다 HTTP 메소드로서 클라이언트가 서버어게 요청을 수행하기 위해 할 행동을 표시해주는 역할을 하는데 주로 GET은 가져오는 역할, 즉 서버로부터 정보를 조회하는 메소드이고, POST는 서버의 리소스를 생성/변경하는 메소드입니다. 둘의 차이로는 데이터 위치, URL에 데이터 노출 여부, 캐싱여부가 있는데 데이터위치는 GET은 Header에 쿼리스트링으로 저장되고 POST는 body에 저장됩니다. GET은 쿼리스트링 형식으로 저장되기 때문에 데이터 용량한계가 있고 POST같은 경우에는 body에 저장되기 때문에 대용량으로 데이터를 보낼 수 있습니다. 두번째 URL에 데이터 노출 여부는 GET 같은 경우에는 URL에 쿼리스트링이 보임으로 어떤 인자들을 전송했는지 노출이 되지만 POST 같은 경우에는 body를 통해 데이터를 전송함으로 URL에 데이터 노출이 되지 않습니다. 여기서 이렇게 보면 GET보다는 POST가 보안이 조금 낫다고 할 순 있지만 POST의 body에 있는 데이터도 좀만 노력하면 노출될 수 있기 때문에 민감한 정보는 반드시 암호화를 해야한다는 점을 유의해야합니다. 마지막으로 캐싱여부에서 GET은 캐싱이 되고 POST는 캐싱이 안되는데 이는 두 메소드의 멱등성과도 관련이 있습니다. GET 같은 경우에는 멱등하게, 즉 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답을 돌아오도록 설계되어 있기 때문에 같은 응답이 올것을 가정하기 때문에 캐싱이 가능합니다. (또한 불필요한 요청을 제한하기 위해서도) 반대로 POST는 비멱등함으로써 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있으므로 캐싱이 불가능하다는 특징을 가지고 있습니다.


HTTP

HTTP는 클라이언트와 서버간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜이다. 이때 HTTP요청에 포함되는 HTTP메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 쓰인다. 이 HTTP 메소드 중 GET과 POST의 특징과 차이점

GET

  1. brief : 가져온다 - 서버로부터 정보를 조회하기 위해 설계된 메소드.
  2. 데이터 위치 : Header (여기에 URL형식으로 저장되어 보내짐)
  3. URL에 데이터 노출 여부 : O - 쿼리 스트링으로 전송한다. (보안에 취약하지만 상세한 링크 공유 장점)

ex) www.example.com/resources?name1=value1&name2=value2

  1. 캐싱 여부 : O - 멱등하다.(서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다) + 불필요한 요청을 제한하기 위해서

POST

  1. brief : 수행한다 - 리소스를 생성/변경하기 위해 설계되었다.
  2. 데이터 위치 : Body (+URL이 아닌 Body에 담아 보내기 때문에 대용량 데이터를 전송할 수 있다.)
  3. URL에 데이터 노출 여부 : X - 전송될때 내용이 눈에 안 보이지만(URL에) 보안이 좋은건 아님 민감한 정보는 꼭 암호화를 하자.
  4. 캐싱 여부 : X - 비멱등하다.(서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다.)

Q

hidaehyunlee commented 3 years ago
get post
정보 조회 목적 리소스 변경 목적
안전 안전하지 않음
캐시가능 캐시불가
멱등성 멱등하지 않음
데이터가 url 쿼리스트링에 담김 데이터가 요청메세지 본문 body에 담김