brainage.egloos.com

포토로그



상식의 오류 - get방식의 글자수 제한은 256자가 아니다 by 천하귀남

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에서는 개선됬을지 모르겠군요
주소제한이 없는 파이어폭스를 쓰셔도 될겁니다.


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


덧글

  • Paradime 2008/04/29 12:35 # 답글

    오. 저런 과거가 있었군요...
  • 천하귀남 2008/04/29 12:39 # 답글

    Paradime / 표준이란게 한번 정해지면 두고두고 속을 썩이기도 하지만 소리소문없이 사라지기도 합니다. 항상 관심을 갖고 지켜 봐야지요.
  • 박민성 2008/04/29 14:33 # 답글

    쉽고 무료로 찾을수 있는 정보는.. 종류를 불문하고 신뢰도가 떨어지는 경우가 많더군요.
    역시 믿을만한 정보를 얻기위해서는 발품을 좀 많이 팔든가, 돈을 쓰는수밖에 없는것 같습니다.
  • 천하귀남 2008/04/29 14:39 # 답글

    박민성 / 표준규약같은건 정부산하기관등에 번역까지 되서 있는경우가 많습니다. http://library.etri.re.kr/ 전자통신연구원 같은 곳이 그런경우지요. 지금도 회사에서 여기글보면서 땡땡이 중입니다.
  • 도아 2008/04/29 18:42 # 삭제 답글

    원래 제한이 없었습니다. GET 방식의 변수 제한은 브라우저의 제한이 아니라 사용하는 운영체제에서 환경변수에 메모리를 얼마나 할당하느냐에 따라 제한됩니다. 그 이유는 GET 방식의 쿼리는 환경변수에 저장되기 때문입니다. 따라서 예전에는 IE로도 상당히 긴 URL도 가능했었습니다.

    또 IIS에 4KB 이상의 URL을 전송하면 서버가 죽는 버그도 있었기 때문에 256자 제한이라는 것은 금시 초문입니다. 저 역시 95년부터 웹 기반 프로그래밍을 강의했고 저런 이야기는 한적이 없는데 요즘은 256자 제한이 일반적인 이야기인가 보군요.
  • 천하귀남 2008/04/29 20:47 # 답글

    도아 / HTTP 1.1규약에 주의사항으로 되있는게 와전된게 아닌가 합니다.
  • 굴돌 2008/10/02 14:50 # 답글

    시간이 좀 지난 뒤에 이 글을 봤습니다만
    여전히 유용한 정보군요.
    고맙습니다 :)
  • 오호호 2014/06/30 01:04 # 삭제 답글

    시간이 좀 많이 지난 뒤에 이 글을 봤습니다만ㅋ
    여전히 유용한 정보입니다.


    많이 찾아 헤매었는데.. 감사합니다.
  • 아치아라 2016/07/05 03:50 # 삭제 답글

    시간이 아주 많이 지난 뒤에 이 글을 봤습니다만,
    여전히 유용한 정보입니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

구글 애널리틱스

통계 위젯 (화이트)

287846
5937
5677582

이 이글루를 링크한 사람 (화이트)

406

당부드리는 말

블로그 사진을 포함한 전체가 아닌 일부의 내용은 얼마든지 사용하셔도 상관없습니다.

상대방을 존중하는 생각이 있다면 욕설과 과도한 비아냥은 자제를 부탁드립니다. 정도가 심하거나 비로그인의 글은 임의 삭제 가능함을 알려드립니다.

A타입 클린 캠페인 위젯

방문자

Map