Request methods are considered "safe" if their defined semantics are essentially read-only; i.e., the client does not request, and does not expect, any state change on the origin server as a result of applying a safe method to a target resource. Likewise, reasonable use of a safe method is not expected to cause any harm, loss of property, or unusual burden on the origin server.
The purpose of distinguishing between safe and unsafe methods is to allow automated retrieval processes (spiders) and cache performance optimization (pre-fetching) to work without fear of causing harm. In addition, it allows a user agent to apply appropriate constraints on the automated use of unsafe methods when processing potentially untrusted content.
안전한 메서드가 중요한게 안전한 메서드만 서버 상태에 영향을 주지 않기 때문에 get만 캐쉬 성능 최적화를 할 수 있다.
안전하기 때문에 프록시 서버에서 캐싱하여 pre-fetching하는게 가능해진다.
사실 POST도 스펙에 따르면 캐쉬 최적화가 가능은 한데, 제한이 많아서 거의 GET만 한다고 한다.

Of the request methods defined by this specification, the GET, HEAD, OPTIONS, and TRACE methods are defined to be safe.
스펙에 따르면 요청 메서드 GET, HEAD, OPTIONS, TRACE 메서드는 안전하다고 정의된다.
POST, PUT, DELETE 는 안전하지 않다. 서버 내부 상태가 바뀌기 때문이다.
The purpose of distinguishing between safe and unsafe methods is to allow automated retrieval processes (spiders) and cache performance optimization (pre-fetching) to work without fear of causing harm. In addition, it allows a user agent to apply appropriate constraints on the automated use of unsafe methods when processing potentially untrusted content.
안전한 메서드와 그렇지 않은 메서드를 구별하는 것의 목적은 안전하게 캐쉬 성능 최적화(pre-fetching)에 있다.
로그아웃을 예로 설명해보면 이 내용이 더 와닿는다. 로그아웃을 GET으로 요청할지 POST로 요청할지의 근거가 여기에 있다. 만약 로그아웃을 GET으로 요청하게 설계한다고 가정하자. 브라우저는 이 로그아웃 요청이 안전한 메서드라 판단하고 pre-fetching, 캐쉬를 할 수 있게 된다. 그러면 url 에 그 리소스가 그대로 담기게 된다. 사용자 입장에서는 페이지를 이동하거나 할 때, 갑자기 캐쉬된 url 요청이 발생하여 원하지도 않는 로그아웃이 일어나게 될 수 있다. 즉, 사용자 경험이 안좋아 지게 된다.
A user agent SHOULD distinguish between safe and unsafe methods when presenting potential actions to a user, such that the user can be made aware of an unsafe action before it is requested.
브라우저는 안전하지 않은 메서드가 요청되기 전에 사용자에게 미리 알려줘야 한다.
reference:
RFC 9110 - HTTP Semantics