티스토리 뷰
HTTP
- 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고받을 수 있는 프로토콜
- 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송
- 이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야 할 행동을 표시하는 용도로 사용
GET과 POST의 차이
GET
- HTTP/1.1 스펙인 RFC2616의 Section9.3에 따르면 GET은 서버로부터 정보를 조회하기 위해 설계된 메소드
- GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송
URL의 끝에? 와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부른다.
만약, 요청 파라미터가 여러 개이면 &로 연결한다.
쿼리스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크 할 수 있다.
쿼리스트링을 포함한 URL의 샘플은 아래와 같다.
www.example-url.com/resources?name1=value1&name2=value2
GET은 불필요한 요청을 제한하기 위해 요청이 캐시 될 수 있다.
js, css, 이미지 같은 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다.
정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시 해두고,
동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시 된 데이터를 사용한다.
POST
- POST는 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야 될 데이터를 HTTP 메시지의 Body에 담아서 전송한다.
- HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다.
- 그래서 POST 요청은 GET과 달리 대용량 데이터를 전송할 수 있다.
이처럼 POST는 데이터가 Body로 전송되고 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만,
POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.
그리고 POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다.
데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추한다.
만약, 알 수 없는 경우에는 application/octet-stream로 요청을 처리한다.
GET과 POST의차이
- GET은 Idempotent, POST는 Non-idempotent하게 설계.
- Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있다.
- 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
즉, 멱등이라는 것은 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다.
여기서 GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다.
이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용해야한다.
예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다.
반대로 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.
게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 사용다.
이처럼 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있다.
GET과 POST는 이처럼 큰 차이가 있기 때문에 설계원칙에 따라 적절한 용도로 사용해야한다.
원문 또는 참고
'개발지식 > Web' 카테고리의 다른 글
Http Status Code (0) | 2023.04.02 |
---|---|
CSR and SSR (0) | 2023.04.01 |
RESTful API (0) | 2023.03.31 |
Cookie and Session (0) | 2023.03.29 |
- Total
- Today
- Yesterday
- Laravel vaildation
- Laravel 데이터 취급 비교
- artisan serve란
- 상류공정
- Laravel 데이터 삭제 처리
- php trait
- PHP 7 8변경점
- Laravel의 쿼리빌더와 Eloquent의 차이
- php artisan migrate use of undefined constant
- Laravel 인증 라이브러리
- Laravel post등록
- Laravel 페이지네이션
- Laravel Pagination
- Laravel Carbon
- Laravel 서비스 컨테이너
- Laravel 컴포넌트 참조
- TCP
- vue.js의 computed 속성
- Laravel artisan 명령어 정리
- Laravel seeder 데이터
- PHP int 0값
- Laravel vite webpack
- git branch 정렬
- Laravel 이미지 폴더
- git branch 날짜순
- DATE DATETIME TIMESTAMP 차이점
- Laravel 라이프 사이클
- Laravel 서비스 프로바이더
- PHP의 Null
- 생소한 일본어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |