HTTP 1.0 กับ 1.1


263

มีคนให้ภาพรวมสั้น ๆ เกี่ยวกับความแตกต่างระหว่าง HTTP 1.0 และ HTTP 1.1 หรือไม่ ฉันใช้เวลาทั้งสองกับ RFCs แต่ก็ไม่สามารถดึงความแตกต่างระหว่างพวกเขาได้มากมาย Wikipedia กล่าวว่าสิ่งนี้:

HTTP / 1.1 (1997-1999)

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

แต่นั่นไม่ได้มีความหมายอะไรกับฉันมากนัก ฉันรู้ว่านี่เป็นวิชาที่ค่อนข้างซับซ้อนดังนั้นฉันจึงไม่คาดหวังคำตอบแบบเต็ม แต่มีคนให้ภาพรวมสั้น ๆ เกี่ยวกับความแตกต่างในระดับที่ต่ำกว่าเล็กน้อยได้หรือไม่?
จากนี้ฉันหมายความว่าฉันกำลังมองหาข้อมูลที่ฉันต้องรู้ในการใช้งานเซิร์ฟเวอร์ HTTP หรือแอปพลิเคชัน ฉันส่วนใหญ่มองหาเขยิบไปในทิศทางที่ถูกต้องเพื่อให้ฉันสามารถคิดออกเอง


นี่เป็นบทสรุปที่ดีเกี่ยวกับความแตกต่างที่สำคัญ: http://www.research.att.com/~bala/papers/h0vh1.html
Kev

3
ดีสำหรับคุณที่จะไปที่แหล่งที่มา ดูเหมือนว่าคุณจะไม่รู้จักกับเครือข่ายโดยทั่วไปหากคุณไม่เข้าใจข้อมูลสรุป บางทีคุณควรศึกษาเงื่อนไขเหล่านั้นด้วย
Marcin

4
แม้ว่าฉันจะยังเป็นมือใหม่เมื่อพูดถึงเรื่องนี้ปัญหาหลักของฉันคือการสรุปทำให้ฉัน "มากกว่า" มากกว่า "ความชำนาญ"
Jason Baker


คำตอบ:


363

การสนับสนุนพร็อกซีและฟิลด์โฮสต์:

HTTP 1.1 มีส่วนหัวโฮสต์ที่ต้องการตามข้อมูลจำเพาะ

HTTP 1.0 ไม่จำเป็นต้องมีส่วนหัวของโฮสต์อย่างเป็นทางการ แต่ก็ไม่เจ็บที่จะเพิ่มหนึ่งและแอปพลิเคชัน (พร็อกซี่) คาดว่าจะเห็นส่วนหัวของโฮสต์โดยไม่คำนึงถึงรุ่นโปรโตคอล

ตัวอย่าง:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

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

ดังนั้นนี่หมายความว่าถ้าคุณมี blahblahlbah.com และ helohelohelo.com ทั้งคู่ชี้ไปที่ IP เดียวกัน เว็บเซิร์ฟเวอร์ของคุณสามารถใช้ฟิลด์โฮสต์เพื่อแยกแยะว่าไซต์ใดที่เครื่องไคลเอ็นต์ต้องการ

การเชื่อมต่อแบบต่อเนื่อง:

HTTP 1.1 ยังช่วยให้คุณมีการเชื่อมต่อแบบถาวรซึ่งหมายความว่าคุณสามารถมีมากกว่าหนึ่งคำขอ / ตอบสนองในการเชื่อมต่อ HTTP เดียวกัน

ใน HTTP 1.0 คุณต้องเปิดการเชื่อมต่อใหม่สำหรับแต่ละคู่การร้องขอ / การตอบสนอง และหลังจากการตอบสนองแต่ละครั้งการเชื่อมต่อจะถูกปิด สิ่งนี้นำไปสู่ปัญหาประสิทธิภาพที่ยิ่งใหญ่เนื่องจากTCP Slow Startเริ่มช้า

