มีความแตกต่าง 5 ประการในแบบฟอร์มรับโพสต์ในบทช่วยสอน asp คำขอและแบบฟอร์ม HTTP ได้รับการแนะนำแยกกัน เพื่อนที่ต้องการสามารถเรียนรู้เกี่ยวกับความแตกต่างห้าประการต่อไปนี้ในแบบฟอร์มการส่งโพสต์รับในบทช่วยสอน asp
มีความแตกต่าง 5 ข้อระหว่างวิธีการรับและโพสต์
1. Get คือการรับข้อมูลจากเซิร์ฟเวอร์ และโพสต์คือการส่งข้อมูลไปยังเซิร์ฟเวอร์
2. รับเพิ่มคิวข้อมูลพารามิเตอร์ไปยัง URL ที่ชี้โดยแอตทริบิวต์ ACTION ของแบบฟอร์มที่ส่งค่าจะสอดคล้องกับแต่ละฟิลด์ในรูปแบบหนึ่งต่อหนึ่งและสามารถเห็นได้ใน URL โพสต์ใช้กลไกการโพสต์ HTTP เพื่อวางแต่ละฟิลด์ในแบบฟอร์มและเนื้อหาใน HTML HEADER และส่งไปยังที่อยู่ URL ที่ชี้โดยแอตทริบิวต์ ACTION ผู้ใช้จะไม่เห็นกระบวนการนี้
3. สำหรับวิธีการรับ ฝั่งเซิร์ฟเวอร์ใช้ Request.QueryString เพื่อรับค่าของตัวแปร สำหรับวิธีการโพสต์ ฝั่งเซิร์ฟเวอร์ใช้ Request.Form เพื่อรับข้อมูลที่ส่ง
4. จำนวนข้อมูลที่ถ่ายโอนโดย get มีขนาดเล็กและไม่สามารถมีขนาดใหญ่กว่า 2KB ปริมาณข้อมูลที่ส่งทางไปรษณีย์มีขนาดค่อนข้างใหญ่ และโดยทั่วไปจะไม่จำกัดตามค่าเริ่มต้น แต่ตามทฤษฎี จำนวนสูงสุดคือ 80KB ใน IIS4 และ 100KB ใน IIS5
5. ความปลอดภัยของ get ต่ำมาก และความปลอดภัยของโพสต์ก็สูง
คำขอ HTTP: ความแตกต่างระหว่างวิธี GET และ POST
HTTP กำหนดวิธีการโต้ตอบกับเซิร์ฟเวอร์ที่แตกต่างกัน วิธีการพื้นฐานที่สุดคือ GET และ POST อันที่จริง GET นั้นเหมาะสมกับคำขอส่วนใหญ่ ในขณะที่ POST สงวนไว้สำหรับการอัปเดตไซต์เท่านั้น ตามข้อกำหนด HTTP นั้น GET ใช้สำหรับการดึงข้อมูลและควรปลอดภัยและเป็นค่าเดิม ปลอดภัยหมายความว่าการดำเนินการนั้นถูกใช้เพื่อรับข้อมูลแทนที่จะแก้ไข กล่าวอีกนัยหนึ่ง โดยทั่วไปคำขอ GET ไม่ควรจะมีผลข้างเคียง Idempotent หมายความว่าคำขอหลายรายการไปยัง URL เดียวกันควรส่งคืนผลลัพธ์เดียวกัน คำจำกัดความที่สมบูรณ์ไม่เข้มงวดเท่าที่ควร โดยพื้นฐานแล้ว เป้าหมายคือเมื่อผู้ใช้เปิดลิงก์ เธอสามารถมั่นใจได้ว่าทรัพยากรไม่เปลี่ยนแปลงจากมุมมองของเธอ ตัวอย่างเช่น หน้าแรกของเว็บไซต์ข่าวได้รับการอัปเดตอยู่ตลอดเวลา แม้ว่าคำขอที่สองจะส่งกลับชุดข่าวที่แตกต่างกัน การดำเนินการยังคงถือว่าปลอดภัยและเป็นค่าเดิม เนื่องจากจะส่งกลับข่าวปัจจุบันเสมอ ในทางกลับกัน คำขอ POST ไม่ใช่เรื่องง่าย POST แสดงถึงคำขอที่อาจเปลี่ยนแปลงทรัพยากรบนเซิร์ฟเวอร์ ยังคงใช้ไซต์ข่าวเป็นตัวอย่าง คำอธิบายประกอบของผู้อ่านในบทความควรใช้ผ่านการร้องขอ POST เนื่องจากไซต์จะแตกต่างออกไปหลังจากส่งคำอธิบายประกอบแล้ว (เช่น คำอธิบายประกอบปรากฏด้านล่างบทความ)
เมื่อส่งแบบฟอร์ม หากไม่ได้ระบุวิธีการ ค่าเริ่มต้นจะเป็นคำขอ GET และข้อมูลที่ส่งในแบบฟอร์มจะถูกผนวกเข้ากับ URL โดยแยกจาก URL ด้วย ? อักขระตัวอักษรและตัวเลขจะถูกส่งตามที่เป็นอยู่ แต่ช่องว่างจะถูกแปลงเป็นเครื่องหมาย + และสัญลักษณ์อื่นๆ จะถูกแปลงเป็น %XX โดยที่ XX คือค่า ASCII (หรือ ISO Latin-1) ของสัญลักษณ์ในรูปแบบเลขฐานสิบหก ข้อมูลที่ส่งโดยคำขอ GET จะถูกวางไว้ในส่วนหัวโปรโตคอลคำขอ HTTP ในขณะที่ข้อมูลที่ส่งโดย POST จะถูกวางไว้ในข้อมูลเอนทิตี ข้อมูลที่ส่งโดย GET สามารถมีขนาดสูงสุดได้เพียง 1,024 ไบต์เท่านั้น ในขณะที่ POST ไม่มีขีดจำกัดนี้
การใช้ post และ get in form ต่างกันอย่างไร?
ในแบบฟอร์มคุณสามารถใช้โพสต์หรือรับ ล้วนเป็นคุณค่าทางกฎหมายของวิธีการทั้งสิ้น อย่างไรก็ตาม มีความแตกต่างอย่างน้อยสองประการในการใช้โพสต์และรับเมธอด:
1. วิธีการรับส่งผ่านอินพุตของผู้ใช้ผ่านการร้องขอ URL วิธีการ Post ใช้รูปแบบอื่น
2. เมื่อส่งในโหมดรับ คุณต้องใช้ Request.QueryString เพื่อรับค่าของตัวแปร เมื่อส่งในโหมดโพสต์ คุณต้องเข้าถึงเนื้อหาที่ส่งผ่าน Request.Form
ศึกษาโค้ดด้านล่างอย่างละเอียด คุณสามารถเรียกใช้เพื่อให้เข้าใจได้:
รหัส
ต่อไปนี้เป็นเนื้อหาที่ยกมา:
<!--ข้อแตกต่างเพียงอย่างเดียวระหว่างทั้งสองแบบฟอร์มคือแอตทริบิวต์ Method-->
คัดลอกรหัสรหัสดังต่อไปนี้:
<FORM ACTION=getpost.php บทช่วยสอน METHOD=get>
<INPUT TYPE=text NAME=ข้อความ VALUE=สวัสดีชาวโลก></INPUT>
<ประเภทอินพุต=ส่ง VALUE=วิธีการ=รับ></INPUT>
</รูปแบบ>
<บีอาร์>
<แบบฟอร์มการดำเนินการ=getpost.php วิธี=โพสต์>
<INPUT TYPE=text NAME=ข้อความ VALUE=สวัสดีชาวโลก></INPUT>
<INPUT TYPE=ส่ง VALUE=Method=Post></INPUT>
</รูปแบบ>
<? ถ้า Request.QueryString(Text) <> แล้ว ?>
สตริงที่ส่งผ่านเมธอด get คือ: <B><?= Request.QueryString(Text) ?></B><BR>
<? สิ้นสุดถ้า ?>
<? ถ้า Request.Form(Text) <> แล้ว ?>
สตริงที่ส่งผ่านเมธอด Post คือ: <B><?= Request.Form(Text) ?></B><BR>
<? สิ้นสุดถ้า ?>
แสดงให้เห็น
บันทึกโค้ดด้านบนเป็น getpost.asp แล้วรัน ขั้นแรกให้ทดสอบวิธีการโพสต์ ในขณะนี้ URL ของเบราว์เซอร์ไม่เปลี่ยนแปลง และผลลัพธ์ที่ส่งคืนคือ:
สตริงที่ส่งผ่านเมธอด Post คือ: Hello World
จากนั้นการทดสอบจะถูกส่งโดยใช้วิธีการรับ โปรดทราบว่า URL ของเบราว์เซอร์จะกลายเป็น:
http://localhost/general/form/getpost.php?Text=Hello+World
และผลลัพธ์ที่ได้กลับมาคือ :
สตริงที่ส่งผ่านเมธอด get คือ: Hello World
สุดท้าย ให้ส่งผ่านวิธีการโพสต์ และ URL ของเบราว์เซอร์ยังคงเป็น:
http://localhost/general/form/getpost.php?Text=Hello+World
และผลลัพธ์ที่ส่งคืนจะกลายเป็น :
สตริงที่ส่งผ่านเมธอด get คือ: Hello World
สตริงที่ส่งผ่านเมธอด Post คือ: Hello World
คำใบ้
การส่งข้อมูลด้วยวิธีรับอาจทำให้เกิดปัญหาด้านความปลอดภัย ตัวอย่างเช่น หน้า Landing Page เมื่อส่งข้อมูลด้วยวิธี get ชื่อผู้ใช้และรหัสผ่านจะปรากฏที่ URL ถ้า:
1. เบราว์เซอร์สามารถแคชหน้าเข้าสู่ระบบได้
2. ผู้อื่นสามารถเข้าถึงเครื่องของลูกค้าได้
จากนั้นผู้อื่นสามารถอ่านหมายเลขบัญชีและรหัสผ่านของลูกค้าจากประวัติของเบราว์เซอร์ได้ ดังนั้น ในบางกรณี วิธีการรับอาจทำให้เกิดปัญหาด้านความปลอดภัยร้ายแรงได้
คำแนะนำ
ในแบบฟอร์มแนะนำให้ใช้วิธีโพสต์