จะเกิดอะไรขึ้นเมื่อคำขอ HTTP ถูกยกเลิกก่อนกำหนด


13

สมมติว่าฉันป้อน URL ในเบราว์เซอร์ของฉันและเบราว์เซอร์ส่งคำขอ HTTP เซิร์ฟเวอร์ HTTP ระยะไกลยอมรับคำขอและเริ่มงานที่มีความยาวเพื่อให้บริการตามคำขอ

หากฉันยกเลิกคำขอก่อนที่จะเสร็จสมบูรณ์ (ตัวอย่างเช่นกด Esc หรือใน Firefox) คำขอจะปิดอย่างไร เบราว์เซอร์จะสื่อสารคำขอยกเลิกนี้ไปยังเซิร์ฟเวอร์ (ฉันคิดว่าไม่ได้)?

สมมติว่าไม่มีเมื่อเสร็จงานที่ยาวนานเซิร์ฟเวอร์จะทำอะไรกับผลลัพธ์ มันส่งมันกลับมาหรือไม่? ถ้าเป็นเช่นนั้นจะเกิดอะไรขึ้น มันไปถึงพีซีของฉันหรือไม่ หรือหลงทาง?

นี่เป็นเพียงความอยากรู้ของฉัน

ขอบคุณที่สละเวลา :)


2
คุณได้ลองใช้การจับภาพ wireshark หรือไม่? ทำให้เป็นเรื่องง่ายที่จะดูว่าคอมพิวเตอร์เครื่องใดส่งไปยังเครื่องอื่นผ่านเครือข่าย
แข่ง

คำตอบ:


8

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

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


-2

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

ตัวอย่าง:

เราเข้าสู่http://localhostapache2 httpd สมมติว่ามันไม่ทำงาน เบราว์เซอร์เปิดซ็อกเก็ตส่งข้อความไปยังพอร์ต 80 (ค่าเริ่มต้น) และดูว่ามีการตอบสนองใด ๆ เนื่องจากไม่มีผู้ฟังเนื่องจาก apache ไม่ได้ทำงานคำร้องขอ ping นี้จึงไม่ได้รับการตอบกลับใด ๆ เลย อย่างน้อย 200 ok หรือมือชนิดใดก็ได้เลย แล้วจะเกิดอะไรขึ้นกับ ping ของเรา http ส่งบางสิ่ง: เช่นGET http://localhost 80... ฯลฯ เกิดอะไรขึ้นกับบรรทัดนี้ GET http://localhost 80? มันเป็นแค่การคิดเงินและหายไป

นี่เป็นเพียงความเชื่อของฉันและก่อนอื่นเราควรอ้างถึงTCPเพื่อความชัดเจนมากขึ้น เท่านั้นเราสามารถเข้าใจว่าอินเทอร์เน็ตโพรโทคอลและ http ที่ตามมาทำงานอย่างไร ท้ายที่สุดดูเหมือนว่าจะไม่มีคำจำกัดความที่ชัดเจนสำหรับคำขอ http ที่ยกเลิกก่อนกำหนด นั่นคือเหตุผลที่เรียกว่าการยุติก่อนกำหนด


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