|
질문을 정확히 이해했는지 모르겠는데...
HTTP 헤더에 임의로 추가한 내용이 68바이트에서 개행 문자가 들어간다는 말씀이신지요.
일단, 정확히 68바이트가 되는 건 아니겠지만...
HTTP가 통신하는 포맷은 기본적으로는 인터넷 메시지 포맷입니다. E메일 포맷과도 같죠. 그런데 이 인터넷 메시지 포맷의 표준 정의상, 한 라인이 80컬럼이 넘으면 자동으로 개행 문자가 들어가도록 되어 있었던 걸로 기억합니다. 단순하게 개행 문자만 들어가는 게 아니라, 다음 라인에 몇개의 스페이스 문자가 들어가고 나머지가 wrap 되어서 이어집니다. 이건 '원래 의미가 다음 라인으로 넘어가는 것이 아니라 너무 길어서 래핑된 거다' 라고 알려주기 위해서구요.
이 80 컬럼 약속 말고도 75 컬럼을 쓰는 경우도 있구요. 게다가, 80/75 컬럼 규칙도 강제적인 약속은 아니어서 프로그램마다 75~80 컬럼을 넘어도 웬만하면 그냥 한줄로 다 쓰는 경우도 많습니다. 75 혹은 80 컬럼 규칙을 칼같이 지키는 프로그램도 많고요. 한마디로 중구난방이죠.
그래서, 개발하는 입장에서는, 서버쪽에서는 이게 개행문자가 들어가든 안들어가든 다음 라인의 첫 문자가 스페이스인가를 검사해서 스페이스이면 다음 라인을 이전 라인의 뒤에 붙여서 해석하도록 프로그래밍을 해야 합니다. 인터넷 프로토콜 관련 개발을 하다보면 이렇게 규칙이 루즈하게 되어 있어서 여러가지 케이스를 다 고려해야 하는 경우가 흔합니다.
그럼...
이태흔 님이 쓰신 글 :
: 안녕하세요.. HTTP Client 개발중에 막히는 부분이 있어서 염치불구하고 질문 올립니다.
:
: HTTP Header의 일부분을 자체적으로 사용할경우 다음과 같이 정의해서 사용할수 있을것 같습니다.
:
: AnsiString szAuth;
: szAuth = "뭐뭐뭐뭐.............";
: IdHTTPX->Request->ExtraHeaders->Values ["Auth"] = szAuth;
:
: 근데 위와 같은 방식으로 HTTP 데이타를 전송할 경우 szAuth에 68bytes이상 보낼경우 짤리는것 같습니다.
: 관련해서 Indy Library Core Module을 들여다봐도 68byte이상을 제한하고 있는 부분은 보이질 않고..
: (Borland C++ Builder 6.0을 설치하면 Default로 설치되는 Indy 8과 별도로 설치한 Indy9에서 동일한 현상이 있는것 같습니다.)
:
: 혹시 비슷한 경험있으신분 계시면 도움 부탁드립니다.
:
:
:
: 읽어주셔서 감사합니다.
|