ทำไมการตอบสนอง HTTP ถูกแบ่งออกเป็น 2 ส่วน: ส่วนหัวและร่างกาย


1

ฉันพยายามที่จะเข้าใจว่าทำไมการตอบสนอง HTTP เดียวจึงแบ่งเป็น 2 ส่วนในการตั้งค่าต่อไปนี้:

  • ทรัพยากรที่ร้องขอได้รับการคุ้มครองโดย HTTP Digest Authentication บนฝั่งเซิร์ฟเวอร์
  • การสื่อสารดำเนินการโดยใช้ TLS 1.0

เมื่อไคลเอนต์ร้องขอทรัพยากรการตอบสนองของเซิร์ฟเวอร์จะแบ่งออกเป็น 2 ส่วน: ส่วนแรก (หลังจากถอดรหัส) มีเฉพาะส่วนหัว HTTP (นอกเหนือจากอื่น ๆ ):

ความยาวเนื้อหา: 1297
และ
ตรวจสอบสิทธิ์ WWW: ...
ส่วนที่สองประกอบด้วยเนื้อความ

สิ่งที่สำคัญที่สุด: ส่วนแรกที่มีเฉพาะส่วนหัวเท่านั้นที่ส่งด้วยธง PSH ซึ่งทำให้แอปพลิเคชันของฉันส่งข้อยกเว้นเนื่องจากเนื้อหาความยาวคือ> 0 แต่ไม่มีข้อความเนื้อหา แพ็คเก็ตสุดท้ายของส่วนที่สองไม่มีการตั้งค่าสถานะ PSH

พฤติกรรมของเซิร์ฟเวอร์นี้ถูกต้องหรือไม่

คำตอบ:


2

แอปพลิเคชันของคุณอาจไม่ทราบว่า TCP เป็นสตรีมและไม่ใช่โปรโตคอลที่ใช้แพ็คเก็ต ไม่มีการรับประกันว่าคุณจะได้รับส่วนหัวและร่างกายร่วมกันในแพ็คเก็ตเดียวไม่มีการรับประกันว่าคุณจะได้รับส่วนหัวทั้งหมดภายในแพ็คเก็ตเดียว

นอกเหนือจากนั้นการตอบกลับยังประกอบด้วยส่วนสำคัญคือเนื้อหาและข้อมูลเกี่ยวกับเนื้อหา (ประเภทความยาวการเปลี่ยนแปลงครั้งล่าสุด ... ) มีหลายวิธีในการแยกแยะความแตกต่างระหว่างส่วนเหล่านี้และของคือการแบ่งออกเป็นส่วนหัวที่มีข้อมูลเมตาและเนื้อหาที่มีเนื้อหา


ฉันเข้าใจทุกอย่างที่คุณพูด แต่ทำไมการตั้งค่าสถานะ PSH ในส่วนแรกของการตอบกลับที่มีเฉพาะส่วนหัวมากกว่าในส่วนสุดท้ายของส่วนที่สอง? ฉันคิดว่าธง PSH ใช้เพื่อแจ้งให้ผู้รับทราบว่าผู้ส่งไม่มีข้อมูลเพิ่มเติมที่จะส่ง (ตอนนี้)
พอล

ไม่จำเป็นต้องส่งข้อมูลเสร็จ แต่ให้ส่งข้อมูลปัจจุบันโดยไม่บัฟเฟอร์ ทำให้รู้สึกถึงการได้รับส่วนหัวทันทีเนื่องจากจากส่วนหัวคุณรู้จำนวนข้อมูลร่างกายที่คุณต้องอ่าน ดังนั้นจึงสมเหตุสมผลสำหรับแอปพลิเคชันในการส่งส่วนหัวทันที ในอีกด้านหนึ่งมันจะเสียแบนด์วิดท์ถ้าส่วนหัวและตัวเล็กและรวมเข้าด้วยกันเป็นแพ็คเก็ตเดียว คุณไม่สามารถเชื่อในการรับส่วนหัวภายในแพ็คเก็ตเดียว
Steffen Ullrich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.