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

หากคุณเป็นผู้เยี่ยมชม วิธีแก้ไขที่ปลอดภัยที่สุดโดยปกติคือหลีกเลี่ยงการรีเฟรชหน้าผลลัพธ์ ตรวจสอบว่าการส่งข้อมูลสำเร็จแล้วหรือไม่ และกลับไปยังแบบฟอร์มเดิมผ่านทางเว็บไซต์แทนที่จะบังคับให้โหลดหน้าเว็บใหม่ หากคุณเป็นเจ้าของเว็บไซต์ วิธีแก้ไขที่ยั่งยืนคือการเปลี่ยนเส้นทางคำขอ POST ที่สำเร็จไปยังหน้า GET ปกติ
อะไรคือสาเหตุที่ทำให้ต้องยืนยันการส่งแบบฟอร์มซ้ำ?
แบบฟอร์ม HTML แบบดั้งเดิมสามารถส่งข้อมูลได้ด้วยเมธอด GET หรือ POST เมธอด POST จะส่งข้อมูลที่ส่งมาในส่วนเนื้อหาของคำขอ และมักใช้เมื่อคำขอเป็นการสร้างหรือเปลี่ยนแปลงบางสิ่งบางอย่าง หากเซิร์ฟเวอร์ตอบกลับเมธอด POST นั้นโดยตรงด้วยหน้าที่คุณกำลังดูอยู่ การรีเฟรชหน้าเว็บหมายถึงการส่งเมธอด POST เดิมซ้ำอีกครั้ง ดังนั้นเบราว์เซอร์จึงแจ้งเตือนคุณก่อนที่จะส่งซ้ำ
นี่แตกต่างจากข้อผิดพลาดการเชื่อมต่อทั่วไป คำเตือนนี้อาจปรากฏขึ้นแม้ว่าการส่งข้อมูลครั้งแรกจะสำเร็จลุล่วงไปด้วยดีก็ตาม ก่อนที่คุณจะส่งคำสั่งซื้อ การชำระเงิน การจอง ความคิดเห็น หรือคำขอความช่วยเหลืออีกครั้ง โปรดตรวจสอบหน้ายืนยัน ใบเสร็จรับเงินทางอีเมล ประวัติบัญชี หรือสัญญาณอื่นๆ ที่แสดงว่าคำขอแรกเสร็จสมบูรณ์แล้ว
วิธีแก้ไขปัญหานี้ในฐานะผู้เยี่ยมชมเว็บไซต์
1. ยกเลิกการโหลดซ้ำและเปิดแบบฟอร์มอีกครั้ง
หากมีข้อความเตือนปรากฏขึ้นทันทีหลังจากกดปุ่มรีเฟรช ให้เลือกยกเลิกแทนที่จะดำเนินการต่อโดยอัตโนมัติ เปิดเว็บไซต์จากเมนู หน้าแรก บุ๊กมาร์ก หรือแท็บใหม่ แล้วกลับไปยังแบบฟอร์ม วิธีนี้จะช่วยหลีกเลี่ยงการส่งคำขอ POST ซ้ำโดยเจตนา
สำหรับข้อความหรือแอปพลิเคชันที่ยาว ให้คัดลอกข้อความที่คุณยังคงพิมพ์อยู่ก่อนที่จะออกจากเว็บไซต์ เนื่องจากเว็บไซต์อาจไม่แสดงข้อความที่คุณพิมพ์ไว้หลังจากเซสชันเปลี่ยนไป

2. ตรวจสอบว่าการส่งข้อมูลครั้งแรกสำเร็จแล้วหรือไม่
ทำเช่นนี้ก่อนที่จะป้อนข้อมูลเดิมซ้ำอีกครั้ง การส่งข้อมูลซ้ำสองครั้งอาจสร้างความคิดเห็น ตั๋ว การจอง หรือการเรียกเก็บเงินซ้ำซ้อน หากเว็บไซต์ไม่มีระบบป้องกันการซ้ำซ้อน หากคุณไม่แน่ใจว่าธุรกรรมที่มีมูลค่าสูงสำเร็จหรือไม่ ให้ใช้ประวัติการสั่งซื้อของเว็บไซต์หรือติดต่อทีมสนับสนุนแทนการคลิกปุ่มส่งซ้ำๆ
3. ล้างข้อมูลเว็บไซต์เฉพาะในกรณีที่แบบฟอร์มค้างอยู่จริงๆ เท่านั้น
คุกกี้และไฟล์แคชที่เสียหายหรือล้าสมัยอาจทำให้บางเว็บไซต์วนลูป สูญเสียเซสชัน หรือโหลดหน้าเว็บเก่า การล้างข้อมูลอาจช่วยได้ในกรณีเหล่านั้น แต่ไม่จำเป็นต้องทำเพียงเพราะคุณรีเฟรชผลลัพธ์ POST แล้ว
ในเบราว์เซอร์ Chrome บนคอมพิวเตอร์ ให้เปิดเมนูจุดสามจุดแล้วเลือก"ลบข้อมูลการท่องเว็บ " Google ได้อธิบายตัวเลือกต่างๆ ในปัจจุบัน รวมถึงคุกกี้/ข้อมูลเว็บไซต์ และรูปภาพ/ไฟล์ที่แคชไว้ ในคู่มือข้อมูลการท่องเว็บของ Chromeการลบคุกกี้อาจทำให้คุณออกจากระบบเว็บไซต์ ดังนั้นให้เลือกขอบเขตที่แคบที่สุดที่ช่วยแก้ปัญหาได้

