웹 프로젝트를 구현하면서 HTT{ 메서드 중 가장 많이 사용하는 것이 GET/POST 였습니다.
그러면서 들은 것이 바로
GET은 URI에 파라미터가 포함되기 때문에 보안이 취약하며 URI가 길어진다.
그러므로 조회용으로 사용해라
그 외 모두 POST를 사용하고 리소스가 Body에 포함되어 전달되기 때문에 상대적으로
보안취약성이 덜하다 라고 착각하고 있었습니다.
틀린 말이 아니지만 GET/POST 메서드에 대한 본질은 아닌 듯 싶으며
REST에 대한 개념이 부족했고
웹 아키텍처 스타일에 대한 이해가 없었기 때문에 착각하고 있었습니다.
웹을 지탱하는 기술이라는 책을 통해 조금은 이해할 수 있게 되었습니다.
참고서적 : 웹을 지탱하는 기술
https://book.naver.com/bookdb/book_detail.nhn?bid=6646793
아래내용은 위 책에 내용을 요약 정리한 것임을 알려드립니다.
HTTP 메서드 정리
메서드 |
의미 |
GET |
리소스 취득 |
POST |
서브 리소스의 작성, 리소스 데이터의 추가 그 밖에 처리 |
PUT |
리소스 갱신, 리소스의 작성 |
DELETE |
리소스 삭제 |
HEAD |
리소의 헤더 취득 |
OPTIONS |
리소스가 서포트하는 메서드의 취득 |
TRACE |
자기 앞으로 요청 메세지를 반환 시험 |
CONNECT |
프록시 동작의 터널 접속 변경 |
1. POST에는 3가지 역할
1) 서버 리소스의 작성(추가)
2) 리소스에 데이터 추가
3) 다른 메서드로는 대응할 수 없는 처리
2. PUT - 리소스의 갱신 , 작성
1) 리소스의 갱신
2) 리소스의 작성(리소스가 존재하지 않을 때)
** 리소스 작성에 대한 POST와 PUT의 구분
POST로 리소스를 작성할 경우 URI를 지정할 수 없으며 URI 결정권을 서버측에 있다
PUT으로 리소스를 작성할 경우 URI는 클라이언트가 지정한다
URI가 안정적으로 구성되기 위해서는 서버에서 정하는 것이 좋으므로 POST를 권한다.
HTML에서 메서드를 GET 과 POST만 지원하는 이유
- HTML 제한에 의해 GET과 POST만 지원하는 시대가 오랜 기간 유지 되었기 때문에
* 이를 해결하기 위한 방법
1) _method 파라미터
<form target ="/List/item1" action ="POST">
<input type ="hidden" id="_method" value="PUT">
.. 중략
Ruby on Rails가 채용 중
2) X-HTTP-Method-Override(구글 GData 방식)
POST 내용이 XML 등 application/x-www.form-unlencoded 이 외의 경우에는 1번 같은 방법 사용 불가
헤더에 X-HTTP-Method-Override: PUT이 포함되어 처리
멱등성과 안정성
멱등성 : 어떤 조작을 반복해도 결과가 동일한 것을 의미
cf:) PUT / DELETE는 멱등
안전성 : 조작 대상의 리소스 상태를 변화시키지 않는 것
cf:) GET이 멱등이자 안전한 것
POST는 멱등이 아니면서 안전하지도 않다
중요한 것은 멱등성이라 판단됩니다.
예를 들어 GET 메서드로 호출하는 경우 조회인 경우인데
여러번 호출 하더라도 그 조회 리소스 결과는 변하지 않으며(안전하며) 결과는 동일합니다(멱등하다)
POST의 경우
POST 호출의 경우 리소스의 결과값이 변하며(안정하지 않으며)
호출 중 에러가 발생되어 재요청을 했을 때 리소스가 이중으로 추가될 가능성이 있습니다.(멱등하지 않다)
PUT과 DELETE의 경우 리소스의 위치를 정확하게 지정하고 재요청을 했을 경우
예상되는 결과(리소스가 수정되었음, 리소스가 삭제되었음) 등의 동일한 결과(멱등하다)를 얻을 수 있습니다.
참고 사이트
'ETC > 깨달음 노트' 카테고리의 다른 글
톰캣을 내렸다 올려도 세션이 유지될 때 (0) | 2019.10.17 |
---|