유효성 검사시 `GET` 대신 `POST`를 쓸 수도 있다.

Falcon·2022년 6월 14일
1

etc

목록 보기
2/5

RESTful API 에서 메소드(행위)별 동작은 다음과 같다.

메소드동작
GET조회
POST생성
PUT, PATCH수정
DELETE삭제

그렇다면, 이메일이나 닉네임 유효성 검사는 GET 아닌가?

🤔 왜 Sendgrid 에서는 이메일 검증을 POST 로 했을까?

GET 이 가진 위험성

1. URL 길이제한

브라우저별 URL 길이 제한은 다음과 같다.
통상 2,083자로 알고있으면 되겠다. (모든 브라우저를 지원하고자 하는 서비스라면)

BrowserURL Length
Internet
Explorer
2,083
Microsoft Edge2,083
Google Chrome32,779
Google Android8,192
Mozilla Firefox64,000
Apple Safari64,000

2. 한글깨짐 위험

GET 은 ASCII Character 만 허용된다.
POST 는 Binary data 도 받을 수 있다.

3. 자동 캐싱

GET 요청은 브라우저단에서 캐싱이 일어난다.
다음 두 URL 을 보자. 과연 캐싱이 될까?

/validations?email=falcon@velog.com&name=falcon
/validations?name=falcon&email=falcon@velog.com

전달되야할 키값은 동일하나
⚠️ 캐싱이 일어나지 않는다.
HTTP 는 query parameter 의미에 대해 인식하지 않고, URI 전체를 통으로 인식하기 때문이다.

HTTP Caching Headers

  • Cache-Control
  • Expires
  • Etag

등등은 모두 URI 가 동일할 때 의미가 있다.

POST 라고 무적권 생성인건 아니다

The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics.
- RFC 7231

📝 결론

브라우저별로 다른 캐싱정책, URL 길이, 한글 깨짐 등의 이슈를 피하기 위해 GET 이 아닌 POST를 사용할 수 있다.
POST 라고해서 무조건 리소스 생성시에만 써야한다는 것은 아니다.


🔗 Reference

profile
I'm still hungry

0개의 댓글