ผลต่างระหว่างรุ่นของ "การเข้ารหัสขนส่งเป็นชิ้นส่วน"

จากวิกิพีเดีย สารานุกรมเสรี
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Octahedron80 (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
ป้ายระบุ: ถูกย้อนกลับแล้ว
Octahedron80 (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
ป้ายระบุ: ถูกย้อนกลับแล้ว
บรรทัด 5: บรรทัด 5:
== รูปแบบ ==
== รูปแบบ ==
เครื่องแม่ข่ายจะส่งส่วนหัวของการตอบรับ <tt>Transfer-Encoding<tt> โดยกำหนดค่าเป็น <tt>chunked</tt> แต่ละชิ้นส่วนจะขึ้นต้นด้วยขนาดของข้อมูลในชิ้นส่วนนั้นเป็น[[เลขฐานสิบหก]] ตามด้วยอักขระ[[ปัดแคร่]] (carriage return) อักขระ[[ป้อนบรรทัด]] (line feed) และข้อมูลในส่วนนั้น ในการนำไปใช้บางอย่าง จะมีอักขระ[[ช่องว่าง]]เพิ่มเข้ามาระหว่างขนาดของชิ้นส่วน กับอักขระปัดแคร่ป้อนบรรทัด และเมื่อไม่มีข้อมูลที่จะส่งต่อแล้ว ชิ้นส่วนตอบรับสุดท้ายจะจบด้วยขนาดที่เท่ากับ 0
เครื่องแม่ข่ายจะส่งส่วนหัวของการตอบรับ <tt>Transfer-Encoding<tt> โดยกำหนดค่าเป็น <tt>chunked</tt> แต่ละชิ้นส่วนจะขึ้นต้นด้วยขนาดของข้อมูลในชิ้นส่วนนั้นเป็น[[เลขฐานสิบหก]] ตามด้วยอักขระ[[ปัดแคร่]] (carriage return) อักขระ[[ป้อนบรรทัด]] (line feed) และข้อมูลในส่วนนั้น ในการนำไปใช้บางอย่าง จะมีอักขระ[[ช่องว่าง]]เพิ่มเข้ามาระหว่างขนาดของชิ้นส่วน กับอักขระปัดแคร่ป้อนบรรทัด และเมื่อไม่มีข้อมูลที่จะส่งต่อแล้ว ชิ้นส่วนตอบรับสุดท้ายจะจบด้วยขนาดที่เท่ากับ 0

=== ตัวอย่างข้อความตอบรับ ===
<pre>
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
</pre>

รุ่นแก้ไขเมื่อ 21:52, 17 พฤษภาคม 2552

การเข้ารหัสขนส่งเป็นชิ้นส่วน (อังกฤษ: chunked transfer encoding) เป็นวิธีหนึ่งของเว็บเซิร์ฟเวอร์เอชทีทีพี ในการส่งถ่ายข้อมูลไปยังโปรแกรมประยุกต์ของเครื่องลูกข่าย (ซึ่งมักจะเป็นเว็บเบราว์เซอร์) ปกติแล้วข้อมูลที่ได้รับจากข้อความตอบรับเอชทีทีพีจะถูกส่งมาเป็นข้อมูลชิ้นเดียว ซึ่งขนาดของเนื้อหานั้นได้แสดงไว้ในส่วนหัว Content-Length ขนาดของข้อมูลเป็นสิ่งสำคัญ เพราะว่าเครื่องลูกข่ายจำเป็นต้องทราบว่า เมื่อไรข้อความตอบรับจะสิ้นสุดและเมื่อไรข้อความถัดไปจะตามมา และด้วยการใช้การเข้ารหัสขนส่งเป็นชิ้นส่วน ข้อมูลจะถูกแบ่งออกเป็นบล็อกย่อย ๆ และถูกส่งออกไปเป็นหนึ่งหรือหลาย "ชิ้นส่วน" (chunk) ดังนั้นเครื่องแม่ข่ายอาจเริ่มส่งข้อมูลก่อนที่มันจะทราบว่าขนาดรวมทั้งหมดของเนื้อหาเป็นเท่าใด บ่อยครั้งที่ขนาดของบล็อกจะเท่ากันหมด แต่ก็ไม่แน่เสมอไป

บางครั้งเครื่องให้บริการเอชทีทีพีใช้การบีบอัดข้อมูล (gzip หรือ deflate) เพื่อลดเวลาที่ใช้ในการส่งถ่ายข้อมูล แม้ว่าการเข้ารหัสขนส่งเป็นชิ้นส่วนสามารถใช้ได้กับทรัพยากรที่บีบอัดเพื่อลดปริมาณชิ้นส่วนที่ส่ง แต่หลังจากแบ่งแล้ว ชิ้นส่วนต่าง ๆ ที่ไม่ได้มีการบีบอัดในตัวเองก็จะไม่มีประโยชน์อะไร แถมยังทำให้เซิร์ฟเวอร์เสียเวลาในการบีบอัดอย่างเต็มที่ แล้วข้อมูลบีบอัดที่ออกมาจึงค่อยถูกตัดแบ่งตามแผน ส่วนกรณีที่มีการตัดแบ่งเป็นชิ้นส่วนก่อนแล้วค่อยนำไปบีบอัด มีข้อดีตรงที่สามารถบีบอัดได้ทันทีในขณะที่ข้อมูลกำลังส่ง เพราะข้อมูลที่นำมาบีบอัดมีขนาดเล็ก แต่ก็มีข้อเสียคือไม่สามารถทราบถึงขนาดข้อมูลสุดท้ายที่บีบอัดแล้วได้โดยง่าย

รูปแบบ

เครื่องแม่ข่ายจะส่งส่วนหัวของการตอบรับ Transfer-Encoding โดยกำหนดค่าเป็น chunked แต่ละชิ้นส่วนจะขึ้นต้นด้วยขนาดของข้อมูลในชิ้นส่วนนั้นเป็นเลขฐานสิบหก ตามด้วยอักขระปัดแคร่ (carriage return) อักขระป้อนบรรทัด (line feed) และข้อมูลในส่วนนั้น ในการนำไปใช้บางอย่าง จะมีอักขระช่องว่างเพิ่มเข้ามาระหว่างขนาดของชิ้นส่วน กับอักขระปัดแคร่ป้อนบรรทัด และเมื่อไม่มีข้อมูลที่จะส่งต่อแล้ว ชิ้นส่วนตอบรับสุดท้ายจะจบด้วยขนาดที่เท่ากับ 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