GET과 POST는 HTTP의 주요 메소드이다
HTTP 매소드는 Client와 Server간의 request와 response데이터 전송방식을 말한다. 다시말해 Server가 수행해야하는 동작을 지정하여 요청하는 것이다.
GET의 경우 리소스 조회 메소드(read)이다.
서버에 전달하고 싶은 데이터는 query를 통해서 전달하게 된다. query 는 데이터베이스등에서 원하는 정보를 요청하는것을 말한다. 쿼리스트링은 URL뒤에 오는 문자열로 ?로 시작하게 된다. 현제 블로그 작성 URL을 보면 다음과 같다.
https://iqsp.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F#
즉 여기서 qureystring은 ? 뒤에 오게되는 ?type=post&returnURL=%2Fmanage%2Fposts%2F#이며 각각 type=post, returnURL=%2F, manage%2F, posts%2F의 4개의 요청으로 구성되어있다.
GET의 특징을 보자면 다음과 같다.
- GET 요청의 경우 캐시가 가능하다.
GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다. - GET 요청의 경우 브라우저의 히스토리에 남는다.
- GET 요청의 경우 북마크 될 수 있다.
- GET 요청의 경우 길이제한이 있다.
다만 제한은 브라우저마다 다르다. - GET은 데이터 요청시만 사용된다.
- GET 요청의 경우 파라미터에 노출이되므로 중요한 정보를 다루면 안된다.
POST는 전달한 데이터의 처리나 생성을 요청하는 메소드(create)이다. 메시지 body를 통하여 서버로 요청 데이터를 전달하게 되면 서버는 이를 처리하여 업데이트를 하게된다. 이 데이터는 주로 신규 리로스의 등록이나 프로세스의 처리 등에 사용된다.
body 타입은 Conetnt-Type 헤더에 따라 결정되며 GET에서 쿼리스트링이 body에 담겨져 보내진다고 생각하면 된다. GET과 다르게 길이제한이 없으며 데이터가 외부적으로 드러나지 않는다. HTML에서 form 태그를 통해 전송되는것이 일반적이다.
POST의 특징은 다음과 같다.
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 북마크 되지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
GET과 POST의 차이점을 보게 되면 다음과같이 정리가 가능하다.
- 사용목적에따라 GET은 서버의 리소스에서 데이터 요청시, POST는 서버의 리소스를 생성하거나 업데이트시 사용된다.
- 데이터 요청시에 데이터를 담는곳이 GET의경우 URL이며 POST는 body이다.
- 멱등성의 차이가 난다. GET은 멱등, POST는 멱등이 아니다.
멱등성은 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 말한다. GET은 리소스 조회이므로 요청이 반복되므로 응답이 같을 것이다. 다만 POST의 경우 리소스의 생성 및 업데이트로 사용되므로 응답이 달라질 수 있다.
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
- DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
- 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.
Reference
https://noahlogs.tistory.com/35
https://velog.io/@dnstlr2933/HTTP-Method
'프로그래밍 및 코딩 > PHP' 카테고리의 다른 글
Login page만들기_end (0) | 2023.04.09 |
---|---|
Login page 만들기_로그인 및 세션 생성 (0) | 2023.04.09 |
Login page 작성_php 사용자 인증 (0) | 2023.04.04 |
Login page 작성_html, css 작성 및 DB생성 (0) | 2023.04.03 |
MySQL 데이터베이스 생성 (0) | 2023.04.02 |