สองอาทิตย์นี้ต้องนั่งดู 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 โดยทั่วไปก็ได้แก่
- GET ใช้สำหรับขอข้อมูลตาม uri ที่ระบุ
- POST ใช้สำหรับอธิบายข้อมูลตาม uri ที่ระบุ (เหมือนเราต้องการตอบหัวข้อใน forums ต่างๆ)
สองคำสั่งนี้คงคุ้นเคยกันอย่างดีสำหรับคนที่เขียนเว็บทั่วไป เพราะเจอใน tag ที่ระบุว่าจะส่งข้อมูลไปให้ server อย่างไร แต่ HTTP ยังมีคำสั่งมากกว่านี้อีกคือ
- OPTIONS ไว้สำหรับดูว่า uri ที่ระบุมานั้นสามารถใชคำสั่งอะไรได้บ้าง
- PUT สำหรับสั่งให้ server เก็บข้อมูลที่ส่งไปให้ (คล้ายๆ POST แต่ความหมายคนละอย่างเลยหละ ใช้ก็คนละอย่างด้วย)
- HEAD ใช้สำหรับดูข้อมูลส่วนหัวของ uri ที่ระบุ โดยไม่ต้องการได้เนื้อหา (เหมือนคำสั่ง GET ที่ตัดเอาเนื้อหาออก)
- DELETE ใช้สำหรับลบข้อมูลที่ตำแหน่ง uri
สี่คำสั่งนี้ผมเจอเพราะต้องใช้ใน WebDAV ด้วย ซึ่งที่จริงแล้วยังมีอีกสองคำสั่ง แต่ยังไม่เคยใช้ก็เลยอธิบายไม่ได้ว่ามันเป็นยังไงกันแน่ (จะอ่านแล้วแปลมาก็ได้ แต่เนื่องจากอ่อนอังกฤษ ไม่แปลจะดีกว่า ) คือ
- CONNECT
- 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 เหล่านี้หาข้อมูลในไทยยากจริงๆ เหมือนไม่ค่อยมีคนสนใจ หรือเพราะตัวอื่นมันดังกว่าและพวกนี้ก็ใช้กันอยูุ่ทุกวันจนไม่รู้สึกว่ามันเป็นอะไรแปลกใหม่แล้วหว่า ไม่เป็นไรบันทึกไว้ตรงนี้แหละ เผื่อมีคนเจอปัญหา หาข้อมูลลำบากแบบเดียวกันมั่ง จะได้หาง่ายๆ หน่อย