CONNECT-ന് ശേഷമുള്ള ശൂന്യവരിക്കായി കാത്തിരിക്കുക
സ്റ്റാറ്റസ് ലൈൻ ആദ്യം വന്നാലും, സോക്കറ്റ് TLS-ന് നൽകുന്നതിന് മുമ്പ് പൂർണ്ണമായ HTTP/1 CONNECT പ്രതികരണം വായിക്കുക.
ക്ലയന്റ് 200 Connection Established കാണുന്നു, TLS ആരംഭിക്കുന്നു, എന്നിട്ട് TLS റെക്കോർഡ് ഉണ്ടാകേണ്ടയിടത്ത് ഉടൻ അർത്ഥശൂന്യമായ കാര്യങ്ങൾ റിപ്പോർട്ട് ചെയ്യുന്നു. ലക്ഷ്യസ്ഥാനത്തിന്റെ സൈഫർ ക്രമീകരണങ്ങളെ കുറ്റപ്പെടുത്തുന്നതിന് മുമ്പ് അപൂർണ്ണമായ HTTP പ്രതികരണം തിരയുക.
HTTP/1 CONNECT കൈമാറ്റത്തിൽ സ്റ്റാറ്റസ് ലൈൻ പ്രതികരണത്തിന്റെ തുടക്കം മാത്രമാണ്. അതിന് ശേഷം ഹെഡർ ഫീൽഡുകൾ വരാം. വിജയകരമായ CONNECT പ്രതികരണത്തിന് ശേഷം ഹെഡർ വിഭാഗം അവസാനിപ്പിക്കുന്ന ശൂന്യവരി ടണലിലേക്കുള്ള മാറ്റം സൂചിപ്പിക്കുന്നു.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
ഈ ബൈറ്റുകൾ ഒരു വായനയിൽ, പല വായനകളിൽ, അല്ലെങ്കിൽ തുടർന്നുള്ള ബൈറ്റുകളും ഉള്ള ഒരു വായനയിൽ വരാം. TCP സെർവറിന്റെ എഴുത്ത് അതിരുകൾ സൂക്ഷിക്കുന്നില്ല.
കൈമാറ്റം വ്യക്തമായ പാർസർ അവസ്ഥയാക്കുക
- സ്റ്റാറ്റസ് ലൈൻ ശേഖരിച്ച് പാർസ് ചെയ്യുക. കൃത്യമായ ഇംഗ്ലീഷ് കാരണവാക്യത്തിന് പകരം സംഖ്യാ സ്റ്റാറ്റസ് ഉപയോഗിക്കുക.
- ഹെഡർ വിഭാഗത്തിന്റെ പൂർണ്ണമായ അവസാനിപ്പിക്കൽ വരുന്നതുവരെ തുടരുക. വിജയകരമായ സ്റ്റാറ്റസ് ലൈൻ ബാക്കി ഫീൽഡുകളെ അപ്രത്യക്ഷമാക്കുന്നില്ല.
- വിജയകരമായ CONNECT പ്രതികരണത്തിൽ ആ അവസാനിപ്പിക്കലിന് ശേഷമുള്ള ബൈറ്റ് ടണൽ ഡാറ്റയുടെ തുടക്കമായി കണക്കാക്കുക. മറ്റ് പ്രതികരണങ്ങളിൽ ഉചിതമായ HTTP പ്രതികരണ, പ്രാമാണീകരണ കൈകാര്യം പിന്തുടരുക.
- കണക്ഷനും ഉപയോഗിക്കാത്ത ബൈറ്റുകളും അടുത്ത പ്രോട്ടോക്കോൾ പിന്തുണയ്ക്കുന്ന ബഫർ ചെയ്ത I/O ഇന്റർഫേസിലൂടെ കൈമാറുക.
നല്ല ഡിലിമിറ്റർ തിരയലുണ്ടെങ്കിലും അവസാന ഘട്ടം പ്രധാനമാണ്. ബഫർ ചെയ്ത റീഡർ പാർസർ ആവശ്യപ്പെട്ടതിലധികം സോക്കറ്റ് ഉപയോഗിച്ചിരിക്കാം. ആ റീഡർ ഉപേക്ഷിച്ച് നഗ്നമായ സോക്കറ്റിൽ TLS തുടങ്ങിയാൽ ബൈറ്റുകൾ റീഡറുടെ സ്വകാര്യ ബഫറിൽ കുടുങ്ങാം.
സെറ്റപ്പിന് സമയപരിധിയും ഹെഡർ വലിപ്പത്തിന് പരിധിയും ഉപയോഗിക്കുക. അവസാനിപ്പിക്കലിന് മുമ്പുള്ള EOF അപൂർണ്ണമായ പ്രോക്സി പ്രതികരണമാണ്, എന്നെന്നും കാത്തിരിക്കാനുള്ളതോ എങ്ങനെയെങ്കിലും TLS പരീക്ഷിക്കാനുള്ളതോ ആയ ക്ഷണമല്ല.
പല അതിരുകളും ചിന്തിക്കുക
Proxy-Agent:-ന് ശേഷം അവസാനിക്കുന്ന ഒരു വായന സങ്കൽപ്പിക്കുക. പാർസറിന് ഇനിയും HTTP ഹെഡർ ബൈറ്റുകൾ വേണം. അവസാന CRLF ശ്രേണിയുടെ നടുവിൽ അവസാനിക്കുന്ന മറ്റൊന്ന് സങ്കൽപ്പിക്കുക. അത് ഇപ്പോഴും പൂർണ്ണമായ ഹെഡർ വിഭാഗമല്ല. ഇനി ഒരേ ബഫറിൽ പൂർണ്ണമായ വിജയകരമായ ഹെഡർ വിഭാഗത്തിന് ശേഷം ടണൽ ബൈറ്റുകൾ വരുന്നത് സങ്കൽപ്പിക്കുക: ആ അധിക ബൈറ്റുകൾ കൈമാറ്റത്തെ അതിജീവിക്കണം.
407 മറ്റൊരു ഫലമാണ്. അതിന് പ്രാമാണീകരണ കൈകാര്യം വേണം; ഒരിക്കലും തുറക്കാത്ത ടണലിലേക്ക് TLS ClientHello അയക്കാൻ അത് അനുവദിക്കുന്നില്ല.
ഹാൻഡ്ഷേക്ക് നടപ്പാക്കുന്നത് തന്നെ ജോലിയല്ലെങ്കിൽ പരിപാലിക്കുന്ന കണക്ടർ തിരഞ്ഞെടുക്കുക. ഈ അതിർ ഇവിടെ കാണിച്ച HTTP/1 കൈമാറ്റത്തിന് മാത്രമുള്ളതാണ്. HTTP/2 പ്രോക്സി CONNECT വ്യത്യസ്ത ഫ്രെയിമിംഗുള്ള സ്ട്രീമിൽ വഹിക്കുന്നു.