본문 바로가기
ETC/깨달음 노트

HTTP 메서드와 멱등성

by sorryisme 2019. 10. 19.

웹 프로젝트를 구현하면서 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의 경우 리소스의 위치를 정확하게 지정하고 재요청을 했을 경우

예상되는 결과(리소스가 수정되었음, 리소스가 삭제되었음) 등의 동일한 결과(멱등하다)를 얻을 수 있습니다.

 

참고 사이트

https://ko.wikipedia.org/wiki/HTTP

'ETC > 깨달음 노트' 카테고리의 다른 글

톰캣을 내렸다 올려도 세션이 유지될 때  (0) 2019.10.17