วิธีการตัวเลือก:

HTTP / 1.1 แนะนำวิธี OPTIONS ไคลเอ็นต์ HTTP สามารถใช้วิธีนี้เพื่อกำหนดความสามารถของเซิร์ฟเวอร์ HTTP ส่วนใหญ่จะใช้สำหรับ Cross Origin Resource Sharing ในเว็บแอปพลิเคชัน

เก็บเอาไว้:

HTTP 1.0 มีการสนับสนุนการแคชผ่านส่วนหัว: If-Modified-Since

HTTP 1.1 ขยายการสนับสนุนแคชมากโดยใช้สิ่งที่เรียกว่า 'แท็กเอนทิตี' หาก 2 ทรัพยากรเหมือนกันดังนั้นพวกเขาจะมีแท็กเอนทิตีเดียวกัน

HTTP 1.1 ยังเพิ่มส่วนหัวแบบมีเงื่อนไข If-Unmodified-Since, If-Match, If-None-Match

นอกจากนี้ยังมีส่วนเพิ่มเติมเพิ่มเติมที่เกี่ยวข้องกับการแคชเช่นส่วนหัวของ Cache-Control

100 สถานะดำเนินการต่อ:

มีรหัสส่งคืนใหม่ใน HTTP / 1.1 100 ดำเนินการต่อ นี่คือการป้องกันไม่ให้ลูกค้าส่งคำขอขนาดใหญ่เมื่อลูกค้าไม่แน่ใจว่าเซิร์ฟเวอร์สามารถดำเนินการตามคำขอหรือได้รับอนุญาตให้ดำเนินการตามคำขอ ในกรณีนี้ไคลเอนต์ส่งเฉพาะส่วนหัวและเซิร์ฟเวอร์จะบอกลูกค้า 100 ดำเนินการต่อไปด้วยร่างกาย

ล้นหลาม:

  • การพิสูจน์ตัวตนแบบแยกย่อยและการพิสูจน์ตัวตนพร็อกซี
  • รหัสสถานะใหม่พิเศษ
  • การเข้ารหัสการถ่ายโอนเป็นก้อน
  • ส่วนหัวการเชื่อมต่อ
  • การสนับสนุนการบีบอัดที่เพิ่มขึ้น
  • อื่น ๆ อีกมากมาย

15
โปรดทราบว่าเซิร์ฟเวอร์ / พร็อกซีจำนวนมากที่อ้างว่าพวกเขาต้องการ HTTP / 1.0 จะได้รับอารมณ์เสียมากถ้าคุณเว้นส่วนหัวของโฮสต์
พอลทอมบลิน

2
HTTP 1.0 รองรับการบีบอัดผ่านส่วนหัวของการเข้ารหัสเนื้อหา ดังที่ Paul กล่าวไว้ฉันขอแนะนำไคลเอนต์ HTTP / 1.0 ใด ๆ ให้ส่งส่วนหัวของโฮสต์เนื่องจากไม่ได้ห้ามเด็ดขาดและสิ่งต่าง ๆ จะทำงานได้บ่อยกว่าที่คุณคาดหวัง มิฉะนั้นสิ่งนี้จะตาย
cpm

@Paul Tomblin: ขอบคุณฉันเพิ่มข้อมูลนี้แล้ว
Brian R. Bondy

2
เกี่ยวกับ "ถ้าคุณมี blahblahlbah.com และ helohelohelo.com ทั้งคู่ชี้ไปที่ IP เดียวกันเว็บเซิร์ฟเวอร์ของคุณสามารถใช้ฟิลด์โฮสต์เพื่อแยกแยะว่าไซต์ใดที่เครื่องไคลเอ็นต์ต้องการ" ดังนั้นจะเกิดอะไรขึ้นเมื่อไคลเอนต์ HTTP 1.0 ให้เราไม่มีฟิลด์โฮสต์ที่จะแยกแยะ
Pacerier