ใน Firefox คุณสามารถล้างข้อมูลสำหรับเว็บไซต์ปัจจุบันได้จากไอคอนทางด้านซ้ายของแถบที่อยู่ จากนั้นเลือกล้างคุกกี้และข้อมูลเว็บไซต์คำแนะนำเกี่ยวกับข้อมูลเว็บไซต์ของ Mozilla สำหรับ Firefox ยังอธิบายวิธีการลบข้อมูลสำหรับเว็บไซต์เฉพาะหรือทุกเว็บไซต์อีกด้วย
4. หากเกิดปัญหาขึ้นโดยไม่คาดคิด ให้ปิดใช้งานส่วนขยายชั่วคราว
หากแบบฟอร์มกรอกไม่สำเร็จซ้ำๆ โดยที่คุณไม่ได้รีเฟรชหน้าเว็บ ให้ลองตรวจสอบส่วนขยายที่เปลี่ยนแปลงหน้าเว็บหรือการรับส่งข้อมูลเครือข่าย เช่น ตัวบล็อกเนื้อหา เครื่องมือความเป็นส่วนตัว ตัวจัดการสคริปต์ ส่วนขยาย VPN/พร็อกซี หรือตัวช่วยกรอกแบบฟอร์ม ใน Chrome ให้ไปที่เพิ่มเติม > ส่วนขยาย > จัดการส่วนขยายและปิดใช้งานส่วนขยายที่น่าสงสัยชั่วคราวคู่มือการจัดการส่วนขยาย ของ Google จะอธิบายการควบคุมในปัจจุบัน

ใน Firefox ให้เปิดเมนู > ส่วนเสริมและธีม > ส่วนขยายแล้วปิดส่วนขยายทีละตัว Mozilla ยังมีขั้นตอนอย่างเป็นทางการสำหรับการปิดใช้งานส่วนเสริมของ Firefox ด้วย จากนั้น เปิดใช้งานส่วนเสริมที่ไม่เกี่ยวข้องกับปัญหาอีกครั้ง
หากคำเตือนปรากฏเฉพาะบนเว็บไซต์เดียวเท่านั้น
หากเว็บไซต์อื่นๆ ทำงานได้ตามปกติ และคำเตือนนี้ปรากฏขึ้นซ้ำๆ หลังจากการส่งแบบฟอร์มใดแบบฟอร์มหนึ่ง แสดงว่าขั้นตอนการทำงานของแบบฟอร์มบนเว็บไซต์นั้นน่าจะเป็นปัญหาหลัก การเปลี่ยนเบราว์เซอร์อาจช่วยซ่อนอาการในบางกรณี แต่ไม่ได้แก้ไขประวัติการส่งข้อมูล (POST history) ที่อยู่เบื้องหลัง หลีกเลี่ยงการส่งแบบฟอร์มซ้ำๆ และรายงานปัญหาไปยังเจ้าของเว็บไซต์หากจำเป็น
เจ้าของเว็บไซต์: ใช้ POST/Redirect/GET
วิธีมาตรฐานในการป้องกันไม่ให้การส่งแบบฟอร์มสำเร็จกลายเป็นหน้า POST ปัจจุบันของเบราว์เซอร์ คือ รูปแบบ POST/Redirect/GETประมวลผล POST บนเซิร์ฟเวอร์ จากนั้นส่งการเปลี่ยนเส้นทางไปยัง URL ยืนยันแยกต่างหาก การตอบสนอง 303 See Otherจะบอกเบราว์เซอร์ให้ดึงทรัพยากรที่เปลี่ยนเส้นทางด้วย GET โดยเฉพาะ MDN ระบุว่า รูปแบบนี้ช่วยให้ไคลเอ็นต์ดูการยืนยันหลังจาก POST โดยไม่ต้องรีเฟรชหน้าเว็บเพื่อทำซ้ำการทำงานเดิม
POST /contact
HTTP/1.1 303 See Other
Location: /contact/thanks
GET /contact/thanks
โปรดดูเอกสารอ้างอิง MDN 303 See Otherและคู่มือการเปลี่ยนเส้นทาง HTTPสำหรับพฤติกรรมการเปลี่ยนวิธีการ อย่าใช้การเปลี่ยนเส้นทาง 307 สำหรับวัตถุประสงค์นี้เมื่อคุณต้องการให้คำขอที่ตามมากลายเป็น GET เนื่องจาก 307 จะรักษาวิธีการและเนื้อหาเดิมไว้
อย่าเปลี่ยนฟอร์ม POST ทุกฟอร์มเป็น GET เพียงเพื่อระงับคำเตือน GET มีไว้สำหรับดึงข้อมูลและใส่ค่าจากฟอร์มลงใน URL เมื่อใช้กับฟอร์ม HTML ไม่เหมาะสมสำหรับรหัสผ่านหรือการกระทำที่เปลี่ยนแปลงสถานะของเซิร์ฟเวอร์เอกสารเกี่ยวกับการส่งฟอร์ม ของ MDN อธิบายความแตกต่างในทางปฏิบัติระหว่าง GET และ POST ไว้แล้ว
JavaScript fetch()สามารถส่งแบบฟอร์มได้โดยไม่ต้องเปลี่ยนหน้าเว็บทั้งหมด แต่เซิร์ฟเวอร์ก็ควรปกป้องการทำงานที่สำคัญจากการร้องขอซ้ำโดยไม่ตั้งใจ สำหรับแบบฟอร์มหลายหน้าแบบเดิม ๆ แล้ว POST/Redirect/GET ยังคงเป็นวิธีแก้ปัญหาที่ชัดเจนที่สุดสำหรับคำเตือนการรีเฟรชหน้าเว็บ