รหัสการตอบสนอง HTTP ที่ถูกต้องเชิงความหมายสำหรับสถานการณ์นี้จะเป็นสิ่งต้องห้าม 403 :
เซิร์ฟเวอร์เข้าใจคำขอ แต่ปฏิเสธที่จะปฏิบัติตาม การอนุญาตจะไม่ช่วยและไม่ควรทำซ้ำการร้องขอ หากวิธีการร้องขอไม่ได้เป็น HEAD และเซิร์ฟเวอร์ประสงค์ที่จะเปิดเผยต่อสาธารณะว่าทำไมคำขอไม่ได้รับการตอบสนองก็ควรจะอธิบายเหตุผลของการปฏิเสธในเอนทิตี หากเซิร์ฟเวอร์ไม่ต้องการให้ข้อมูลนี้พร้อมใช้งานสำหรับลูกค้าสามารถใช้รหัสสถานะ 404 (ไม่พบ) แทน
(แม้ว่าคำจำกัดความของการตอบสนอง 403 บอกว่า "การอนุญาตจะไม่ช่วย" IMO ควรเข้าใจว่าเป็นการอ้างถึงการรับรองความถูกต้อง HTTP Basic / Digestโดยเฉพาะซึ่งรหัสสถานะ401 ไม่ได้รับอนุญาตควรใช้แทนเนื่องจากคุณไม่ได้ใช้ วิธีการรับรองความถูกต้องอย่างใดอย่างหนึ่ง 403 เป็นรหัสสถานะที่เหมาะสมในกรณีของคุณ)
อย่างไรก็ตามการใช้รหัส 403 สถานะเผยให้เห็น (หรืออย่างน้อยขอนัย) ข้อเท็จจริงที่ว่ามีเป็นหน้าเว็บที่มี URL ที่แม้ว่าเซิร์ฟเวอร์ปฏิเสธที่จะส่งมอบให้ เนื่องจากนี่เป็นสิ่งที่คุณอาจต้องการปกปิดจากผู้บุกรุกที่อาจเกิดขึ้นมาตรฐาน HTTP / 1.1 จะอนุญาตให้ส่งคืนรหัสสถานะ404 ไม่พบแทนอย่างชัดเจน( ให้ความสำคัญ ):
เซิร์ฟเวอร์ไม่พบสิ่งใดที่ตรงกับ Request-URI ไม่มีการบ่งชี้ว่าเงื่อนไขเป็นแบบชั่วคราวหรือถาวร รหัสสถานะ 410 (หายไป) ควรใช้หากเซิร์ฟเวอร์รู้ผ่านกลไกบางอย่างที่สามารถกำหนดค่าภายในได้ว่าทรัพยากรเก่าไม่สามารถใช้งานได้อย่างถาวรและไม่มีที่อยู่สำหรับส่งต่อ
รหัสสถานะนี้มักใช้เมื่อเซิร์ฟเวอร์ไม่ต้องการเปิดเผยสาเหตุที่ทำให้คำขอถูกปฏิเสธหรือเมื่อไม่มีการตอบสนองอื่นใดที่เกี่ยวข้อง
แน่นอนเพื่อให้การปกปิดดังกล่าวมีผลบังคับใช้หน้าข้อผิดพลาด 404 ที่คุณกลับมาจะต้องเหมือนกันกับสิ่งที่คุณส่งคืนสำหรับหน้าจริงที่ไม่มีอยู่จริง มิเช่นนั้นจะหลอกผู้โจมตีที่โง่เง่าที่สุด (หากเป้าหมายของคุณเพียงเพื่อไม่ให้หน้าเว็บอยู่ในดัชนีของ Google การตอบสนอง 403 ก็จะทำได้เช่นกัน)
คำตอบอื่น ๆ ที่เป็นไปได้ที่แนะนำในคำถามของคุณและคำตอบอื่น ๆ คืออะไร?
ตามที่ระบุไว้ก่อนหน้านี้ฉันไม่เชื่อว่าการตอบสนอง 401 เหมาะสมที่นี่ มันอาจใช้งานได้จริงตราบเท่าที่เบราว์เซอร์และเครื่องมือค้นหาส่วนใหญ่จะใช้รหัสตอบกลับ4 xxซีรีย์ใด ๆ ที่ไม่ถูกต้องหรือไม่รู้จักราวกับว่ามันเป็น 404 แต่ก็ยังไม่ถูกต้องตามข้อกำหนด HTTP และไม่มีเหตุผลเชิงปฏิบัติใด ๆ มากกว่า 403 หรือ 404
สำหรับการใช้การเปลี่ยนเส้นทาง 301 (หรือ 302) ไปยังหน้า "ข้อผิดพลาด 404" แยกต่างหากนั่นเป็นวิธีปฏิบัติที่น่ากลัวโดยการสอนแบบ mod_rewrite ที่เลอะเทอะและไม่มีคุณสมบัติการไถ่คืนเมื่อเทียบกับการตอบกลับ 404 โดยตรง:
ผู้เข้าชมสับสนเนื่องจาก URL ที่พวกเขาพยายามเข้าชมนั้นถูกแทนที่ด้วย URL ของหน้าข้อผิดพลาด ดังนั้นพวกเขาจึงเห็นข้อความแจ้งว่าพวกเขามาถึงหน้าเว็บที่ไม่มีอยู่จริง แต่ไม่สามารถระบุได้อย่างชัดเจนว่าหน้าเว็บที่พวกเขาพยายามเข้าชมคืออะไรและไม่สามารถลองกลยุทธ์การกู้คืนเช่นแก้ไขข้อผิดพลาดที่ชัดเจนใน URL หรือคัดลอกและวางลงใน Google หรือเครื่อง Wayback
อาจทำให้เครื่องมือค้นหาสับสนโดยเฉพาะอย่างยิ่งหากหน้า 404 ของคุณไม่ได้รับอนุญาตใน robots.txtหรือหากได้รับการตอบกลับ 200 OK อย่างไม่ถูกต้องแทนที่จะเป็นรหัสสถานะ 404 จริง ( "soft 404" ) อาจทำให้หน้า 404 ของคุณปรากฏในการค้นหา ผลลัพธ์สำหรับคำค้นหาแบบสุ่ม
มันทำให้โหลดเพิ่มจำนวนเล็กน้อย (บนเซิร์ฟเวอร์ของคุณ) เพิ่มเวลาตอบสนองต่อผู้เยี่ยมชมและอาจทำให้เครื่องมือค้นหารวบรวมข้อมูลเว็บไซต์ของคุณช้าลงเนื่องจากทุกคำขอสำหรับหน้าเว็บที่ไม่มีอยู่ (หรือปกปิด) จะเกี่ยวข้องกับ HTTP รอบพิเศษ การเดินทาง
ไม่มีประโยชน์ SEO เนื่องจาก "ลิงก์น้ำผลไม้" จากหน้าเว็บที่เปลี่ยนเส้นทางไปยังหน้าเว็บ 404 นั้นจะสูญหายไป
(แน่นอนว่าหนึ่งในสถานการณ์ที่คุณทำต้องการที่จะใช้ 301 เปลี่ยนเส้นทางแทนการตอบสนองที่ 404 คือเมื่อหน้าจริงได้ย้ายและคุณสามารถเปลี่ยนเส้นทางผู้เข้าชมไปยังสถานที่ที่ถูกต้อง. แต่นั่นไม่ใช่กรณีที่กล่าวถึงที่นี่.)
สุดท้ายผมอยากจะสะท้อนความเชื่อมั่นที่แสดงออกในความคิดเห็นมากมายที่นี่ที่แค่ "หลบซ่อนตัวอยู่" หน้าเว็บที่ผู้ดูแลระบบของคุณเช่นนี้จะไม่ได้เป็นตัวแทนที่เพียงพอสำหรับการตรวจสอบรหัสผ่านตามที่เหมาะสม ที่กล่าวว่าถ้าคุณมีระบบตรวจสอบความปลอดภัยการตั้งค่าที่ซ่อนตัวอยู่หน้าอาจจะมีประโยชน์เป็นชั้นพิเศษแม้ว่าค่อนข้างอ่อนแอหนึ่งในการป้องกันในเชิงลึกวิธีการ