ผลต่างระหว่างรุ่นของ "การเข้ารหัสขนส่งเป็นชิ้นส่วน"
Luckas-bot (คุย | ส่วนร่วม) ล r2.7.1) (โรบอต เพิ่ม: fr:Chunked transfer encoding ป้ายระบุ: ถูกย้อนกลับแล้ว |
Nullzerobot (คุย | ส่วนร่วม) ล ลบลิงก์ที่ซ้ำซ้อน wikidata ป้ายระบุ: ถูกย้อนกลับแล้ว |
||
บรรทัด 26: | บรรทัด 26: | ||
[[หมวดหมู่:เอชทีทีพี]] |
[[หมวดหมู่:เอชทีทีพี]] |
||
[[หมวดหมู่:การจัดการข้อมูล]] |
[[หมวดหมู่:การจัดการข้อมูล]] |
||
[[en:Chunked transfer encoding]] |
|||
[[fr:Chunked transfer encoding]] |
|||
[[ru:Chunked transfer encoding]] |
|||
[[zh:分块传输编码]] |
รุ่นแก้ไขเมื่อ 11:03, 8 มีนาคม 2556
การเข้ารหัสขนส่งเป็นชิ้นส่วน (อังกฤษ: chunked transfer encoding) เป็นวิธีหนึ่งของเว็บเซิร์ฟเวอร์เอชทีทีพี ในการส่งถ่ายข้อมูลไปยังโปรแกรมประยุกต์ของเครื่องลูกข่าย (ซึ่งมักจะเป็นเว็บเบราว์เซอร์) ปกติแล้วข้อมูลที่ได้รับจากข้อความตอบรับเอชทีทีพีจะถูกส่งมาเป็นข้อมูลชิ้นเดียว ซึ่งขนาดของเนื้อหานั้นได้แสดงไว้ในส่วนหัว Content-Length ขนาดของข้อมูลเป็นสิ่งสำคัญ เพราะว่าเครื่องลูกข่ายจำเป็นต้องทราบว่า เมื่อไรข้อความตอบรับจะสิ้นสุดและเมื่อไรข้อความถัดไปจะตามมา และด้วยการใช้การเข้ารหัสขนส่งเป็นชิ้นส่วน ข้อมูลจะถูกแบ่งออกเป็นบล็อกย่อย ๆ และถูกส่งออกไปเป็นหนึ่งหรือหลาย "ชิ้นส่วน" (chunk) ดังนั้นเครื่องแม่ข่ายอาจเริ่มส่งข้อมูลก่อนที่มันจะทราบว่าขนาดรวมทั้งหมดของเนื้อหาเป็นเท่าใด บ่อยครั้งที่ขนาดของบล็อกจะเท่ากันหมด แต่ก็ไม่แน่เสมอไป
บางครั้งเครื่องให้บริการเอชทีทีพีใช้การบีบอัดข้อมูล (gzip หรือ deflate) เพื่อลดเวลาที่ใช้ในการส่งถ่ายข้อมูล แม้ว่าการเข้ารหัสขนส่งเป็นชิ้นส่วนสามารถใช้ได้กับทรัพยากรที่บีบอัดเพื่อลดปริมาณชิ้นส่วนที่ส่ง แต่หลังจากแบ่งแล้ว ชิ้นส่วนต่าง ๆ ที่ไม่ได้มีการบีบอัดในตัวเองก็จะไม่มีประโยชน์อะไร แถมยังทำให้เซิร์ฟเวอร์เสียเวลาในการบีบอัดอย่างเต็มที่ แล้วข้อมูลบีบอัดที่ออกมาจึงค่อยถูกตัดแบ่งตามแผน ส่วนกรณีที่มีการตัดแบ่งเป็นชิ้นส่วนก่อนแล้วค่อยนำไปบีบอัด มีข้อดีตรงที่สามารถบีบอัดได้ทันทีในขณะที่ข้อมูลกำลังส่ง เพราะข้อมูลที่นำมาบีบอัดมีขนาดเล็ก แต่ก็มีข้อเสียคือไม่สามารถทราบถึงขนาดข้อมูลสุดท้ายที่บีบอัดแล้วได้โดยง่าย
รูปแบบ
เครื่องแม่ข่ายจะส่งส่วนหัวของการตอบรับ Transfer-Encoding โดยกำหนดค่าเป็น chunked แต่ละชิ้นส่วนจะขึ้นต้นด้วยขนาดของข้อมูลในชิ้นส่วนนั้นเป็นเลขฐานสิบหก ตามด้วยอักขระปัดแคร่ (carriage return) อักขระป้อนบรรทัด (line feed) และข้อมูลในส่วนนั้น ในการนำไปใช้บางอย่าง จะมีอักขระช่องว่าง (0x20) เพิ่มเข้ามาระหว่างขนาดของชิ้นส่วน กับอักขระปัดแคร่ป้อนบรรทัด และเมื่อไม่มีข้อมูลที่จะส่งต่อแล้ว ชิ้นส่วนตอบรับสุดท้ายจะจบด้วยขนาดที่เท่ากับ 0
ตัวอย่างข้อความตอบรับ
HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 23 This is the data in the first chunk 1A and this is the second one 0
แหล่งข้อมูลอื่น
- RFC 2616 ส่วนที่ 3.6.1