Sobes.tech
Middle

რა განსხვავებაა HTTP/1 და HTTP/2-ს შორის?

sobes.tech AI

პასუხი AI-სგან

ძირითადი განსხვავებები:

  • მულტიპლექსირება (Multiplexing). HTTP/2 საშუალებას აძლევს ერთ TCP კავშირზე ერთდროულად გააგზავნოს და მიიღოს რამდენიმე მოთხოვნა და პასუხი. HTTP/1.1-ისთვის აუცილებელი იყო თითოეული მოთხოვნის/პასუხისათვის ცალკე კავშირი (გარდა pipelining მექანიზმის, რომელიც შეზღუდული იყო).
  • სათაურების შეკუმშვა (Header Compression). HTTP/2 იყენებს HPACK ალგორითმს სათაურების შეკუმშვაში, რათა შემცირდეს მათი ზომა და გადაცემული მონაცემების რაოდენობა. HTTP/1.1-ში სათაურები ტექსტურ ფორმატში გადაეცემა.
  • საკვანძო ხაზების პრიორიტეტი (Stream Prioritization). HTTP/2-ში მომხმარებელი შეუძლია განსაზღვროს სხვადასხვა ნაკადისთვის (მოთხოვნები/პასუხები) პრიორიტეტი, რაც სერვერს საშუალებას აძლევს ოპტიმალურად განახორციელოს მონაცემების მიწოდების სია. HTTP/1.1 ასეთი მექანიზმი არ აქვს.
  • სერვერის გადმოგზავნა (Server Push). HTTP/2 საშუალებას აძლევს სერვერს გადმოგზავნოს რესურსები მომხმარებლისთვის მოძებნამდე, მათი საჭიროების წინასწარმეტყველების საფუძველზე. HTTP/1.1-ში მომხმარებელმა უნდა მოთხოვოს თითოეული რესურსი ცალ-ცალკე.
  • ფრემების ფორმატი (Binary Framing). HTTP/2 მონაცემებს ბინარულ ფორმატში (ფრემებში) გადმოგზავნის, რაც ამარტივებს ანალიზს და ზრდის ეფექტიანობას HTTP/1.1-ის ტექსტურ ფორმატთან შედარებით.

შედარება სქემაში:

მახასიათებელი HTTP/1.1 HTTP/2
კავშირი ერთი კავშირი თითო მოთხოვნისთვის (pipelining გარეშე) ერთი კავშირი რამდენიმე ნაკადისთვის
მულტიპლექსირება არ არის (ან შეზღუდულია pipelining) არის
სათაურების შეკუმშვა არ არის HPACK (ბინარული შეკუმშვა)
ნაკადების პრიორიტეტი არ არის არის
სერვერის გადმოგზავნა არ არის არის
მონაცემთა ფორმატი ტექსტი ბინარული (ფრემები)
Head-of-Line ბლოკირება არსებობს ნაწილობრივ გადაჭრილია მულტიპლექსირებით

HTTP/1.1 მოთხოვნის მაგალითი:

// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*

HTTP/2-ის მონაცემთა ნაწილობრივი წარმოდგენა (ფრემების გაცვლა უფრო რთულია და ასე პირდაპირ არ ჩანს):

// HTTP/2-ში ურთიერთქმედება ხდება ფრემების დონეზე (HEADERS, DATA და სხვა),
// რომლებიც ბინარულია და დამალულია მომხმარებლისგან აპლიკაციის დონეზე.
// მათ მარტივ ტექსტურ ფორმატში წარმოდგენა რთულია:
// სათაურები შეკუმშულია და გადაეცემა HEADERS ფრემში.
// პასუხის სხეული გადაეცემა DATA ფრემებში.