บางบทความที่ฉันอ่านเคยบอกว่ามันหมายถึงการกระโดด (จาก URI หนึ่งไปยังอีกอันหนึ่ง) แต่ฉันตรวจพบ "302" นี้แม้ว่าจะไม่มีการกระโดดเลยก็ตาม!
บางบทความที่ฉันอ่านเคยบอกว่ามันหมายถึงการกระโดด (จาก URI หนึ่งไปยังอีกอันหนึ่ง) แต่ฉันตรวจพบ "302" นี้แม้ว่าจะไม่มีการกระโดดเลยก็ตาม!
คำตอบ:
การเปลี่ยนเส้นทาง 302 หมายความว่าเพจถูกย้ายชั่วคราวในขณะที่ 301 หมายความว่าเพจถูกย้ายอย่างถาวร
301s นั้นดีสำหรับค่า SEO ในขณะที่ 302 ไม่ได้เป็นเพราะ 301s สั่งให้ลูกค้าลืมคุณค่าของ URL เดิมในขณะที่ 302 จะคงคุณค่าของ URL เดิมไว้และอาจลดค่าลงได้ด้วยการสร้าง URL สองรายการที่แตกต่างกันอย่างมีเหตุผล แต่ละรายการสร้างเนื้อหาเดียวกัน (เครื่องมือค้นหามองว่าเป็นรายการที่ซ้ำกันมากกว่าทรัพยากรเดียวที่มีชื่อสองชื่อ)
คำถามนี้ถูกถามเมื่อนานมาแล้วในขณะที่ RFC 2616 ยังคงแขวนอยู่ คำตอบบางส่วนสำหรับคำถามนี้อยู่ในเอกสารดังกล่าวซึ่งไม่เกี่ยวข้องอีกต่อไปแล้วในปัจจุบัน อ้างถึงMark Nottinghamซึ่งเป็นประธานร่วมใน IETF HTTP และ QUIC Working Groups ในขณะที่เขียน:
อย่าใช้ RFC2616 ลบออกจากฮาร์ดไดรฟ์บุ๊กมาร์กและเบิร์น (หรือรีไซเคิลอย่างรับผิดชอบ) สำเนาใด ๆ ที่พิมพ์ออกมา
RFC 2616 รุ่นเก่าถูกแทนที่ด้วยเอกสารต่อไปนี้ซึ่งร่วมกันกำหนดโปรโตคอล HTTP / 1.1:
ดังนั้นฉันจึงมุ่งมั่นที่จะให้คำตอบตามRFC 7231ซึ่งเป็นการอ้างอิงปัจจุบันสำหรับรหัสสถานะ HTTP / 1.1
302
รหัสสถานะการตอบกลับ302
เป็นวิธีทั่วไปในการเปลี่ยนเส้นทาง URL นอกจาก302
รหัสสถานะแล้วการตอบกลับควรมีLocation
ส่วนหัวที่มี URI ที่แตกต่างกัน ส่วนหัวดังกล่าวจะถูกแยกวิเคราะห์โดยตัวแทนผู้ใช้จากนั้นดำเนินการเปลี่ยนเส้นทาง:
เว็บเบราว์เซอร์อาจเปลี่ยนจากPOST
เป็นGET
ในการร้องขอในภายหลัง หากพฤติกรรมนี้ไม่เป็นที่ต้องการ307
สามารถใช้รหัสสถานะ (การเปลี่ยนเส้นทางชั่วคราว) แทนได้
นี่คือวิธีกำหนด302
รหัสสถานะในRFC 7231 :
302
(พบ) รหัสสถานะบ่งชี้ว่าทรัพยากรเป้าหมายอาศัยอยู่ชั่วคราวภายใต้ URI ที่แตกต่างกัน เนื่องจากการเปลี่ยนเส้นทางอาจมีการเปลี่ยนแปลงในบางครั้งลูกค้าจึงควรใช้ URI คำขอที่มีประสิทธิภาพสำหรับคำขอในอนาคตต่อไปเซิร์ฟเวอร์ควรสร้าง
Location
ฟิลด์ส่วนหัวในการตอบกลับที่มีการอ้างอิง URI สำหรับ URI ที่แตกต่างกัน ตัวแทนผู้ใช้อาจใช้Location
ค่าฟิลด์สำหรับการเปลี่ยนเส้นทางอัตโนมัติ เพย์โหลดการตอบกลับของเซิร์ฟเวอร์มักจะมีไฮเปอร์เท็กซ์โน้ตสั้น ๆ พร้อมไฮเปอร์ลิงก์ไปยัง URI ที่แตกต่างกันหมายเหตุ:ด้วยเหตุผลทางประวัติศาสตร์ตัวแทนผู้ใช้อาจเปลี่ยนวิธีการร้องขอจาก
POST
เป็นGET
สำหรับการร้องขอในภายหลัง หากพฤติกรรมนี้ไม่เป็นที่ต้องการ307
สามารถใช้รหัสสถานะ (การเปลี่ยนเส้นทางชั่วคราว) แทนได้
ตามเอกสารเว็บ MDN จาก Mozillaกรณีการใช้งานทั่วไปสำหรับ302
:
หน้าเว็บไม่สามารถใช้งานได้ชั่วคราวเนื่องจากสาเหตุที่ไม่คาดฝัน ด้วยวิธีนี้เครื่องมือค้นหาจะไม่อัปเดตลิงก์
RFC 7231กำหนดรหัสสถานะต่อไปนี้สำหรับการเปลี่ยนเส้นทาง:
RFC 7238ถูกสร้างขึ้นเพื่อกำหนดรหัสสถานะอื่นสำหรับการเปลี่ยนเส้นทาง:
308
(เปลี่ยนเส้นทางถาวร)อ้างอิงคำตอบนี้สำหรับรายละเอียดเพิ่มเติม
Location
ส่วนหัวคือสิ่งที่ช่วยฉัน) ปรากฎว่าฉันเรียกใช้บริการhttp
และพวกเขาย้ายไปhttps
สิ่งที่ฉันได้รับการตอบสนองคือ302
ทันทีที่ฉันอ่านLocation
ส่วนหัวที่นี่ฉันเห็นความhttp/https
แตกต่าง ขอบคุณ!
วิธีง่ายๆในการดูการเปลี่ยนเส้นทาง HTTP 301 เทียบกับ 302 คือ:
สมมติว่าคุณมีบุ๊กมาร์กเพื่อ " http://sample.com/sample " คุณใช้เบราว์เซอร์เพื่อไปที่นั่น
จุดนี้ 302 เปลี่ยนเส้นทางไปยัง URL อื่นหมายความว่าคุณควรเก็บบุ๊กมาร์กไว้ที่ " http://sample.com/sample " เนื่องจาก URL ปลายทางอาจมีการเปลี่ยนแปลงในอนาคต
การเปลี่ยนเส้นทาง 301 ไปยัง URL อื่นหมายความว่าบุ๊กมาร์กของคุณควรเปลี่ยนให้ชี้ไปที่ URL ใหม่เนื่องจากเป็นการเปลี่ยนเส้นทางแบบถาวร
จากRFC 2616 (ข้อกำหนด Hypertext Transfer Protocol) :
10.3.3 302 พบ ทรัพยากรที่ร้องขออยู่ชั่วคราวภายใต้ URI อื่น เนื่องจากการเปลี่ยนเส้นทางอาจมีการเปลี่ยนแปลงในบางครั้งไคลเอ็นต์จึงควร ใช้ Request-URI ต่อไปสำหรับคำขอในอนาคต การตอบสนองนี้ สามารถแคชได้เฉพาะเมื่อระบุโดยส่วนหัว Cache-Control หรือ Expires สนาม URI ชั่วคราวควรได้รับจากฟิลด์ Location ใน คำตอบ เว้นแต่วิธีการร้องขอคือ HEAD เอนทิตีของ การตอบกลับควรมีบันทึกไฮเปอร์เท็กซ์สั้น ๆ ที่มีไฮเปอร์ลิงก์ไปยัง URI ใหม่
ที่มา:
จากWikipedia :
รหัสสถานะการตอบกลับ HTTP 302 Found เป็นวิธีที่ใช้กันทั่วไปในการเปลี่ยนเส้นทาง เป็นตัวอย่างของการปฏิบัติทางอุตสาหกรรมที่ขัดแย้งกับมาตรฐาน
ตามคำจำกัดความของรหัสสถานะ http 302 ระบุการเปลี่ยนเส้นทาง (ชั่วคราว) "ทรัพยากรที่ร้องขออยู่ชั่วคราวภายใต้ URI อื่น"
302 คือคำตอบที่ระบุการเปลี่ยนแปลงตำแหน่งทรัพยากร - "พบ"
URL ที่ทรัพยากรควรจะอยู่ในขณะนี้ควรอยู่ในส่วนหัว "ตำแหน่ง" ของการตอบกลับ
ไคลเอ็นต์ที่ร้องขอควรดำเนินการ "ข้าม" (ส่งคำขอใหม่ไปยัง URL ของทรัพยากรในฟิลด์ส่วนหัวตำแหน่งการตอบกลับ)
ในแง่ของ SEO 301 และ 302 ดีทั้งคู่ขึ้นอยู่กับสถานการณ์
หากสามารถส่งคืนได้เพียงเวอร์ชันเดียว (กล่าวคืออีกเวอร์ชันหนึ่งจะเปลี่ยนเส้นทางไป) ก็เยี่ยมมาก! พฤติกรรมนี้มีประโยชน์เพราะจะช่วยลดเนื้อหาที่ซ้ำกัน ในกรณีเฉพาะของการเปลี่ยนเส้นทางไปยัง URL สแลชต่อท้ายผลการค้นหาของเรามักจะแสดงเวอร์ชันของ URL ที่มีรหัสการตอบกลับ 200 รหัส (โดยส่วนใหญ่มักเป็น URL เครื่องหมายทับ) ไม่ว่าการเปลี่ยนเส้นทางจะเป็น 301 หรือ 302 ก็ตาม
ตามRFC 1945 / Hypertext Transfer Protocol - HTTP / 1.0 :
302 Moved Temporarily
The requested resource resides temporarily under a different URL.
Since the redirection may be altered on occasion, the client should
continue to use the Request-URI for future requests.
The URL must be given by the Location field in the response. Unless
it was a HEAD request, the Entity-Body of the response should
contain a short note with a hyperlink to the new URI(s).
If the 302 status code is received in response to a request using
the POST method, the user agent must not automatically redirect the
request unless it can be confirmed by the user, since this might
change the conditions under which the request was issued.
Note: When automatically redirecting a POST request after
receiving a 302 status code, some existing user agents will
erroneously change it into a GET request.
ตัวอย่าง: -แม้ว่าเราจะพบว่าตัวเองต้องการการเปลี่ยนเส้นทาง 302 ไม่ใช่เรื่องปกติ แต่ตัวเลือกนี้มีประโยชน์มากในบางกรณี นี่เป็นกรณีที่พบบ่อยที่สุด:
การเปลี่ยนเส้นทาง 302 คือรหัสที่แจ้งให้ผู้เยี่ยมชมทราบถึง URL ที่เฉพาะเจาะจงว่าหน้านั้นถูกย้ายชั่วคราวโดยนำพวกเขาไปยังตำแหน่งใหม่โดยตรง
กล่าวอีกนัยหนึ่งการเปลี่ยนเส้นทาง 302 จะเปิดใช้งานเมื่อโรบ็อตของ Google หรือเครื่องมือค้นหาอื่น ๆ ขอให้โหลดหน้าเฉพาะ ในขณะนั้นด้วยการเปลี่ยนเส้นทางนี้เซิร์ฟเวอร์จะส่งคืนการตอบกลับอัตโนมัติที่ระบุ URL ใหม่
ด้วยวิธีนี้จะหลีกเลี่ยงข้อผิดพลาดและความน่ารำคาญทั้งต่อเครื่องมือค้นหาและผู้ใช้รับประกันการใช้งานที่ราบรื่น
สำหรับรายละเอียดเพิ่มเติมโปรดดูบทความนี้
รหัสสถานะ 302 คือรหัสสถานะการตอบกลับ HTTP ที่ระบุว่าทรัพยากรที่ร้องขอถูกย้ายไปยัง URI อื่นชั่วคราว เนื่องจากตำแหน่งหรือคำสั่งการเปลี่ยนเส้นทางปัจจุบันอาจมีการเปลี่ยนแปลงในอนาคตไคลเอ็นต์ที่ได้รับรหัสตอบกลับ 302 Found ควรใช้ URI เดิมต่อไปสำหรับคำขอในอนาคต
การตอบสนอง HTTP พร้อมรหัสสถานะนี้จะให้ URL เพิ่มเติมในตำแหน่งฟิลด์ส่วนหัว นี่คือการเชิญตัวแทนผู้ใช้ (เช่นเว็บเบราว์เซอร์) ให้ทำการร้องขอครั้งที่สองหรือเหมือนกันกับ URL ใหม่ที่ระบุในฟิลด์ตำแหน่ง ผลลัพธ์สุดท้ายคือการเปลี่ยนเส้นทางไปยัง URL ใหม่
สำหรับใครก็ตามที่อาจสงสัยเกี่ยวกับการตั้งชื่อฉันจะเพิ่มว่าอาจเรียกว่า "พบ" เนื่องจากทรัพยากรหลัก (เช่นหน้าเว็บส่วนตัว) ที่ผู้ใช้ต้องการรับไม่สามารถใช้งานได้ในขณะนั้น (เช่น ผู้ใช้ยังไม่ได้พิสูจน์ตัวตน) ดังนั้นเซิร์ฟเวอร์จึงพบทรัพยากรใหม่ที่ผู้ใช้สามารถรับได้ (ซึ่งเป็นหน้าล็อกอินในกรณีการใช้งานทั่วไป)
นอกจากนี้ยัง "หลงทางและพบ" ในลักษณะซ่อนหาซึ่งหมายถึงทรัพยากรที่สูญหายภายใต้สถานะ 302 จะสูญหายไปเพียงชั่วคราวเท่านั้นไม่ควรสูญหายตลอดไป (เว้นแต่ผู้เล่นจะมีเจตนาที่ไม่ดี;))