본문 바로가기

web/Django

get 방식의 글자 256자 제한은 잘못된 상식


사실 아는 사람들은 알겠지만 get방식의 글자수 제한이 256자 라는것은 거짓말이다. 


http 1 버전 시대에서 잘못 내려온 일종의 속설이다. (http 1이 96년도 발표이다. 현재 많은 브라우저가 http 2.0을 지원 중이다;;)


https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1

3.2.1 General Syntax 부분을 보면  get 요청에 의해 URI가 너무 길다고 서버단에서 판단하면 414 오류를 보내도록 프로토콜이 지정되어 있다. 그렇다. 길이에 대한 명확한 부분은 없다 단지 Note 부분에 " 서버는 255바이트 이상의 URI길이는 주의" 라고 쓰여져 있다. 



왜 이렇게 많은 책과 인터넷 정보에서 " get 방식은 길이 제한이 있어!!!"  라고 하길래 정말 지금도 그럴까? 해서 테스트 해보았다. 


서버 단은 간단하니 플라스크로.. get 길이를 화면에 표기하게 했습니다.


from flask import Flask
from flask import request
app = Flask(__name__)

@app.route("/")
def hello():
args = request.args.get('key', '')
print(len(args))
return str(len(args))


if __name__ == "__main__":
app.run(host='127.0.0.1', port=8009)


1. 크롬(메모리 처묵처묵)

당혹스럽게도 이상한 숫자에서 끝이 났다. 37748.



2. 모질라 파이폭스!!


무려 100만자리가 넘어갔는데도 1초내로 화면이 뜨는 속도!! 더 하고 싶어도 언제 끝날지 몰라서 100만자리로 스톱



3. 애플의 사파리

사실 위의 숫자가 끝이 아닙니다. 더 할수 있었겠지만 로딩이 느려져서 스톱. (대략 15초 정도가 걸렸습니다. )


4. 오페라

오페라도 더 할수 있었겠지만 너무 느려져서 스톱(30만 길이 화면 뜨는데 1분 넘게 걸렸습니다.)



- 번외 익스/엣지는 패스~(난 맥 사용자라서...)



검색 해본 결과 익스 9의 경우 2083자 / 최대 5120자를 지원한단다..(뭐이리 짧어?)

사파리는 40만자를 넘기면 브라우저가 크러쉬되고 (난 넘겼는데?!)

파이어폭스/오페라는 길이 제한이 없고 50만자를 넘겨도 별다른 이상이 없고(하지만 오페라는 죽도록 느리다.)

크롬의 경우 4만자를 기준으로 한다니 대략 맞는거 같다. 



그래서!!!! 현재는 서버의 기준이 아닌 브라우저의 기준에 따라서 get방식의 글자수 제한이 있으며 최소한 256자 는 아니란 말씀!! 하지만 익스가 대략 2천자까지이니 맘대로 써도 된다는것!!



- 그래서 파이어폭스 쓰세요!! 100만자를 넘겨도 1초대를 달리는 스피드!

- 크롬은 날이 갈수록 메모리만 먹고 느려지는듯한다.

- 참고 https://docs.google.com/document/d/1G_VSSmud0zzxpVajOAtWPXbnsp1T3CZd5kU5nWotSrQ/edit



'web > Django' 카테고리의 다른 글

django middleware  (0) 2016.08.15
django-summernote 사용하기  (4) 2016.07.23
Django South migration error   (0) 2015.09.30
django ajax post data and view.py  (0) 2014.11.08
uwsgi logger disable option  (0) 2014.10.24