ทำความรู้จักกับความสามารถของ HTTP/2

ทำความรู้จักกับความสามารถของ HTTP/2

HTTP/2 เป็น HTTP โปรโตคอลแบบใหม่ที่ทำมาเพื่อวัตถุประสงค์เรื่องความเร็ว(ลด latency) เป็นหลักเมื่อเทียบกับ HTTP/1.1 ซึ่งโปรโตคอลใหม่ที่ว่านี้ได้ต้นแบบมาจาก SPDY โปรโตคอลของ google ซึ่งตอนนี้หยุดการพัฒนาไปแล้วและทีมพัฒนาได้ย้ายมาช่วยกันทำ HTTP/2 เป็นที่เรียบร้อย โดยที่ HTTP/2 นั้นมีความสามารถเพิ่มจาก /1.1 มากมายแต่ก็ยังทำงานร่วมกับ /1.1 แบบเดิมได้ดี (semantically compatible)

ในบทความนี้จะเริ่มต้นกล่าวถึงความสามารถใหม่ๆ ที่ได้จาก HTTP/2 ให้รู้จักกันเบื้องต้นก่อนจะลงลึกในระดับรายละเอียดการเชื่อมต่อ และการใช้งานตลอดจนถึงการเขียนโปรแกรมให้รองรับความสามารถของโปรโตคอลใหม่นี้

เป้าหมายหลักของ HTTP/2 มุ่งเน้นไปที่
1. ลด Latency ของการเชื่อมต่อระหว่าง client กับ server
2. ลดจำนวนการเปิดการเชื่อมต่อของ TCP connection
3. ทำให้เว็บมีความปลอดภัยมากขึ้น
4. ยังคงทำงานร่วมกับโปรโตคอลแบบเก่าได้ดี (compatibility with HTTP/1.1)

ความสามารถหลักๆที่ เทียบกับ HTTP/1.1

ข้อแรกคือ Binary Protocol(HTTP/2 is binary protocol whereas HTTP/1.1 is text protocol)
HTTP/2 เป็นการส่งข้อมูลระหว่าง Client กับ Server ด้วยข้อมูลชุดไบนารี่ ซึ่งต่างจาก HTTP/1.1 ที่เป็น text protocol ซึ่งหมายความว่าเวอร์ชั่นใหม่จะมีประสิทธิภาพในการรับส่งข้อมูลดีกว่าแต่ก็แลกมากับการที่เราไม่สามารถอ่านด้วยตาเปล่าได้ ต้องใช้เครื่องมือ decode ข้อมูลไบนารี่นี้อีกขั้นตอนนึงซึ่งก็คิดว่าไม่นานก็น่าจะมีเครื่องมือพวกนี้มาให้ใช้กันแพร่หลาย

อย่างที่สองคือ Multiplexing(Multiple asynchronous requests over a single TCP connection)
ข้อนี้ถือว่าเป็นหัวใจของ HTTP/2 ซึ่งหมายถึงความสามารถในการรองรับการทำ Multiplexing ของ streams หลายๆ แบบในการเชื่อมต่อเพียงแค่ครั้งเดียว (single TCP/connection) wow!. ซึ่งหมายความว่าเครื่อง Client สามารถส่งคำขอไปหลายๆ ครั้งได้ในการสร้างการเชื่อมครั้งเดียวกัน และขณะเดียวกัน server ก็สามารถตอบกลับการร้องขอนั้น ๆ ในลำดับใด ๆ ก็ได้เมื่อ Server อยู่ในสถานะพร้อมตอบกลับ ซึ่งในภาษานักพัฒนาโปรแกรมเรียกมันว่า การรับและการส่งแบบ Asynchronous

