HTTP แบบพื้นฐานสุดๆ

http_basic

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

HTTP คืออะไรล่ะถ้าอยากรู้รายละเอียดก็จริงจังก็ไปอ่านใน Wiki ได้เลย

สิ่งที่ผมอยากจะพูดถึงขอเป็นในมุมของ Developer แบบสั้นๆละกัน

HTTP นั้นเป็น Protocol(ข้อตกลง) ที่ใช้ในการติดต่อกันระหว่างอุปกรณ์ที่รองรับการเชื่อมต่อไม่ว่าจะแบบต่อสายหรือ wireless ซึ่งจะมีส่วนประกอบหลักๆคือ Client(เครื่องต้นทาง) กับ Server(เครื่องปลายทาง) และทำการสื่อสารโดยสิ่งที่เรียกว่า HTTP Request/Response

HTTP Request

คือการส่งคำสั่งเพื่อขอข้อมูลโดย Client ไปยัง Server เพื่อให้ส่งข้อมูลตอบกลับมา

Client === ร้องขอ ==> Server

ส่วนประกอบสำคัญของ HTTP Request

  1. URL ซึ่งเป็นเหมือนที่อยู่ของ Server ที่จะไปขอข้อมูล
    โดยที่ URL นั้นก็มีส่วนประกอบหลักๆประมาณนี้ครับ
    Scheme เป็นตัวที่ระบุ Protocol ซึ่งโดยปกติจะเป็น http หรือ https (มี s คือ secure หรือมีระบบความปลอดภัยกว่า)
    Host Name เป็นชื่อของ Server ที่ทำการลงทะเบียนไว้
    Port เป็นหมายเลขสำหรับระบุช่องการติดต่อ (เหมือนกับเราไปธนาคารแล้วมีหลายช่องที่เคาเตอร์ให้บริการ แต่ละช่องก็ให้บริการแตกต่างกันในกรณีปกติ) ซึ่งปกติไม่ต้องระบุก็ได้เพราะมี Default คือ 80 สำหรับ http และ 443 สำหรับ https
    Path เช่นที่อยู่ของข้อมูล ไฟล์ รูป
    Query String เป็นข้อมูลเพิ่มเติมที่ใช้ระบุว่า Client ต้องการข้อมูลมีรายละเอียดปลีกย่อยยังไง

    ตัวอย่างเช่น
    https://www.youtube.com/watch?v=ZV-6SJmSw7
    Scheme คือ https
    Host Name คือ www. youtube.com
    Port ไม่ได้ระบุ ซึ่งค่าปกติเป็น 443 เพราะเป็น https
    Path ก็คือ watch
    Query String คือ v=ZV-6SJmSw7

  2. HTTP Headers ซึ่งเป็นเหมือนกับข้อมูลเพิ่มเติมที่แนบไปให้ Server รับรู้ว่า เช่น มาจากอุปกรณ์แบบไหน Version อะไร ต้องการข้อมูลแบบไหน
  3. Cookies เป็นข้อมูลไม่ใหญ่มากที่ทาง Server สามารถฝากไว้ที่ Client ได้
  4. Method หรือ Verb เป็นข้อมูลที่บอกว่า Client ต้องการทำอะไรกับข้อมูล เพื่อที่ Server จะได้ทำงานได้ตรงตามที่ต้องการ ปกติที่จะเจอกันก็ GET, POST, PUT ตามแต่ประเภทของการขอข้อมูลครับ ซึ่งตอนออกแบบ Server ต้องออกแบบว่าการเข้าถึงข้อมูลแต่ละแบบจะให้ใช้ Method แบบไหน
  5. Request Body หรือ Payload เป็นข้อมูลที่เอาไว้ระบุว่าคำสั่งขอข้อมูลนั้นๆมีรายละเอียดอะไรบ้าง อ่านดูแล้วเหมือน Query String ซึ่งปกติจะใช้กับแบบ GET
    ดังนั้นตัว Request Body เนี่ยจะได้ใช้ในการ Request แบบ POST/PUT

ตัวอย่าง…HTTP Request แบบดิบๆ

POST h ttps://play.google.com/log?format=json HTTP/1.1
Host: play.google.com
Connection: keep-alive
Content-Length: 417
accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
content-type: application/x-www-form-urlencoded;charset=UTF-8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: HSID=AiNeRb8SXTipvwqNT; SSID=AUnId0mBjkh8FuXrP;

[[1,null,null,null,null,null,null,null,[“en-US”,”chrome”,”51.0.2704.103″,”22.0.0″],null,[null,”10.0″,3,null,”en-TH”,2]],78,[[“1469717946642″,null,[],null,null,null,null,”[null,null,null,null,null,null,null,null,null,null,null,[[null,1,null,null,null,null,243,2051499711]],null,null,[1600,900],null,null,null,null,null,null,null,null,[]]”,null,null,null,null,null,null,null,null,null,null,null,[]]],”1469717946643″,[]]

สีแดง คือ Method/Verb
สีส้ม คือ URL
สีเขียว คือ Version ของ HTTP ที่ใช้ในการ request
สีม่วง คือ Headers
สีน้ำเงิน คือ Cookie
สีชมพู คือ Request Body

HTTP Response

คือการส่งข้อมูลที่ทาง Server นั้นตอบรับกลับไปยัง Client ตามที่ได้ขอมา

Client <== ตอบรับ === Server

ส่วนประกอบสำคัญของ HTTP Response

  1. HTTP Status Code ซึ่งเป็นรหัสบอกสถานะว่า การ Request ครั้งนั้นได้รับการตอบรับเป็นอย่างไร
  2. HTTP Response Headers เป็นข้อมูลเพิ่มเติมที่แนบมาโดย Server เช่น ข้อมูลมีขนาดเท่าไหร่ เป็นข้อมูลประเภทไหน
  3. Response Body เป็นตัวเนื้อความของข้อมูลจริงๆที่ Server นั้นตอบกลับมาที่ Client

ตัวอย่าง… HTTP Response แบบดิบๆ

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://www.google.co.th
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Playlog-Web
Content-Type: text/plain; charset=UTF-8
Date: Thu, 28 Jul 2016 14:59:04 GMT
Server: Playlog
Cache-Control: private
Expires: Thu, 28 Jul 2016 14:59:04 GMT
Content-Length: 47

[“900000″,null,[null,”2570847921467975139”],[]]

สีเขียว คือ Version ของ HTTP ที่ใช้ในการ request
สีส้ม คือ Status Code ซึ่ง 200 คือสำเร็จ (OK)

สีม่วง คือ Response Headers
สีชมพู คือ Response Body

มาถึงตรงนี้แล้วทุกคนก็คงเข้าใจพื้นฐานหลักๆของ HTTP แล้วนะครับ (y)
แล้วพอทราบมั้ยครับว่าการกด Link บนเวปหรือการพิมพ์ URL เป็นการ Request แบบไหน 🙂

 

3 thoughts on “HTTP แบบพื้นฐานสุดๆ”

Leave a comment