일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 1819 (HY000):
- LOS 5번
- blind SQLi
- 가상머신 os
- ModuleNotFoundError: No module named ‘requests’
- docker compose
- SQLi wargame
- goblin 3번
- No module named ‘requests’
- XAVIS
- Kail Linux
- UTM
- M2
- sql injection
- Python requests 설치
- 2002(HY000)
- btmp
- Error Based SQL Injection
- los.rubiya.kr
- MySQL
- Union SQL Injection
- Lord of SQL Injection
- mocOS
- 우분투
- Lord of SQLinjection
- SQL i
- str_replace함수
- utmp
- sqli
- ubuntu
- Today
- Total
klaus
GET vs POST 개념 및 차이점 본문
PHP 게시판 개발 공부를 하면서 많이 본 것 중 하나가 GET와 POST입니다.
공통적으로 웹브라우저에서 서버에 요청하는 메서드라는 것과 GET은 URL에 노출되고, POST는 URL에 포함되지 않기 때문에 보안상 도움이 된다. 는 정도였습니다.
이번에 정확하게 찾아보고 정리해보도록 하겠습니다.
0. 들어가기 전에
GET와 POST는 HTTP Method입니다.
HTTP 메서드는 프로토콜을 사용하여 DB에 어떤 행동을 할 것인지 나타내는 방법이라고 생각하면 됩니다.
그럼 종류를 간단하게 알아보고 GET와 POST차이점을 확인해보겠습니다.
메소드 | 설명 |
GET | 서버의 리소스 취득 (url/uri 방식으로 웹서버 측 리소스(데이터)를 요청) |
POST | 서버에게 내용 전달(파일 전송 가능하며 요청시 HTTP 바디에 데이터를 담아 웹서버로 전송) |
PUT | 서버의 내용 갱신(파일 전송 가능하고 POST와 비슷하지만, 갱신이 주목적) |
DELETE | 서버가 가지고 있는 리소스를 삭제 |
HEAD | 메세지헤더(문서 정보) 취득 (GET과 비슷하지만 문서의 헤더 정보만 요청) |
OPTIONS | 웹서버측 제공 메소드에 대한 질의 |
1. GET 방식
GET은 리소스(데이터)를 요청할 때 필요한 데이터를 쿼리 스트링(URL)을 통해 전송합니다.
쿼리 스트링은 URL 주소 부분에? 와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 뜻합니다.(&를 사용하여 연결)
쿼리 스트링을 사용하게 되면 URL에 조회 조건을 표기하기 때문에 특정 페이지를 링크하거나 북마크 할 수 있습니다.
GET 특징
- 캐시 정보가 가능
- 브라우저의 히스토리에 정보가 남는다.
- 길이의 제한이 있다.
- URL에 정보가 남기 때문에 중요한 정보를 취급할 때에는 사용하지 않는 것을 권고(ID/PW와 같은 민감 데이터)
2. POST 방식
POST는 리소스(데이터)를 생성하거나, 변경하는 방식으로 GET방식과 달리 전송해야 될 데이터를 HTTP 메시지의 Body 부분에 전송하는 방식입니다.
Body 같은 경우 길이의 제한이 없이 웹서버 측에 요청할 수 있기 때문에 대용량의 데이터를 전송 가능합니다.
Body부분에 전송되기 때문에 내용이 눈에 보이지 않아 GET보다는 안전하다는 생각이 있지만, 크롬 개발자 도구와 같은 툴로 요청 내용이
확인 가능하기 때문에 해시/암호화를 하여 전송을 해야 합니다.
그리고 POST로 요청할 때에는 헤더 부분의 Content-type에 요청하려는 데이터의 타입을 표시하여 전달합니다.
HTML 태그의 경우 application/x-www-form-urlencoded, text/plain, multipart/form-data 등을 사용하며, 스프링의 경우 application/json와 같은 방식으로 차이가 있습니다.
만약, 데이터 타입을 표시하지 않으면 웹 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추합니다.
서버 측에서 확인할 수 없는 경우 application/octet-stream로 요청을 처리합니다.
POST 특징
캐시 되지 않는다.
웹 브라우저에 히스토리가 남지 않는다.
요청 데이터의 길이 제한이 없다.
Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환합니다.
3. GET과 POST의 차이점
특징 | GET | POST |
사용목적 | 서버의 리소스를 요청 (읽기, 검색) |
서버의 리소스를 생성하거나 업데이트 (생성, 수정, 삭제) |
요청시 BODY 유뮤 | BODY 없음 | BODY 있음 |
idempotent | idempotent | Non-idempotent |
idempotent??
멱등이란? idempotent(멱등)의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
다시 말하면 동일한 연산을 여러 번 사용하여도 동일한 결과가 나온다는 뜻
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같게 나오겠지만,
POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 Non-idempotent입니다.
다만, 생성 POST, 수정 PUT 또는 PATCH, 삭제 DELETE를 사용하는 게 맞는 표현입니다.!!
Reference
https://girawhale.tistory.com/66
https://brilliantdevelop.tistory.com/33
'IT지식한입!' 카테고리의 다른 글
[M2 Mac] 가상머신(UTM) OS설치 방법 (feat. 칼리(kail) 리눅스 설치) (0) | 2023.01.15 |
---|---|
[M2 Mac] 가상머신(UTM) OS설치 방법 (feat. win, uBuntu, centos) (0) | 2023.01.02 |
[Visual Studio code] Python requests 설치 (feat. MAC) (1) | 2022.12.05 |
2021년도 OWASP Top 10 순위 (0) | 2022.10.24 |
uBuntu 초기 설정 (0) | 2022.10.18 |