@Pacerier มักจะเป็นหน้าเริ่มต้นของบางประเภท; มันขึ้นอยู่กับเซิร์ฟเวอร์
Andrew Lambert

14

 HTTP 1.0 (1994)

  • มันยังคงใช้งานอยู่
  • สามารถใช้งานโดยไคลเอนต์ที่ไม่สามารถจัดการกับเซิร์ฟเวอร์ตอบกลับ (หรือบีบอัด) ตอบกลับ

 HTTP 1.1 (1996 - 2015)

  • แปลงส่วนขยายหลายอย่างเป็นทางการให้เป็นเวอร์ชั่น 1.0
  • รองรับการเชื่อมต่อแบบต่อเนื่องและไปป์ไลน์
  • รองรับการถ่ายโอนก้อนการบีบอัด / การบีบอัด
  • รองรับการโฮสต์เสมือน (เซิร์ฟเวอร์ที่มีที่อยู่ IP เดียวซึ่งโฮสต์หลายโดเมน)
  • รองรับหลายภาษา
  • รองรับการถ่ายโอนช่วงไบต์ มีประโยชน์สำหรับการถ่ายโอนข้อมูลที่ถูกขัดจังหวะต่อไป

HTTP 1.1 เป็นการปรับปรุง HTTP 1.0 รายการต่อไปนี้แสดงการปรับปรุงที่สำคัญสี่ประการ:

  1. การใช้ที่อยู่ IP อย่างมีประสิทธิภาพโดยอนุญาตให้แสดงหลายโดเมนจากที่อยู่ IP เดียว

  2. ตอบสนองเร็วขึ้นโดยอนุญาตให้เว็บเบราว์เซอร์ส่งคำขอหลายรายการผ่านการเชื่อมต่อแบบต่อเนื่องเพียงครั้งเดียว

  3. การตอบสนองที่เร็วขึ้นสำหรับเพจที่สร้างขึ้นแบบไดนามิกโดยการสนับสนุนการเข้ารหัสแบบ chunked ซึ่งช่วยให้สามารถส่งคำตอบก่อนที่จะทราบความยาวทั้งหมด
  4. ตอบสนองเร็วขึ้นและประหยัดแบนด์วิดธ์ที่ยอดเยี่ยมโดยการเพิ่มการสนับสนุนแคช

9

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

สำหรับสถานการณ์ที่ซับซ้อนมากขึ้น HTTP 1.1 เป็นวิธีที่จะไป คาดว่าจะเพิ่มขนาดรหัส 3 ถึง 5 เท่าสำหรับการจัดการกับความซับซ้อนของโปรโตคอล HTTP 1.1 ที่ซับซ้อนยิ่งขึ้น ความซับซ้อนส่วนใหญ่มาจากเพราะใน HTTP 1.1 คุณจะต้องสร้างแยกวิเคราะห์และตอบสนองต่อส่วนหัวต่างๆ คุณสามารถป้องกันแอปพลิเคชันของคุณจากความซับซ้อนนี้โดยให้ไคลเอนต์ใช้ไลบรารี HTTP หรือเซิร์ฟเวอร์ใช้เว็บแอปพลิเคชันเซิร์ฟเวอร์


7

ปัญหาที่สำคัญคือการสนับสนุนการทำงานร่วมกันสำหรับการเชื่อมต่อแบบถาวร ฉันเพิ่งทำงานบนเซิร์ฟเวอร์ที่ "สนับสนุน" HTTP / 1.1 แต่ยังไม่สามารถปิดการเชื่อมต่อเมื่อไคลเอนต์ส่งคำขอ HTTP / 1.0 เมื่อเขียนเซิร์ฟเวอร์ที่รองรับ HTTP / 1.1 ต้องแน่ใจว่าใช้งานได้ดีกับไคลเอนต์ HTTP / 1.0 เท่านั้น


