HTTP คืออะไร
ทำความรู้จัก HTTP ภาษากลางที่ browser กับ server ใช้คุยกัน เข้าใจบทบาท client กับ server และวงจร request-response
เปิด browser พิมพ์ google.com กด Enter ภายในไม่ถึง 1 วินาที หน้า Google ก็โผล่มาให้ค้นหา เคยสงสัยไหมว่าระหว่างที่คุณกด Enter กับตอนที่หน้าเว็บโผล่ เกิดอะไรขึ้นข้างหลัง
คำตอบคือ browser ของคุณส่ง “คำขอ” ไปยัง computer ที่เก็บ Google อยู่ที่ไหนสักแห่งในโลก แล้วรอรับ “คำตอบ” กลับมา วิธีที่ทั้ง 2 ฝั่งคุยกันมีชื่อว่า HTTPและวันนี้เราจะมาเข้าใจมันทีละก้าว
HTTP ย่อมาจากอะไร
- HTTP = HyperText Transfer Protocol
- แปลตรงตัว: ระเบียบวิธีการส่ง HyperText
- HyperText คือข้อความที่ link ไปยังข้อความอื่นได้ พูดง่ายๆ คือหน้าเว็บ HTML ที่คลิกลิงก์ไปหน้าอื่นได้
- Protocol คือข้อตกลงว่าจะสื่อสารกันยังไง เหมือนกับมารยาทการคุย ถ้าคนหนึ่งพูดไทยแต่อีกคนพูดสเปน ก็คุยไม่รู้เรื่อง ต้องตกลงภาษาเดียวกันก่อน
ใครคุยกับใคร
ใน HTTP มีบทบาทอยู่ 2 ฝั่งเสมอ
- Client (ผู้ขอ) คือฝั่งที่อยาก “ได้” อะไรบางอย่าง เช่น browser บนเครื่องของคุณ app ในมือถือ หรือแม้แต่ smart TV
- Server (ผู้ให้บริการ) คือ computer ที่เก็บข้อมูล/เว็บไซต์ไว้ นั่งรอรับคำขอและตอบกลับ server จริงๆ คือ computer เครื่องเดียวหรือหลายเครื่องที่เปิดอยู่ตลอด 24 ชั่วโมง
Client ส่ง Request (คำขอ) ไปยัง Server จากนั้น Server ตอบกลับด้วย Response (คำตอบ) เท่านี้เองคือหัวใจของ HTTP
Mental model: ร้านกาแฟ
ถ้า HTTP ยังฟังดูเป็นเรื่องไกลตัว ลองคิดเป็นการสั่งกาแฟที่ร้าน
ทั้ง 2 ระบบใช้หลักการเดียวกัน
- ฝั่ง “ขอ” ต้องบอกชัดว่าต้องการอะไร
- ฝั่ง “ให้” ต้องเข้าใจคำขอนั้น
- มีภาษาหรือข้อตกลงที่ทั้งคู่รู้จัก (ภาษาไทยในร้าน, HTTP ในเว็บ)
Request-Response cycle: ทีละก้าว
ลองดู animation ต่อไปนี้ว่าสิ่งที่เกิดขึ้นจริงๆ เวลาเปิดหน้าเมนูในแอพสั่งกาแฟเป็นยังไง
- Browser เปิดการเชื่อมต่อไปยัง server
- Browser ส่ง request (ฉันอยากได้หน้าเมนู)
- Server ได้รับ request ประมวลผล เช่น ดึงข้อมูลเมนูจาก database ประกอบเป็น HTML
- Server ส่ง response กลับ (นี่ไงหน้าเมนูของคุณ พร้อมสถานะ “เรียบร้อย”)
- Browser ได้รับ response นำไปแสดงผลให้คุณเห็น
ทุก request มี response เสมอ ยกเว้นกรณี server ล่มหรือ internet ขาดกลางทาง และที่สำคัญคือ client เป็นฝ่ายเริ่มคุยก่อนเสมอ server ไม่มีวันส่งของกลับมาก่อนที่ client จะขอ
HTTP stateless: Server จำอะไรไม่ได้เลย
สิ่งที่เป็นเอกลักษณ์ของ HTTP คือมันเป็น stateless หรือ “ไม่มีความจำ”
- ทุก request ที่ client ส่งมาถือว่าเป็น “ครั้งแรก” ในสายตา server
- Server ไม่รู้ว่า request นี้คือคนเดิมที่เพิ่งขอเมื่อ 5 วินาทีก่อน หรือเป็นคนใหม่
- ถ้าอยากให้ server “จำ” เราได้ ต้องใช้กลไกเสริม เช่น cookie หรือ token เรื่องนี้จะเจาะลึกในบทที่ 9
ฟังดูเป็นข้อจำกัด แต่จริงๆ คือจุดแข็งของ HTTP เพราะทำให้ server รองรับผู้ใช้หลักล้านได้พร้อมกัน วาง server 100 เครื่องในหลายประเทศ เครื่องไหนจะตอบ request ไหนก็ได้ ไม่ผูกติดกับเครื่องใดเครื่องหนึ่ง
HTTP ไม่ได้มีแค่ browser ใช้
หลายคนคิดว่า HTTP คือเรื่องของ browser อย่างเดียว ความจริงไม่ใช่
- Mobile app ใช้ HTTP คุยกับ server ทุกวัน เช่น LINE, Facebook, Grab, Starbucks app
- Smart TV, smart watch, ลำโพง Alexa ใช้ HTTP คุยกับ cloud
- IoT (ตู้เย็น, sensor วัดอากาศ) ส่งข้อมูลผ่าน HTTP
- Server คุยกับ server ด้วยกันเองก็ใช้ HTTP
พูดได้ว่า HTTP คือ ภาษากลาง ของ internet ยุคนี้ ทุกอย่างที่เชื่อม internet ได้ 99% ใช้ HTTP อยู่เบื้องหลัง
HTTP เกิดมาจากไหน
- คิดค้นโดย Tim Berners-Lee ที่ CERN(สถาบันวิจัยฟิสิกส์นิวเคลียร์ในสวิตเซอร์แลนด์) ช่วงปี 1989-1991
- ออกแบบให้นักวิจัยส่งเอกสารงานวิจัยให้กันอ่าน link ถึงกันได้
- กลายเป็นพื้นฐานของ World Wide Web (WWW) ที่เราคุ้นเคย
- จากนั้นทั้งโลกเอาไปใช้กับทุกอย่าง ไม่ใช่แค่เอกสารวิจัย
คำศัพท์ที่จะเจอบ่อยตลอดคอร์ส
- Client ฝั่งผู้ขอ เช่น browser, app มือถือ
- Server computer ปลายทางที่เก็บเว็บหรือข้อมูล
- Request คำขอที่ client ส่งไป
- Response คำตอบที่ server ส่งกลับ
- Protocol ข้อตกลงว่าจะสื่อสารกันยังไง
- Stateless ไม่มีความจำระหว่าง request แต่ละครั้ง
สรุป
- HTTP คือภาษากลางที่ browser กับ server ใช้คุยกัน
- เกิดปี 1989 ที่ CERN สร้างเพื่อเว็บ แต่วันนี้ใช้ทุกอุปกรณ์ที่เชื่อม internet
- มีแค่ 2 ฝั่งเสมอ: client ขอ และ server ตอบ
- Client เริ่มก่อนเสมอ Server ไม่มีทางส่งของกลับก่อนถูกขอ
- Stateless: ทุก request ถือว่าเจอกันครั้งแรก ไม่มีความจำต่อเนื่อง
ตอนนี้เราเข้าใจภาพรวมแล้วว่า client ส่ง request ไปหา server แต่ request จะต้องบอก server ยังไงว่า “อยากได้อะไร” บทถัดไปเราจะเจาะ URL ที่เป็นเหมือน “ที่อยู่” ของสิ่งที่ client อยากได้