אם PDF או גיליון אלקטרוני לכאורה מתחיל ב-HTTP/1.1 200 OK, המוריד שמר תגובה גולמית במקום את הקובץ. התגובה הסכמטית הזו מכילה רק ארבעה בייטים של תוכן:

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

הקובץ הוא DATA. שורת הסטטוס, הכותרות, סימן הגודל ומבנה הסיום שייכים ל-HTTP. הסרת מספר קבוע של בייטים אינה בטוחה משום שאורכי הכותרות משתנים. העתקת כל מה שאחרי השורה הריקה הראשונה עדיין משאירה מסגור מקטעים, ותגובות מידע יכולות לבוא לפני התגובה הסופית.

להורדה רגילה, החלף את ההעתקה מסוקט גולמי לקובץ בממשק גוף התגובה של לקוח ה-HTTP. הגדר את הפרוקסי שלו, אמת את הסטטוס הסופי והעבר את הגוף לפלט זמני. הלקוח מטפל במסגור ההודעה: גופים המוגבלים באורך, במקטעים ובחיבור דורשים ניתוח שונה.

קידוד התוכן הוא שכבה נוספת. החלט אם אתה צריך בייטים מפוענחים של הקובץ או תוכן גולמי שהתבקש במפורש, לפי ההתנהגות המתועדת של הלקוח. בייטים דחוסים אינם בהכרח קורופציה של הפרוקסי.

אם היישום חייב לשמור קוד ברמת הסוקט, הוא אחראי לכל כללי הניתוח הללו וכן לטיפול בקריאה ובכתיבה. כתוב רק את מספר הבייטים שהוחזרו בפועל מקריאה, לא את קיבולת החוצץ, וטפל בכתיבות חלקיות. אחרת תוכן חוצץ מיושן עלול להשחית אפילו גוף שחולץ כראוי.

HTTPS דורש יותר מהסרת תגובת CONNECT: לאחר הקמת מנהרה מוצלחת, הקם TLS ליעד ואז נתח את תגובת ה-HTTP הפנימית. הבייטים המוצפנים שאחרי כותרות הפרוקסי אינם הקובץ שניתן להוריד.

השאר פלט שנכשל או שאינו שלם תחת שם זמני. פרסם אותו רק לאחר שההעברה ובדיקות הקובץ יצליחו; קובץ שאינו ריק אינו מוכיח הורדה מלאה.

מאמרים קשורים