8
HTTP / 1.1 กำหนดให้เราต้องรองรับ HTTP / 1.0 หรือไม่
Pacerier

@Troy - การส่งคำตอบไปยังคำขอ HTTP 1.1 นั้นถูกต้องหรือไม่และหลังจากนั้นปิดการเชื่อมต่อทันที (ซ็อกเก็ตที่คำขอนั้นถูกอ่านจากเซิร์ฟเวอร์) ซึ่งหมายความว่าเซิร์ฟเวอร์ใช้ HTTP 1.0
Guy Avraham เมื่อ

5

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

หากคุณต้องการพัฒนาแอปพลิเคชันเช่นเว็บไซต์หรือสิ่งที่คล้ายกันคุณไม่จำเป็นต้องกังวลเกี่ยวกับความแตกต่างมากนัก แต่คุณควรทราบความแตกต่างระหว่างGETและPOSTคำกริยาอย่างน้อย

ตอนนี้ถ้าคุณต้องการพัฒนาเบราว์เซอร์แล้วใช่คุณจะต้องรู้โปรโตคอลที่สมบูรณ์รวมถึงถ้าคุณพยายามพัฒนาเซิร์ฟเวอร์ HTTP

หากคุณสนใจที่จะรู้ว่าโปรโตคอล HTTP ฉันขอแนะนำให้คุณเริ่มต้นด้วย HTTP / 1.1 แทน 1.0


1
Methinks Jason ทราบถึงความแตกต่างระหว่าง GET และ POST แล้วหากเขากำลังพิจารณาที่จะสร้างเซิร์ฟเวอร์ HTTP / แอพของเขาเองตั้งแต่ต้น :)
Kev

1
ฉันได้ทำงานกับ webserver ซึ่งปัจจุบันสนับสนุน HTTP 1.0 เท่านั้นฉันเพิ่งสงสัยว่ามีอะไรเกี่ยวข้องกับการเพิ่มการสนับสนุน 1.1
Jason Baker

2

HTTP 1.1 เป็น Hypertext Transfer Protocol รุ่นล่าสุดซึ่งเป็นแอพพลิเคชั่นเวิลด์ไวด์เว็บโปรโตคอลที่ทำงานบนโปรโตคอล TCP / IP ของอินเทอร์เน็ต เปรียบเทียบกับ HTTP 1.0, HTTP 1.1 ให้การจัดส่งเว็บเพจได้เร็วกว่า HTTP ดั้งเดิมและลดปริมาณการใช้งานเว็บ

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


1

HTTP 1.1 มาพร้อมกับส่วนหัวของโฮสต์ในสเปคในขณะที่ HTTP 1.0 ไม่มีส่วนหัวของโฮสต์อย่างเป็นทางการ แต่ไม่ได้ปฏิเสธที่จะเพิ่ม

ส่วนหัวของโฮสต์นั้นมีประโยชน์เพราะอนุญาตให้ไคลเอนต์กำหนดเส้นทางข้อความทั่วทั้งพร็อกซีเซิร์ฟเวอร์และความแตกต่างที่สำคัญระหว่าง HTTP เวอร์ชัน 1.0 และ 1.1 คือ:

  1. HTTP 1.1 มาพร้อมกับการเชื่อมต่อแบบต่อเนื่องซึ่งกำหนดว่าเราสามารถมีมากกว่าหนึ่งคำขอหรือตอบสนองในการเชื่อมต่อ HTTP เดียวกัน
  2. ขณะที่อยู่ใน HTTP 1.0 คุณจะต้องเปิดการเชื่อมต่อใหม่สำหรับแต่ละคำขอและการตอบกลับ
  3. ใน HTTP 1.0 จะมี pragma ขณะที่ใน HTTP 1.1 จะมีการควบคุมแคชซึ่งคล้ายกับ pragma

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