ความแตกต่างในการใช้งานของ GET และ POST

การรับข้อมูลที่ส่งมาจากฟอร์ม Form นั้น มีวิธีการส่งอยู่ 2 แบบนั่นคือ แบบ GET กับแบบ POST แต่เป็นวิธีการส่งข้อมูลให้กับ server ทั้งคู่ดังนั้นเมื่อเริ่มศึกษาการเขียนเว็บไซต์คนส่วนใหญ่จะสับสนถึงความแตกต่างในการใช้งานระหว่าง GET และ POST ว่าควรใช้งานในลักษณะใดซึ่งสามารถสรุปได้สั้นๆ ดังนี้

  • GET ใช้สำหรับรับการดึงข้อมูลจากฐานข้อมูลของเว็บไซต์มาแสดงผล
  • POST ใช้สำหรับการเพิ่มหรือเปลี่ยนแปลงข้อมูลต่างๆที่อยู่ในฐานข้อมูลของเว็บไซต์

นอกจากนี้ยังมีรายละเอียดปลีกย่อยต่างๆเพิ่มเติมที่จะกล่าวถึงต่อไปดังนี้

เมื่อไรถึงต้องใช้ GET

หากกระบวนการทำงานของฟอร์มถูกเรียกใช้งานซ้ำๆแล้วแน่ใจว่าเว็บไซต์ยังคงให้ผลลัพธ์เหมือนเดิมแล้วให้ใช้  GET เนื่องจากไม่ส่งผลกับการค้นหาข้อมูลในฐานข้อมูลเนื่องจากข้อมูลที่ถูกเรียกใช้จะถูกเก็บไว้ในแคชของบราวเซอร์นั่นเอง

ลักษณะเฉพาะของ GET:
  • ใช้ GET กับข้อมูลที่ปลอดภัยกับเว็บไซต์เช่น คำที่ใช้ในการค้นหาข้อมูลบนเว็บไซต์
  • การส่งแบบ GET สามารถเก็บไว้ในแคช (Cache) ของบราวเซอร์ได้พื่อลดจำนวนข้อมูลที่ใช้ในการติดต่อกับเซอร์เวอร์ดังนี้ เมื่อมีการเรียกใช้หน้าเว็บเพจตัวบราวเซอร์จะทำการตรวจสอบว่าเคยมีการเรียกข้อมูลนี้มาก่อนหน้าหรือไม่ ถ้ามีการเรียกใช้มาแล้วบราวเซอร์จะทำการเรียกเอาข้อมูลที่ถูกเรียกมาแล้วจากแคช ของบราวเซอร์นั้นๆ ตัวอย่างเช่น IE ข้อมูลแคชจะอยู่ใน Temporary Internet Files มาแสดงแทนโดยที่ไม่ต้องไปร้องขอเอาจากเซอร์เวอร์อีก ซึ่งทำให้หน้าเว็บเพจนั้นๆสามารถทำงานได้รวดเร็วขึ้น
  • การส่งแบบ GET จะถูกเก็บไว้ใน browser history ซึ่งหมายถึงผู้ใช้สามารถเข้าถึงหน้าเว็บเพจได้จากหน้าประวัติการเข้าชมของเว็บบราวเซอร์ตัวนั้นๆ
  • การส่งแบบ GET ทำให้ผู้ใช้สามารถทำ bookmark ได้ซึ่งถือว่าเป็นผลดีกับเว็บไซต์เนื่องจากช่วยให้ผู้เข้าชมสามารถสร้างทางลัดในการเข้าเว็บไซต์ของตัวเองได้
  • การส่งแบบ GET ทำให้ผู้ใช้สามารถเจาะการทำงานในหน้านั้นได้เนื่องจากมองเห็นพารามิเตอร์ต่างๆปรากฏออกมาที่ Address bar ดังนั้นสำหรับข้อมูลที่มีความสำคัญต่อเว็บไซต์จะไม่เลือกใช้การใช้งาน GET แต่จะใช้ POST แทน ตัวอย่างเช่นเมื่อมีการใช้ GET เพื่อส่งข้อมูลไปยังหน้าต่อไปจากการกรอกข้อมูลใน form ข้อมูลทั้งหมดจะถูกส่งไปเป็น URL เดียวทำให้สามารถใช้งานผ่าน hyperlink หรือ bookmark ได้โดยไม่ต้องกรอกฟอร์มทุกครั้ง

