POST 길이, 용량 제한
php 문법을 보다가 POST 부분에
php는 이렇다고 해서 갑자기 궁금해진 건데 과연 post 요청은 제한이 없나? (그렇다고 알고 있는데 진짜 그런가?)
현재 주로 사용중인 사항은 java+tomcat 8.0(로컬, 테스트) / 8.5 (본 서버)인데
톰캣은 설정을 통해 post 요청 한계를 변경 가능하다.
maxParameterCount ⇒ 파라미터 개수 (-1로 설정 시 no limit)
maxPostSize ⇒ 값의 크기 지정 (-1로 설정시 no limit)
실제로 설정 변경 시 적용이 되는지 아래의 블로그를 통해 확인할 수 있다.
기존 10000개가 넘는 파라미터 송신 시 마지막이 잘리는 걸 확인하고,
파라미터 변경 ( maxParameterCount 변경) 후 값이 제대로 넘어가는 걸 확인한다.
https://shxrecord.tistory.com/183
톰캣은 설정 변경을 통해 지원한다 하는데
과연 HTTP 1.1 은 POST 요청에 한계가 없을까?
나랑 같은 생각을 한 사람이 있군 (근데 답변 날짜… 12년 전이다.)
답변을 번역해보자
- HTTP 프로토콜은 제한을 딱히 명세하지 않았다.
- POST는 GET(URL의 길이 제한 { 대략 2KB } ) 보다 많이 보낼 수 있다.
- HTTP 서버에 따라 달라지는데 보통 1MB ~ 2GB 정도
- HTTP 클라이언트 (브라우저나 user-agent 머 postman 같은?) 들은 자기만의 제한이 있기 때문에 maximum POST body request는 min(serverMaximumSize, clientMaximumSize)로 정해진다.
그럼 톰캣을 사용해 서비스하는 입장에서 post 사이즈의 제한을 풀어도
클라이언트 단에서 제한이 걸릴 수도 있다는 얘기?
클라이언트의 스펙은 다음과 같다고 한다.
다른 서버들의 스펙은 대략 아래와 같다고 한다.
- Nginx (largest web server market share as of April 2019)
- Apache
- maximum 2GB, no default documented
- IIS
- default 28.6MB for the request length, 2048 bytes for the query string; maximum undocumented
- InfluxDB
- default ~25MB, maximum undocumented
스택 오버 플로우 검색 시 역시 HTTP 프로토콜은 제한은 없고,
server configuration, browser limitation에 의해 좌우된다고 찾을 수 있다.
정확히는 min(serverMaximumSize, clientMaximumSize)
https://stackoverflow.com/questions/2364840/what-is-the-size-limit-of-a-post-request
그렇지만 POST limit에 막힐 정도로 큰 파일을 주고받다니 무섭다…
이런 문제점이 있기 때문에 서버 기본 설정을 건드리기보단… POST 보낼 때 방식을 바꾸는 게 좋아 보인다.