อีกคำถามที่ถูกถามเกี่ยวกับการใช้ที่อยู่ IP เพื่อระบุลูกค้ารายบุคคล ฉันคิดว่าฉันเข้าใจว่าทำไมที่อยู่ IP ไม่เพียงพอ แต่สิ่งที่เกี่ยวกับซ็อกเก็ตซึ่งมีข้อมูลเพิ่มเติมและจากสิ่งที่ฉันเข้าใจคือ stateful? ไม่สามารถใช้แทนคุกกี้ได้ใช่ไหม
อีกคำถามที่ถูกถามเกี่ยวกับการใช้ที่อยู่ IP เพื่อระบุลูกค้ารายบุคคล ฉันคิดว่าฉันเข้าใจว่าทำไมที่อยู่ IP ไม่เพียงพอ แต่สิ่งที่เกี่ยวกับซ็อกเก็ตซึ่งมีข้อมูลเพิ่มเติมและจากสิ่งที่ฉันเข้าใจคือ stateful? ไม่สามารถใช้แทนคุกกี้ได้ใช่ไหม
คำตอบ:
ซ็อกเก็ตระบุการเชื่อมต่อ คุกกี้มักจะใช้ในการระบุผู้ใช้ หากฉันเปิดแท็บเบราว์เซอร์สองแท็บไปยัง SE.SE ฉันจะมีการเชื่อมต่อสองจุดและจะเชื่อมต่อสองซ็อกเก็ต แต่ฉันต้องการให้การตั้งค่าของฉันคงอยู่ทั้งสองอย่าง (โดยปกติแล้วเบราว์เซอร์จะเปิดซ็อกเก็ตหลายซ็อกเก็ตสำหรับหนึ่งหน้าเพื่อเร่งความเร็วในการโหลดหน้าผมเชื่อว่าเบราว์เซอร์ส่วนใหญ่มีค่าสูงสุดเริ่มต้นระหว่าง 4 ถึง 10 ซ็อกเก็ตต่อหน้า)
และสิ่งที่ตรงกันข้ามอาจเกิดขึ้นได้เช่นกัน: ถ้าฉันปิดแท็บเบราว์เซอร์ของฉันผู้ใช้รายอื่นในเครื่องอาจเปิดแท็บเบราว์เซอร์ไปที่ SE.SE และอาจได้รับสี่เท่าเดิม (source_ip, source_port, target_ip, target_port) เขาจะได้รับการตั้งค่าทั้งหมดของฉัน
ซ็อกเก็ต TCP ได้รับการออกแบบให้มีสถานะดังนั้นโดยทั่วไปจะใช้เพื่อระบุเซสชัน โปรโตคอลเช่น SSH และ ftp ทำสิ่งนี้ทุกประการ
HTTP ถูกออกแบบมาให้ไร้สถานะและการเชื่อมต่อแต่ละครั้งจะเชื่อมโยงกับทรัพยากรที่จะดาวน์โหลดเท่านั้น หลังจากดาวน์โหลดทรัพยากรแล้วซ็อกเก็ต TCP ที่ปิดการร้องขอ HTTP จะถูกปิด เหตุผลดั้งเดิมของเรื่องนี้คือความเรียบง่าย แต่ผลข้างเคียงคือเซิร์ฟเวอร์ HTTP ที่ใช้เว็บไซต์ทันสมัยสามารถรองรับผู้ใช้มากกว่าเซิร์ฟเวอร์ที่ใช้ซ็อกเก็ตอย่าง SSH หรือ ftp
ดังนั้นไม่สามารถใช้ซ็อกเก็ตได้เนื่องจาก HTTP จะปิดซ็อกเก็ตหลังจากดาวน์โหลดหน้าเว็บ
แน่นอนว่าการพูด HTTP จะปิดซ็อกเก็ตต่อทรัพยากรเป็นการทำสิ่งที่เกินความจำเป็นเนื่องจาก HTTP มีคุณสมบัติเช่นการเชื่อมต่อไปป์ไลน์และการเชื่อมต่อที่สามารถดาวน์โหลดทรัพยากรได้หลายรายการต่อซ็อกเก็ต แต่นั่นเป็นเพียงการเพิ่มประสิทธิภาพ หลังจากทุกสิ่งดาวน์โหลดเบราว์เซอร์ของคุณจะปิดซ็อกเก็ตหลังจากหมดเวลา
เดิมที HTTP ได้รับการออกแบบให้เป็นโปรโตคอลอย่างง่ายสำหรับการดาวน์โหลดไฟล์ HTML เบราว์เซอร์รุ่นเก่ายังสามารถดาวน์โหลดไฟล์ HTML ในรูปแบบโปรโตคอลอื่นเช่น Gopher และ ftp ด้วยเหตุนี้จึงไม่มีเหตุผลที่ทำให้สถานะ HTTP เป็นเพราะไฟล์ HTML เป็นเพียงไฟล์ข้อความธรรมดา
เมื่อเว็บฟอร์มได้รับการแนะนำและหน้า HTML สามารถส่งข้อมูลกลับไปยังหน้าเว็บเซิร์ฟเวอร์ที่เริ่มต้องการเซสชัน ดังนั้นคุกกี้จึงถูกสร้างขึ้นเพื่อแนะนำสถานะใหม่ให้กับโปรโตคอลไร้สัญชาติที่ส่งผ่านเลเยอร์การถ่ายโอนที่ไม่ระบุชื่อที่ส่งผ่านเลเยอร์เครือข่ายไร้สาย ดังนั้นชั้นแอปพลิเคชันเต็มรูปแบบคือ:
วันนี้เรามี websockets ที่สามารถเปิดซ็อกเก็ตเปิดเดียวจากหน้าเว็บของคุณไปยังเซิร์ฟเวอร์ ดังนั้นด้วย websockets คุณสามารถใช้ซ็อกเก็ตอีกครั้งเพื่อระบุผู้ใช้เพราะ websocket ด้วยตัวเองเป็นของรัฐ แต่ในกรณีส่วนใหญ่คุณจะต้องใช้คุกกี้สำหรับหน้า html หลักที่โหลดจาวาสคริปต์ที่เริ่ม websocket