ข้อต่อมาคือ Header Compression(Compress HTTP headers along with content)
ในโปรโตคอล HTTP/1.1 แบบเก่านั้นจะไม่มีการบีบอัดข้อมูลส่วน HEADER ทำให้ข้อมูลส่วนนี้มีขนาดใหญ่และซ้ำซ้อนซ้ำซากเพราะมีการส่งกลับไปมาแม้จะเป็นข้อมูลเดียวกัน ซึ่งใน HTTP/2 จะแก้ปัญหาในส่วนนี้โดยจะใช้การบีบอัดด้วยวิธี HPACK(RFC 7541) ที่มีออกแบบมาเพื่อการบีบอัดข้อมูลส่วนหัวของ HTTP ได้อย่างดีเยี่ยมซึ่งจะกว่าวในบทความอื่นต่อไป

ข้อที่สี่คือ Request prioritization (While making multiple HTTP requests to a same domain they can be prioritized.)
Prioritization จากการร้องของฝั่ง Client ทำให้ Server สามารถตัดสินใจได้ว่าควรจะจัดการกับข้อมูลเพื่อเตรียมการส่งกลับไปตามลำดับแบบใด Server สามารถตัดสินใจได้ว่าควรใช้ CPU memory หรือแบนวิชเท่าไหร่ในการจัดการชุดข้อมูลกลุ่มๆนี้เพื่อจัดเรียงกลับไปหา Client ได้อย่างเหมาะสมและ Utilize มากที่สุด ซึ่งต่อไปเราก็จะเห็นเว็บเซิร์ฟเวอร์หลายๆ ยี่ห้อที่มีการเพิ่มความสามารถต่างๆ เหล่านี้หลากหลายมากขึ้น

ข้อสุดท้ายคือ Server Push(Multiple response for single request)
ความสามารถในข้อนี้ทำให้เรานึกถึง HTTP5 web socket​ (SSE) ที่ทำให้ Server สามารถส่งข้อมูลจาก server ไปหา client ได้โดยที่ Client ไม่ต้อง request มา แต่ถึงอย่างนั้นสองอย่างนี้ก็ยังมีความแตกต่างกันโดยการออกแบบ เช่น Header ของ server push จะเป็นแบบบีบอัดส่วนของ SSE จะไม่มีและการทำงานของ Server push จะยังคงอาศัยการทำงานแบบ client/server ตามปกติแต่เพิ่มเติมส่วนของการส่งข้อมูลจาก server ไปที่ client cache ของการเชื่อมต่อเท่านั้น

ทำความรู้จักกับความสามารถของ HTTP/2

3 thoughts on “ทำความรู้จักกับความสามารถของ HTTP/2

  1. Ann says:

    ขออนุญาตถามอะไรที่ไม่เกี่ยวกับหัวข้อนี้ได้ไหมคะ
    อยากทราบว่า developer-focused system คืออะไรค่ะ
    กำลังแปลหนังสืออยู่แล้วไม่เข้าใจเลย พยายามหาความหมายก็ไม่เจอ
    ไม่ทราบจะถามใคร ไม่มีเพื่อนอยู่ในแวดวงนี้เลยค่ะ 😅

    รบกวนด้วยนะคะ ขอบพระคุณค่ะ

  2. developer-focused system มันขึ้นอยู่กับ context นะครับ ไม่แน่ใจว่าหนังสือที่แปลอยู่นี่มี Title ว่าอะไรนะครับ จะได้อธิบายให้ถูกบริบท

  3. Ann says:

    จริงๆแล้วมันคือ developer-focused payments system ค่ะ
    เป็นหนังสือเกี่ยวกับสตาร์ทอัพด้านเทคโนโลยี ประโยคนี้มาจากส่วนที่พูดถึงพี่น้องคู่หนึ่งที่เห็นจุดอ่อนในระบบการชำระเงินออนไลน์ว่ามันยุ่งยากสำหรับนักพัฒนาเว็บไซต์ จึงพยายามเขียนโปรแกรมเพื่อทำให้ระบบมันง่ายขึ้นค่ะ developer ในที่นี้ก็คือ website developer ขอโทษด้วยค่ะที่ไม่ได้เขียนให้เคลียร์ตั้งแต่แรก และขอบคุณนะคะที่ตอบกลับมา

Leave a Reply

Your email address will not be published. Required fields are marked *