안전한(safe) 메서드는 서버의 상태를 변경하지 않는, 즉 '읽기 전용'으로 정의된 HTTP 메서드입니다.
GET·HEAD·OPTIONS가 안전하며, 사용자가 여러 번 호출해도 부작용(side effect)이 없어야 한다는 계약입니다.
안전과 멱등은 다릅니다. 모든 안전한 메서드는 멱등이지만, 그 역은 성립하지 않습니다. DELETE는 멱등이지만 상태를 바꾸므로 안전하지 않습니다. 즉 '안전 ⊂ 멱등'입니다.
안전성은 크롤러·프리페치·프록시가 신뢰하는 규약입니다. 검색 엔진 봇이 GET 링크를 마음껏 따라가고 브라우저가 링크를 미리 프리페치할 수 있는 것은 GET이 안전하다는 전제 때문입니다. 그래서 '삭제하기'나 '주문하기' 같은 상태 변경 동작을 GET 링크(`/delete?id=42`)로 만드는 것은 위험합니다 — 봇이 링크를 긁는 것만으로 데이터가 지워질 수 있고 CSRF에도 취약합니다. 상태를 바꾸는 동작은 반드시 POST/PUT/DELETE 같은 비-safe 메서드로 설계해야 합니다.