ตัวอย่างการส่งและรับข้อมูลด้วย GET

หน้ากรอกข้อมูลด้วย form

ในการส่งข้อมูลแบบ GET นั้น Form ที่ส่งข้อมูลมา จะต้องกำหนดด้วย method=”get”

<form action="get_target.php" method="get">

Name: <input type="text" name="name" />

Age: <input type="text" name="surname" />

<input type="submit" />

</form>

หน้ารับข้อมูลจาก form

ไฟล์ PHP ที่รับข้อมูลที่ส่งมาจาก Form มีการกำหนด action ไปที่ไฟล์ get_target.php หมายความว่าเมื่อผู้ใช้กดปุ่ม submit แล้วข้อมูลทั้งหมดจะถูกส่งไปยังไฟล์ที่ชื่อว่า get_target.php

การรับข้อมูลแบบ GET ในภาษา PHP จะใช้ตัวแปร $_GET ในการรับข้อมูลซึ่งมีโค้ดทำงานภายในดังนี้

<?php

Welcome <?php echo $_GET["name"]."&nbsp ". $_GET["surname"]; ?>

?>

ตัวอย่าง URL ที่ถูกส่งไปโดย GET

http://www.devxco.com/get_target.php?name=test&surname=man

เมื่อไรถึงต้องใช้ POST

เมื่อกระบวนการในการประมวลผลมีการเปลี่ยนแปลงข้อมูลในฐานข้อมูลให้เลือกใช้  POST

  • ใช้ POST เมื่อข้อมูลที่ต้องการส่งมีจำนวนมาก หรือเป็นข้อมูลที่สำคัญและต้องการปกปิด หรือทำการส่งข้อมูลบนโปรโตคอล HTTPS ในบางบราวเซอร์เช่น Internet Explorer ได้กำหนดจำนวนตัวอักษรมากสุดที่สามารถส่งได้เมื่อใช้ GET ซึ่งส่งผลให้ข้อมูลที่ส่งไปถูกตัดทิ้งทำให้เกิดความผิดพลาดได้

พิจาณาในการใช้ POST เมื่อมีลักษณะการทำงานต่อไปนี้:

  • ใช้ POST กับข้อมูลที่ต้องการให้เป็นความลับเช่น password
  • ใช้กับข้อมูลที่ต้องการนำไปเพิ่มหรือเปลี่ยนแปลงข้อมูลในฐานข้อมูลของเว็บไซต์
  • การส่งข้อความในกระทู้ จดหมายข่าว การเขียนบทความเป็นต้น
  • มีการส่งข้อมูลเป็นกลุ่มเช่น ข้อมูลที่ได้จากฟอร์ม เพื่อทำการเพิ่มหรือปรับปรุงข้อมูลในฐานข้อมูล

ตัวอย่างการส่งข้อมูลแบบ POST

หน้ากรอกข้อมูลด้วย form

ในการส่งข้อมูลแบบ POST นั้น Form ที่ส่งข้อมูลมา จะต้องกำหนด method=”post”

<form action="post_target.php" method="post">

Name: <input type="text" name="name" />

Age: <input type="text" name="surname" />

<input type="submit" />

</form>

หน้ารับข้อมูลจาก form

ไฟล์ PHP ที่รับข้อมูลที่ส่งมาจาก Form มีการกำหนด action ไปที่ไฟล์ post_target.php หมายความว่าเมื่อผู้ใช้กดปุ่ม submit แล้วข้อมูลทั้งหมดจะถูกส่งไปยังไฟล์ที่ชื่อว่า post_target.php

การรับข้อมูลแบบ POST ในภาษา PHP จะใช้ตัวแปร $_POST ในการรับข้อมูลซึ่งมีโค้ดทำงานภายในดังนี้

<?php

Welcome <?php echo $_POST["name"]."&nbsp ".$_POST["surname"]; ?>

?>

ตัวอย่าง URL ที่ถูกส่งไปโดย POST

http://www.devxco.com/post_target.php

จะสังเกตุได้ว่าเมื่อมีการส่งข้อมูลแบบ POST จะไม่มีพารามิเตอร์ใดๆของฟอร์มถูกแนบไปกับ URL