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