HTTP ถูกกล่าวว่าไร้สัญชาติ ความหมายมันไม่จำเป็นต้องเก็บข้อมูลสำหรับการส่งข้อมูล
แต่ HTTP ใช้ TCP ซึ่งเป็นสถานะเชิง
หากเป็นเช่นนั้น HTTP จะกลายเป็นไร้สัญชาติได้อย่างไร
HTTP ถูกกล่าวว่าไร้สัญชาติ ความหมายมันไม่จำเป็นต้องเก็บข้อมูลสำหรับการส่งข้อมูล
แต่ HTTP ใช้ TCP ซึ่งเป็นสถานะเชิง
หากเป็นเช่นนั้น HTTP จะกลายเป็นไร้สัญชาติได้อย่างไร
คำตอบ:
HTTP ไม่สนใจ - และเป็นอิสระจาก - โปรโตคอลระดับล่างใด ๆ ที่ใช้เพื่อการส่งผ่านตัวมันเองถึงแม้ว่ามันจะไร้สัญชาติก็ตาม
เทคโนโลยีการขนส่งสามารถเป็น TCP หรือ SPX เก่าหรือ Novell ของ Novell หรืออะไรก็ได้ที่คุณฝันถึงและ HTTP จะยังคงทำงานเหมือนเดิม HTTP ต้องการโปรโตคอลการสตรีมหรือการเชื่อมต่อและขึ้นอยู่กับ URL ที่สามารถแก้ไขได้ แต่ไม่สนใจว่าจะทำอย่างไร
นี่คือหนึ่งในเหตุผลว่าทำไมรุ่นเลเยอร์หรือสแต็กเครือข่ายมีอยู่: ชั้นแอปพลิเคชันไม่จำเป็นต้องกังวลกับเลเยอร์ที่ต่ำกว่า
เพียงเพราะโปรโตคอลระดับล่างเป็น stateful ไม่ได้หมายความว่าอะไรที่อยู่ด้านบนของมันจะกลายเป็น stateful โดยอัตโนมัติหรือจำเป็นต้อง stateful
HTTP นั้นไม่มีสถานะ ดังนั้นหมายความว่าแอปพลิเคชันต้องใช้เลเยอร์อื่นที่ด้านบนของ HTTP เพื่อสร้างสถานะ โดยทั่วไปจะทำกับเซสชันคุกกี้
"HTTP คือไร้สัญชาติ" หมายความว่าแต่ละธุรกรรม HTTP (คำขอคู่การตอบกลับ) สามารถประมวลผลได้อย่างอิสระจากสถานะใด ๆ จากคู่คำขอตอบกลับก่อนหน้า
ในการขนส่งคู่การร้องขอการตอบกลับโดยเฉพาะคุณจำเป็นต้องใช้โปรโตคอลที่สามารถพกพาบล็อกขนาดใหญ่โดยพลการที่นั่นและบล็อกขนาดใหญ่ตามอำเภอใจกลับมาและการทำเช่นนั้นกับเลเยอร์ที่มีขนาดแพ็คเก็ตที่ จำกัด
แต่ข้ามขอบเขตการทำธุรกรรมไม่มีรัฐ ลูกค้าสามารถยกเลิกการเชื่อมต่อและสร้างใหม่สำหรับคำขอถัดไป ในความเป็นจริงนั่นเป็นตัวเลือกเดียวในรุ่นก่อนหน้าและยังคงทำงานเช่นนั้นหากไคลเอนต์ไม่รวมConnection: keep-alive
ส่วนหัว
คำขอต่อไปสามารถจัดการได้อย่างง่ายดายโดยเซิร์ฟเวอร์ที่แตกต่างกันและไคลเอนต์จะไม่ทราบเพราะเซิร์ฟเวอร์ไม่จำเป็นต้องรักษาสถานะใด ๆ (เว้นแต่แอปพลิเคชันจะเพิ่มสถานะของตนเองที่ด้านบนของ HTTP ซึ่งมักจะอยู่ในรูปแบบของเซสชัน) ใน load-balancing คือการลงโทษสำหรับการสร้างโปรโตคอล stateful บน HTTP) นี่เป็นข้อได้เปรียบของเซิร์ฟเวอร์ที่ไม่ทำงานในการโหลดบาลานซ์
can also easily be handled by different server and the client will never know
แม้ว่าจะเป็นเรื่องจริงทางเทคนิค แต่สิ่งนี้ทำให้เข้าใจผิดเนื่องจากเว็บแอปพลิเคชั่นจำนวนมากใช้เซสชันที่ติดหนึบซึ่งต้องการตัวโหลดบาลานซ์เพื่อกำหนดเส้นทางการร้องขอในอนาคตจากเซสชันการเรียกดูเดียวกันไปยังเซิร์ฟเวอร์เดียวกัน จากเปอร์สเปคทีฟ HTTP เซสชันจะไม่เกี่ยวข้อง แต่ประโยคเรียงลำดับสุดท้ายของคุณบอกเป็นนัยว่าประสบการณ์ของผู้ใช้ปลายทางจะไม่ได้รับผลกระทบซึ่งจะเป็นเท็จด้วยเซสชั่นเหนียว
ลักษณะ "ไร้สัญชาติ" ของ HTTP หมายความว่าในชั้นนี้จะไม่มีการสร้างหรือใช้ข้อมูลสถานะ
คุณสามารถเห็นสิ่งนี้ได้ในบางกรณีเช่นในการตรวจสอบความถูกต้อง HTTP ข้อมูลประจำตัวจะถูกส่งไปพร้อมกับคำขอทุกครั้งและการเชื่อมต่อแบบถาวรเป็นเพียงการเพิ่มประสิทธิภาพ (เช่นถ้าฉันส่งข้อมูลประจำตัวเซิร์ฟเวอร์จะลืมสิ่งเหล่านี้หลังจากคำขอ การเชื่อมต่อเปิด)
ในทางตรงกันข้ามกลไกการล็อกอินตามคุกกี้นั้นเป็นของรัฐ แต่ไม่ใช่ส่วนหนึ่งของ HTTP
คุณต้องเข้าใจว่ามันเป็นตุ๊กตารัสเซีย (หรือกล่อง) ถ้าคุณต้องการ) ตุ๊กตาแต่ละตัวอุ้มอีกข้างหนึ่งนั่นคือวิธีการทำงาน: TCP ถือ HTTP "ข้างใน" แต่มันไม่สนใจหรือคุณสมบัติ
เพื่อให้ได้ภาพรวมผมขอแนะนำให้อ่านเกี่ยวกับOSI Modelเพราะทำให้ชัดเจนยิ่งขึ้น
TCP อยู่ด้านล่างของ HTTP ไม่กี่เลเยอร์ในโมเดล OSI แต่ละเลเยอร์จริง ๆ แล้วสอดคล้องกับโปรโตคอลอื่น
ในกรณีของเรา HTTP อยู่ในการนำเสนอและชั้นแอปพลิเคชันและ TCP ในชั้นการขนส่ง หรือถ้าคุณใช้โมเดล TCP / IP ทั้งโปรโตคอล TCP และ IP จะอยู่ในเลเยอร์เครือข่ายเชื่อมโยงและ HTTP ในแอปพลิเคชันและเลเยอร์การนำเสนอ