|
제가 잘못 이해했었나본데.. 근데 이번에 말씀하신 "필더포함 80bytes이상을 HTML Header에 넣을수 없다는 것"이라는 부분도 좀 모호한 거 같은데요. 헤더 전체가 80바이트가 넘으면 제대로 전송되지 않고 잘린다는 말씀이신지요.
말씀하신 것과 같은 쿠키를 전송하는 문제는, 얼마전에도 작업했던 건데..
저도 idHTTP를 썼고, 제가 만들어넣었던 쿠키의 길이만 300바이트가 넘습니다. 그런데 잘 돌아가고 있습니다. 단 하나의 사이트가 아니고 여러 개 사이트입니다.
제가 이번에 작업했던 케이스는 ASP.NET의 __VIEWSTATE 문제가 걸려 있어서, 쓸데없는 정보 중의 단 한바이트만 틀려도 무조건 거부되는 상황이라 아마 이보다 더 골때리는 케이스는 거의 없을 겁니다. 이 __VIEWSTATE 문제 때문에 하루 밤을 새기도 했죠.
혹, 인디 10 버전의 idHTTP에 문제가 있는 건지도 모르겠군요.
저는 인디9 버전을 써왔습니다.
그럼...
이태흔 님이 쓰신 글 :
: 말씀하신 부분에 대해서는 충분히 이해가 됩니다.
:
: 다만 제 질문에 대해서 약간 더 부가 설명을 드리자면...
:
: 예를들어서 google등에 접속시 server에서 client로 전송하는 cookie를 paros등의 Local Proxy로 sniffing하였을경우 다음과 같을것입니다.
: Cookie: NID=14=pjCVOxFjcf-AFiPzJTIByVuAdtCxCXzGPpbaWSNdTU4afyT1oUfqAE1yApOPLPDLod2yz-bYYmpn757T77UHrNOqg3LPHDCBgwg1i84WnfGt9FlW3B1xO5mDipYMgh88; PREF=ID=2f7dd4350f1cd24a:NW=1:TM=1219402881:LM=1219402881:S=dviVRt-14krZOAh2
:
: 위의 Cookie 값의 길이를 체크해보면 "Cookie:"를 제외한 길이가 214bytes입니다. server와 client간에는
: 인증을 위해서 google에서 발급한 cookie를 계속해서 주고 받을것입니다.
:
: 제 질문은 indy idHTTP로 개발한 client에서는 80bytes이상을 server로 전송할 경우 짤린다는 것입니다.
: 그러므로 필더포함 80bytes이상을 HTML Header에 넣을수 없다는 것이였습니다.
:
: p.s
: 기존 질문에서 필더이름을 포함한 총길이는 80bytes일것입니다.
:
:
: !! 답변주셔서 감사합니다...
:
:
: 박지훈.임프 님이 쓰신 글 :
: : 질문을 정확히 이해했는지 모르겠는데...
: :
: : 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에서 동일한 현상이 있는것 같습니다.)
: : :
: : : 혹시 비슷한 경험있으신분 계시면 도움 부탁드립니다.
: : :
: : :
: : :
: : : 읽어주셔서 감사합니다.
|