หน้าแรก > คุย Linux > โปรโตคอล http

โปรโตคอล http

มิถุนายน 7, 2011 ใส่ความเห็น Go to comments

เอชทีทีพี (HyperText Transfer Protocol: HTTP) คือโพรโทคอลในระดับชั้นโปรแกรมประยุกต์เพื่อการแจกจ่ายและการทำงานร่วมกันกับสารสนเทศของสื่อผสม ใช้สำหรับการรับทรัพยากรที่เชื่อมโยงกับภายนอก


เอชทีทีพีเป็นมาตรฐานในการร้องขอและการตอบรับระหว่างเครื่องลูกข่ายกับเครื่องแม่ข่าย ซึ่งเครื่องลูกข่ายคือผู้ใช้ปลายทาง (end-user) และเครื่องแม่ข่ายคือเว็บไซต์ เครื่องลูกข่ายจะสร้างการร้องขอเอชทีทีพีผ่านทางเว็บเบราว์เซอร์ เว็บครอว์เลอร์ หรือเครื่องมืออื่น ๆ ที่จัดว่าเป็น ตัวแทนผู้ใช้ (user agent) ส่วนเครื่องแม่ข่ายที่ตอบรับ ซึ่งเก็บบันทึกหรือสร้าง ทรัพยากร (resource) อย่างเช่นไฟล์เอชทีเอ็มแอลหรือรูปภาพ จะเรียกว่า เครื่องให้บริการต้นทาง (origin server) ในระหว่างตัวแทนผู้ใช้กับเครื่องให้บริการต้นทางอาจมีสื่อกลางหลายชนิด อาทิพร็อกซี เกตเวย์ และทุนเนล เอชทีทีพีไม่ได้จำกัดว่าจะต้องใช้ชุดเกณฑ์วิธีอินเทอร์เน็ต (TCP/IP) เท่านั้น แม้ว่าจะเป็นการใช้งานที่นิยมมากที่สุดบนอินเทอร์เน็ตก็ตาม โดยแท้จริงแล้วเอชทีทีพีสามารถ “นำไปใช้ได้บนโพรโทคอลอินเทอร์เน็ตอื่น ๆ หรือบนเครือข่ายอื่นก็ได้” เอชทีทีพีคาดหวังเพียงแค่การสื่อสารที่เชื่อถือได้ นั่นคือโพรโทคอลที่มีการรับรองเช่นนั้นก็สามารถใช้งานได้
ปกติเครื่องลูกข่ายเอชทีทีพีจะเป็นผู้เริ่มสร้างการร้องขอก่อน โดยเปิดการเชื่อมต่อด้วยเกณฑ์วิธีควบคุมการขนส่งข้อมูล (TCP) ไปยังพอร์ตเฉพาะของเครื่องแม่ข่าย (พอร์ต 80 เป็นค่าปริยาย) เครื่องแม่ข่ายเอชทีทีพีที่เปิดรอรับอยู่ที่พอร์ตนั้น จะเปิดรอให้เครื่องลูกข่ายส่งข้อความร้องขอเข้ามา เมื่อได้รับการร้องขอแล้ว เครื่องแม่ข่ายจะตอบรับด้วยข้อความสถานะอันหนึ่ง ตัวอย่างเช่น “HTTP/1.1 200 OK” ตามด้วยเนื้อหาของมันเองส่งไปด้วย เนื้อหานั้นอาจเป็นแฟ้มข้อมูลที่ร้องขอ ข้อความแสดงข้อผิดพลาด หรือข้อมูลอย่างอื่นเป็นต้น
ข้อความร้องขอประกอบด้วยสิ่งต่อไปนี้
ข้อความร้องขอ
บรรทัดแรก ขึ้นต้นเป็นคำสั่งร้องขอ และเส้นทางไดเรกทอรีของแฟ้มที่ร้องขอ ตามด้วยรุ่นของ HTTP ตัวอย่างเช่น GET /images/logo.gif HTTP/1.1
บรรทัดต่อๆ ไปที่ไม่ใช่บรรทัดว่าง เรียกว่าเป็น ส่วนหัว (header) เป็นเมทาดาตาต่าง ๆ ประกอบการร้องขอ ตัวอย่างเช่น Accept-Language: en
บรรทัดว่าง เพื่อแบ่งแยกระหว่างส่วนหัวกับเนื้อหา
บรรทัดต่อๆ ไป เป็นเนื้อหาข้อมูล ซึ่งบางคำสั่งอาจไม่จำเป็นต้องใช้ส่วนนี้
แต่ละบรรทัดจะต้องลงท้ายด้วย CRLF (อักขระปัดแคร่ตามด้วยอักขระป้อนบรรทัด เหมือนการกดปุ่ม Enter ในวินโดวส์) บรรทัดที่ว่างจะมีเพียงแค่ CRLF เท่านั้นโดยไม่มีอักขระช่องว่างอยู่เลย สำหรับรุ่น HTTP/1.1 ส่วนหัว Host: จำเป็นต้องมีเสมอ แต่ส่วนหัวอื่น ๆ ไม่จำเป็นต้องมีก็ได้

บรรทัดคำสั่งที่มีเพียงเส้นทางไดเรกทอรี (ไม่มีชื่อแฟ้ม) ก็เป็นที่ยอมรับโดยเครื่องแม่ข่าย เพื่อรักษาความเข้ากันได้กับโปรแกรมตัวแทนรุ่นเก่าก่อนที่จะมีข้อกำหนดของ HTTP/1.0 ใน RFC 1945 ส่วน HTTP/1.1 ได้กำหนดไว้

คำสั่งร้องขอ

