GET 방식
- default 전송방식으로 http header에 정보(QueryString, 환경변수를 통해 전달)를 실어 보냄
- URL에 데이터가 노출되어 보안에 취약.
- 캐싱 가능
● 캐싱이 사용 가능으로 설정되면 서버의 비즈니스 오브젝트 대신 브라우저 캐시에서 데이터 검색
● 요청의 엔티티 태그(ETag) 값이 이전 요청 값과 일치하는 경우 요청에 대해 캐싱 사용
● 캐싱은 각 사용자에 대해 고유하며 Cache-Control HTTP 헤더 특성에 의해 제어
- 브라우저 히스토리에 기록이 남음
- 전송하는 데이터양에 한계가 있음(브라우저마다 GET 요청 길이 제한 존재)
- 검색엔진에서 검색단어 전송에 많이 이용함
POST 방식
- 서버로 정보를 전송하기 위해 설계되었으며 http body에 정보를 실어 보낸다
- 서버에 전송된 데이터의 디코딩 과정은 GET 방식과 같지만 QueryString이라는
환경변수에서 값을 얻는 것이 아니라 표준입력으로 얻음
- 데이터 크기 제한 없음
- URL에 데이터가 노출되지 않으므로 캐싱 불가
- URL에 파라미터가 표시되지 않음
- <form> 태그의 method = "post" 속성으로 설정
- GET 방식에 비해 속도가 느림
GET 방식과 POST 방식의 차이점
- 근본적인 차이
● GET은 idempotent(멱등)이고 POST는 non-idempotent이다.
(멱등 : 연산을 여러 번 적용하더라도 달라지지 않는 성질)
● GET은 요청을 반복 수행해도 결과가 동일하게 돌아옴
하지만 POST는 요청이 실행되면 서버 상태를 변경하며 동일한 결과를 얻는 것을 보장할 수 없음
- GET 요청은 브라우저에서 캐시를 할 수 있음
● 글을 작성할 때 GET 방식으로 글을 서버에 전송할 경우
GET 요청과 응답이 브라우저에 의해 캐시되었다가 다시 사용될 우려가 있음
● 이 경우 캐시에 의해 자동으로 동일한 글을 또 작성하는 동작이 서버에서 발생 가능 -> 심각한 오류
- 전송 속도 : GET > POST
- 히스토리 백 할 때 GET은 이전 데이터를 보여주며, POST는 새로 요청
- 인코딩 방식 다름(GET 방식의 데이터는 직접 인코딩과 디코딩이 필요)
- GET은 전송할 데이터의 크기 제한이 있지만 POST는 제한이 없음
- GET은 보안에 취약하나, POST는 보안 유지
- GET은 서버의 데이터를 가져오는데 적합(SELECT)
- POST는 서버의 값이나 상태를 바꾸는데 사용(INSERT, UPDATE, DELETE 등)
'Tech Interview > Web' 카테고리의 다른 글
MVC 패턴 (0) | 2023.02.15 |
---|---|
쿠키와 세션, 필터 (0) | 2023.02.14 |
포워딩과 리다이렉트 (0) | 2023.02.13 |
JSP와 Servlet (0) | 2023.02.12 |
웹 서버 및 WAS (0) | 2023.02.10 |