본문 바로가기

JSP(Java Server Page)

Get방식의 길이 제한에 대한 이야기

get방식의 글자수 제한은 256자가 아니다

의문점


일반적으로 웹페이지에서 get방식으로 데이터를 넘길경우 256바이트 이상을 넘길수 없다고 합니다. 상당수의 책에서 이렇게 되있더군요.
URL문자열이 256글자를 넘길수 없다는 이유때문이라고 하는데 개인적으로 운영하는 웹페이지에서는 좀 색다른 현상이 나옵니다.


Http://아무개.com/bbb/고정보관/군사정보/2차대전/육상병기/051218
중구축전차 페르디난트_엘레판트/

이런경로를 UTF-8엔코딩을 하면 아래처럼 변합니다.

Http://아무개.com/bbb/%ea%b3%a0%ec%a0%95%eb%b3%b4%ea%b4%80/%ea%b5%b0%ec%82%ac%ec%a0%95%eb%b3%b4/2%ec%b0%a8%eb%8c%80%ec%a0%84/%ec%9c%a1%ec%83%81%eb%b3%91%ea%b8%b0/051218%ec%a4%91%ea%b5%ac%ec%b6%95%ec%a0%84%ec%b0%a8%20%ed%8e%98%eb%a5%b4%eb%94%94%eb%82%9c%ed%8a%b8_%ec%97%98%eb%a0%88%ed%8c%90%ed%8a%b8/


300줄의 URL입니다. 원래대로라면 접근이 안되야 정상입니다만 접근이 됩니다.
웹에서 검색해보니 URL경로는 2048글자도 가능하다고 합니다. 그러면 GET방식도 되어야 하지 않을까요?



테스트



테스트를 해봅니다.
간단하게 GET방식의 데이터를 화면에 뿌려봅니다. 
텍스트 에디터에서 결과를 출력해보면

위의 3줄은 URL의 끝부분입니다.(URL경로 포함)
1번째가 주소입력창에 넣을 원본경로 입니다.(4420글자)
2번째는 익스플로러에서 출력된 결과입니다. (2047글자 출력)
3번째는 파이어폭스에서 출력된 결과입니다.(4420글자 출력)

테스트 결과는 전혀 엉뚱합니다. 256자의 제한은 없고 일부 브라우져는 글자제한없는 결과를 보여줍니다.

 



근거


근거를 찾기위해 검색을 해보니 이런 결과가 나옵니다.

http://support.microsoft.com/default.aspx?scid=KB;en-us;q208427 
대충 요약해보면 익스플로러 4.0부터 7.0까지는 URL경로를 2048바이트로 제한했다고 합니다.
표준 안지키는 익스플로러 답다고나 해야 할까요? 아닙니다. 뭔가 다른 이유가 있을겁니다.


http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1 
http://www.tta.or.kr/Home2003/library/ttasDown.jsp?where=13292&pk_num=TTAS.IF-RFC2068 (한글번역)
HTTP 1.1규약입니다. 해석해보면 이런 귀절이 있습니다.


HTTP 규약은 URI의 길이에 대한 어떠한 사전 제한도 두지 않는다. 서버는 반드시 자신이 제
공하는 어떠한 자원의 URI도 처리할 수 있어야 하며 이러한 URI를 생성할 수 있는 GET에 
기초한 폼을 (GET-based forms) 제공한다면 무제한 길이의 URI를 처리할 수 있어야만 한다. 서
버는 URI의 길이가 자신의 처리할 수 있는 (10.4.15 절 참조) 것보다 긴 경우 414 (Request-URI 
Too Long)를 응답으로서 돌려주어야 한다.

주의: 서버는 255 바이트 이상의 URI 길이를 사용할 때 몇몇 이전 클라이언트나 프락시 구
현 방식이 이러한 길이를 적절히 지원할 수 없는 경우가 있기 때문에 주의해야 한다.


URI : Uniform Resource Identifier
주 : URL이 아니라 URI라고 표현하는데 URL은 URI의 하위 개념입니다. 다만 대부분의 웹페이지가 URL로 접근되기 때문에 URL로 불려지는 경우가 많습니다.

여기서 결론이 나옵니다. 원칙적으로 제한이 없는데 지난세기(?)의 구형 장비들중 일부가 256바이트의 주소값을 지원하기 때문에 주의하라는 겁니다.

익스플로러는 이 규정때문에 256자 이상을 임의로 확장해놓고 이후 게을러 빠져서 수정을 안하는 셈이겠지요.
익스플로러 4.0이 나올무렵에 HTTP 1.0표준이 널리 퍼지지못했기 때문이기도 할겁니다.
파이어폭스는 21세기(?)브라우져 답게 표준에 나오는 대로 무제한의 URL을 지원합니다.


한마디로 브라우져 마음대로 군요


결론




사실상 256자의 제한은 없습니다. 256자 제한이 있는 구형장비가 대부분 도태됬기 때문입니다.
여기에 세계적인 인터넷 사용의 일반화로 UTF-8로 인코딩된 주소가 일반화되 256자로는 주소표기가 불가능해진것도 원인입니다.


다만 익스플로러의 2048바이트 제한은 여전합니다. 8.0에서는 개선됬을지 모르겠군요
주소제한이 없는 파이어폭스를 쓰셔도 될겁니다.


한가지 덧붙인다면 일반적인 지식검색이나 웹상의 내용이 근거를 밝히지 않고 적어두다 보니 엉터리내용이 많다는 겁니다.
덕분에 오전에 삽질해 가며 데이터를 찾아 헤멨습니다만 명확한 결론을 얻게된건 좋은일이지 않을까요?
답글로 성원해 주신다면 감사하겠습니다. 좋은 하루 되세요^^


원문 : http://brainage.egloos.com/4323903