HTTP POST
IT 위키
더 많은 작업
- HTTP POST; POST 메서드
- 처리할 데이터를 요청 메시지의 본문(body)에 담아 서버로 보내, 대상 자원이 그 데이터를 처리하게 하는 HTTP 요청 메서드
- 폼 제출, 로그인, 게시글 작성, 파일 업로드처럼 서버의 상태를 바꾸는 요청에 쓴다
- 데이터가 본문에 실리므로 주소창·서버 접속 로그·브라우저 기록에 남지 않는다. 다만 암호화되는 것은 아니다 — 내용을 보호하려면 HTTPS 를 써야 한다
- 본문 길이에 표준상 한도가 없어 큰 데이터를 보낼 수 있다
- 본문 형식은
Content-Type헤더로 알린다(application/x-www-form-urlencoded,multipart/form-data,application/json등) - 멱등성이 없다. 같은 POST 를 두 번 보내면 글이 두 번 등록될 수 있다. 그래서 브라우저는 새로 고침 때 다시 보낼지 묻는다
- 응답은 기본적으로 캐시하지 않는다
POST /board/write HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 title=hello&content=world
| 구분 | GET | POST |
|---|---|---|
| 데이터 위치 | URL 의 쿼리 문자열 | 요청 본문 |
| 쓰임 | 자원 조회 | 데이터 제출·상태 변경 |
| 길이 제한 | URL 길이에 묶인다 | 사실상 없다 |
| 주소창·로그 노출 | 노출 | 노출되지 않음 |
| 멱등성·캐시 | 멱등, 캐시 가능 | 멱등 아님, 기본 캐시 안 함 |
- POST 로 바꾼다고 크로스사이트 요청위조(CSRF)가 막히지 않는다. 공격자가 자동 제출되는 폼을 심으면 피해자 브라우저가 쿠키를 실어 HTTP POST 요청으로 데이터를 본문에 첨부해 보낸다. CSRF 토큰,
SameSite쿠키, 재인증이 대책이다 - 민감한 값을 GET 쿼리 대신 POST 본문으로 보내면 URL·Referer·로그로 새는 것은 막을 수 있다