เอชทีทีพีได้กำหนดคำสั่งร้องขอไว้แปดคำสั่ง (หรือเรียกว่าวิธีการร้องขอ บางครั้งอาจเรียกว่าเป็น “กริยา”) แสดงการกระทำที่ต้องการ เพื่อที่จะดำเนินการกับทรัพยากรที่ถูกระบุ สิ่งที่ทรัพยากรนั้นนำเสนอ ไม่ว่าเป็นข้อมูลที่มีอยู่ก่อนหรือสร้างขึ้นมาแบบพลวัตก็ตาม จะขึ้นอยู่กับการนำไปใช้ของเครื่องแม่ข่าย ซึ่งบ่อยครั้งทรัพยากรมักจะสอดคล้องกับไฟล์ หรือผลลัพธ์ส่งออกจากโปรแกรมข้างเคียงในเครื่องแม่ข่ายนั้น เครื่องให้บริการเอชทีทีพีจะต้องสามารถใช้คำสั่ง GET และ HEAD ได้เป็นอย่างน้อย

HEAD
ร้องขอการตอบรับจากทรัพยากรที่ระบุ คล้ายกับ GET แต่จะไม่มีส่วนเนื้อหาที่ร้องขอกลับมา คำสั่งนี้ใช้ประโยชน์ในการตรวจสอบข้อมูลส่วนหัวของการตอบรับ โดยไม่จำเป็นต้องส่งเนื้อหาเต็มมาทั้งหมด
GET
ร้องขอการนำเสนอจากทรัพยากรที่ระบุ คำสั่งนี้ไม่ควรใช้กับการดำเนินการที่อาจทำให้เกิดผลข้างเคียง เช่นการจัดการในเว็บแอปพลิเคชัน เหตุผลหนึ่งคือคำสั่ง GET มักจะถูกใช้อย่างไม่มีกฎเกณฑ์โดยอินเทอร์เน็ตบอตและเว็บครอว์เลอร์ ซึ่งไม่ควรพิจารณาให้การร้องขอของบอตและครอว์เลอร์ส่งผลกระทบต่อทรัพยากรในเว็บ

POST

ส่งข้อมูลไปยังทรัพยากรที่ระบุเพื่อให้นำไปประมวลผล โดยเฉพาะข้อมูลที่ส่งมาจากฟอร์มเอชทีเอ็มแอล ข้อมูลที่ส่งจะถูกบรรจุอยู่ในเนื้อหาของการร้องขอด้วย สิ่งนี้อาจทำให้เกิดการสร้างทรัพยากรใหม่ หรือการปรับปรุงทรัพยากรที่มีอยู่ หรือทั้งสองกรณี
PUT
อัปโหลดการนำเสนอของทรัพยากรที่ระบุ
DELETE
ลบทรัพยากรที่ระบุ
TRACE
ส่งข้อมูลร้องขอกลับมา เครื่องลูกข่ายจะเห็นว่ามีข้อมูลอะไรบ้างที่สื่อกลางเพิ่มหรือเปลี่ยนแปลงข้อความร้องขอก่อนไปถึงทรัพยากรปลายทาง
OPTIONS
คืนค่าเป็นรายชื่อคำสั่งเอชทีทีพีที่เครื่องแม่ข่ายนั้นรองรับสำหรับทรัพยากรที่ระบุ สิ่งนี้สามารถใช้ตรวจสอบฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์ได้โดยใส่ “*” แทนที่การระบุทรัพยากร
CONNECT
แปลงการเชื่อมต่อของการร้องขอไปเป็นทุนเนล TCP/IP แบบโปร่งใส มักใช้สำหรับแปลงการเชื่อมต่อที่เข้ารหัสแบบ SSL ให้เดินทางผ่านพร็อกซีที่ไม่มีการเข้ารหัสได้ง่ายขึ้น

คำสั่งที่ปลอดภัย

คำสั่งของเอชทีทีพีบางคำสั่งมีการกำหนดว่าเป็นคำสั่งที่ปลอดภัย เช่น HEAD, GET, OPTIONS, TRACE ซึ่งหมายความว่าคำสั่งเหล่านี้มีขึ้นเพื่อการรับข้อมูลเพียงอย่างเดียวและไม่ควรเปลี่ยนสถานะของเครื่องแม่ข่าย หรืออีกนัยหนึ่งคือคำสั่งเหล่านี้ไม่ควรทำให้เกิดผลกระทบข้างเคียง เว้นแต่ผลกระทบนั้นไม่สร้างความเสียหายอาทิ การบันทึกไฟล์ล็อก การเก็บแคช การบริการเว็บแบนเนอร์ หรือการเพิ่มตัวนับผู้เข้าชม การร้องขอแบบ GET แบบไม่มีกฎเกณฑ์โดยอินเทอร์เน็ตบอตและเว็บครอว์เลอร์ จึงยังคงถือว่าปลอดภัยอยู่

ในทางตรงข้าม คำสั่ง POST, PUT, DELETE เป็นการกระทำเพื่อให้เกิดผลกระทบต่อเครื่องแม่ข่าย หรือเกิดผลกระทบภายนอกเช่นทำให้เกิดธุรกรรมทางการเงิน หรือการส่งอีเมลเป็นต้น จึงเป็นคำสั่งที่ไม่ปลอดภัย คำสั่งเช่นนี้ปกติจะไม่ถูกใช้โดยอินเทอร์เน็ตบอตและเว็บครอว์เลอร์ ซึ่งทำงานโดยไม่พิจารณาสถานะของเครื่องแม่ข่าย เพราะอาจทำให้ทรัพยากรเสียหายได้

หมวดหมู่:คุย Linux
  1. ยังไม่มีความเห็น
  1. No trackbacks yet.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: