Hypertext transfer protocol

สองอาทิตย์นี้ต้องนั่งดู WebDAV ว่ามันเป็นยังไง ใช้ยังไง แล้วถ้าจะเอาไปใช้ในจาวาต้องทำอะไรบ้าง แถมด้วยตัวเสริมอีกพอสมควรทั้ง Delta-V, ACL, DASL, Quota ซึ่งแต่ละตัวก็อยู่ต่าง rfc แต่ละ rfc ก็ไม่เล็กอีก เลยไม่ค่อยได้คุยอะไรกับใครเลยช่วงนี้ เห้อ

เอาหละมาเข้าเรื่องดีกว่า จากหัวข้อที่เขียนไว้ว่าจะพูดถึงเรื่อง HTTP แต่ไหงเขียนมามีแต่ WebDAV แต่จริงๆ แล้วมันเกี่ยวข้องกัน เพราะ WebDAV เป็นส่วนขยายต่อของ HTTP และก็เป็นเหตุให้อยากเขียนเรื่องนี้เก็บไว้ก่อนเนื่องจากวันนี้ทั้งวันต้องมาปวดหัวกับ Protocol นี้พอสมควรเลย ทั้งๆ ที่เรียนผ่านมาแล้ว แถมทำ Web server แล้วอีกต่างหาก

Hypertext transfer protocol เป็น Protocol ที่ใช้สำหรับส่งข้อมูลเว็บต่างๆ ในเว็บ server ทั่วไป ตอนนี้มีด้วยกัน 2 รุ่นคือ 1.0 และ 1.1 ข้อแตกต่างนั้นมีอยู่น้อยนิดคือ 1.0 server จะปิดช่องทางที่ใช้ส่งข้อมูลทันทีที่ส่งข้อมูลเสร็จ ดังนั้นหากต้องการขอไฟล์ต่อไป ต้องเริ่มเปิดช่องทางนั้นใหม่แล้วส่งข้อมูลขอไฟล์ไปใหม่… จนกลายเป็นข้อเสียของรุ่นนี้ไปในที่สุดจนต้องมีรุ่น 1.1 ออกตามมา

สำหรับรูปแบบของ Protocol ประกอบไปด้วยสองส่วนคือ ส่วนหัว และ ส่วนเนื้อหา โดย ส่วนเนื้อหานั้นเป็นข้อมูลต่างๆ เช่น ข้อมูลที่ใส่ใน ฟอร์มหน้าเว็บ แต่สำหรับส่วนหัวจะเป็นส่วนที่เก็บคำสั่งที่ใช้บอก server หรือ client ว่าต้องการอะไร หรือเอาอะไรส่งมาให้ สำหรับคำสั่งที่ใช้กันใน client โดยทั่วไปก็ได้แก่

  1. GET ใช้สำหรับขอข้อมูลตาม uri ที่ระบุ
  2. POST ใช้สำหรับอธิบายข้อมูลตาม uri ที่ระบุ (เหมือนเราต้องการตอบหัวข้อใน forums ต่างๆ)

สองคำสั่งนี้คงคุ้นเคยกันอย่างดีสำหรับคนที่เขียนเว็บทั่วไป เพราะเจอใน tag ที่ระบุว่าจะส่งข้อมูลไปให้ server อย่างไร แต่ HTTP ยังมีคำสั่งมากกว่านี้อีกคือ

  1. OPTIONS ไว้สำหรับดูว่า uri ที่ระบุมานั้นสามารถใชคำสั่งอะไรได้บ้าง
  2. PUT สำหรับสั่งให้ server เก็บข้อมูลที่ส่งไปให้ (คล้ายๆ POST แต่ความหมายคนละอย่างเลยหละ ใช้ก็คนละอย่างด้วย)
  3. HEAD ใช้สำหรับดูข้อมูลส่วนหัวของ uri ที่ระบุ โดยไม่ต้องการได้เนื้อหา (เหมือนคำสั่ง GET ที่ตัดเอาเนื้อหาออก)
  4. DELETE ใช้สำหรับลบข้อมูลที่ตำแหน่ง uri

สี่คำสั่งนี้ผมเจอเพราะต้องใช้ใน WebDAV ด้วย ซึ่งที่จริงแล้วยังมีอีกสองคำสั่ง แต่ยังไม่เคยใช้ก็เลยอธิบายไม่ได้ว่ามันเป็นยังไงกันแน่ (จะอ่านแล้วแปลมาก็ได้ แต่เนื่องจากอ่อนอังกฤษ ไม่แปลจะดีกว่า :lol: ) คือ

  1. CONNECT
  2. TRACE

นอกจากคำสั่งเหล่านี้แล้วยังมีส่วนที่ใช้บอกว่าเครื่อง client ที่ส่งคำสั่งเป็นบราวเซฮร์อะไรรุ่นอะไร ส่งจาก ip อะไร มีรหัสที่ใช้สำหรับยืนยันตัวกับ server หรือป่าว มีข้อมูลตามมาด้วยหรือป่าว ขนาดเท่าไหร่ ที่ผมใช้หลักๆ ก็จะมีอยู่สองอย่างคือ ข้อมูลที่ใช้ยืนยันกับ server แบบพื้นฐานกับ ข้อมูลที่บอกว่ามีเนื้อหาอะไรตามมาอีกถัดจากคำสั่งนี้เท่าไหร่ ซึ่งสำคัญพอสมควรสำหรับ WebDAV มาดูทีละอย่างดีกว่า

สำหรับการยืนยันตัวกับ server ประกอบไปด้วย 3 ส่วนคือส่วนที่บอกว่าบรรทัดนี้คือข้อมูลที่ใช้ในการยืนยัน ส่วนที่บอกวิธีการเข้ารหัส และ ข้อมูลที่ใช้ยืนยัน สำหรับวิธีพื้นฐานนั้นการเข้ารหัสจะใช้วิธี Base64 โดยเอา ชื่อและรหัสมาต่อกันโดยมีตัว “:” คั่นไว้เพื่อแบ่ง ตามรูปแบบด้านล่าง

Authorization: BASIC cm9vdDpwYXNzd29yZA==

สำหรับส่วนที่บอกว่าเนื้อหาเป็นอะไรและมีขนาดเท่าไหร่นั้นจำเป็นที่จะต้องบอกหากคำสั่งนั้นเป็นคำสั่งที่ต้องการข้อมูลเพิ่มเติม ซึ่งใน WebDAV จำเป็นสุดๆ เพราะต้องใช้เพื่อเพิ่มคำอธิบายบางอย่างลงไป หรือส่งข้อมูลไปเก็บในฝั่ง server รูปแบบก็ดูตามด้านล่าง

Content-Type: text/xml
Content-Length: 1000

สำหรับฝั่ง server ก็จะตอบกลับมาเป็นรหัสว่าการร้องขอครั้งนั้นถูกต้องหรือไม่ พร้อมแสดงข้อมูลกลับมาด้วยหากคำสั่งถูกต้องแต่เนื่องจากผมขี้เกียจเขียนแล้วหละ ไปดูเพิ่มเติมที่นี่ ดีกว่า

คราวหน้าจะมาเขียน WebDAV เก็บต่อหละ เห้อแค่ฐานมัน HTTP ก็ยาวขนาดนี้แล้ว WebDAV จะขนาดไหนนะเนี๊ยะ แต่ยังไงก็ต้องเขียนเตรียมสำหรับเสนอวันศุกร์อยู่แล้ว เอามาเก็บไว้ที่นี่ด้วยก็คงไม่เสียหายเท่าไหร่หรอก ว่าแต่ข้อมูล Protocol เหล่านี้หาข้อมูลในไทยยากจริงๆ เหมือนไม่ค่อยมีคนสนใจ หรือเพราะตัวอื่นมันดังกว่าและพวกนี้ก็ใช้กันอยูุ่ทุกวันจนไม่รู้สึกว่ามันเป็นอะไรแปลกใหม่แล้วหว่า ไม่เป็นไรบันทึกไว้ตรงนี้แหละ เผื่อมีคนเจอปัญหา หาข้อมูลลำบากแบบเดียวกันมั่ง จะได้หาง่ายๆ หน่อย

About llun

Just a programmer

, , ,