ตัวอย่างของ 302 กับ 303


22

ความแตกต่างระหว่าง a 302และ303การตอบกลับคืออะไร?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • 10.3.3 302 พบ
  • 10.3.4 303 ดูอื่น ๆ

สิ่งเหล่านี้สามารถใช้แทนกันได้หรือเพราะเหตุใดจึงต้องใช้สิ่งอื่นมากกว่า? คุณช่วยกรุณาระบุกรณีการใช้เมื่อจะใช้ (และอื่น ๆ จะไม่)?

คำตอบ:


35

คำอธิบายในหน้าเว็บที่คุณเชื่อมโยงดูเหมือนจะเป็นคำอธิบายถึงวัตถุประสงค์ที่ตั้งใจไว้:

การเปลี่ยนเส้นทาง 302 เป็นการระบุว่าการเปลี่ยนเส้นทางนั้นเป็นการชั่วคราว - ลูกค้าควรกลับมาตรวจสอบที่ URL เดิมในคำขอในอนาคต

การเปลี่ยนเส้นทาง 303 มีวัตถุประสงค์เพื่อเปลี่ยนเส้นทางการPOSTร้องขอไปยังGETทรัพยากร (มิฉะนั้นลูกค้าจะถือว่าวิธีการร้องขอสำหรับตำแหน่งใหม่นั้นเหมือนกับทรัพยากรดั้งเดิม)

หากคุณเปลี่ยนเส้นทางไคลเอนต์เป็นส่วนหนึ่งของเว็บแอปพลิเคชันของคุณ แต่คาดว่าพวกเขาจะเริ่มต้นที่เว็บแอปพลิเคชันเสมอ (ตัวอย่างเช่น URL ที่ย่อให้สั้นลง) การเปลี่ยนเส้นทาง 302 ดูเหมือนจะสมเหตุสมผล 303 การเปลี่ยนเส้นทางมีไว้สำหรับใช้เมื่อคุณได้รับPOSTข้อมูลจากลูกค้า (เช่นการส่งแบบฟอร์ม) และคุณต้องการเปลี่ยนเส้นทางไปยังหน้าเว็บใหม่ที่จะดึงมาใช้GETแทนPOST(เช่นการร้องขอหน้ามาตรฐาน)

แต่ดูหมายเหตุนี้จากข้อกำหนดรหัสสถานะ - ลูกค้าส่วนใหญ่จะทำสิ่งเดียวกันทั้ง 302 หรือ 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

4
ชัดเจน แต่ผิด การเปลี่ยนเส้นทาง 303 ไม่ได้เป็นการถาวร รัฐ RFC "การตอบสนอง 303 จะต้องไม่ถูกเก็บไว้ชั่วคราว" คำอธิบายที่คุณให้ที่นี่ตรงกับการเปลี่ยนเส้นทาง 301
Ladadadada

2
แม่ culpa ฉันมี 301 และ 303 ย้อนหลัง ฉันได้อัพเดตคำตอบแล้ว
ลาร์สก์

ตอนนี้มี 308
มิแรนดา

ฉันคิดว่ามันเป็นความเข้าใจผิดเล็กน้อยที่จะแนะนำว่า 303 คือ "ตั้งใจ" เพื่อเปลี่ยนเส้นทาง POST ไปยัง GET - หยุดเต็ม ข้อมูลจำเพาะชี้ให้เห็นว่า 303 เป็นข้อมูลเพิ่มเติมเกี่ยวกับความพร้อมของการเป็นตัวแทนของทรัพยากรผ่านวิธีการที่ร้องขอในตอนแรก ตัวอย่างเช่นหากฉันมีภาพที่มีการป้องกันสิทธิ์ขนาดใหญ่มีให้สำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้องเท่านั้นฉันอาจใช้ 303 เพื่อเปลี่ยนเส้นทางผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์ไปยังภาพขนาดเล็ก วิธีการร้องขอที่ใช้ในกรณีเช่นนี้ไม่เกี่ยวข้อง
ส่งเสียง

RFCกล่าวว่า "วิธีนี้มีอยู่เป็นหลักเพื่อให้ผลลัพธ์ของสคริปต์ที่เปิดใช้งาน POST เพื่อเปลี่ยนเส้นทางตัวแทนผู้ใช้ไปยังทรัพยากรที่เลือก" และ "การตอบสนองต่อคำขอสามารถพบได้ภายใต้ URI ที่แตกต่างกันและควรดึงข้อมูลโดยใช้วิธีการ GET บนทรัพยากรนั้น" ฉันคิดว่ามันค่อนข้างตรงกับที่ฉันพูด (เมื่อหลายปีก่อน) แต่ฉันแน่ใจว่ามีที่สำหรับตีความ
larsks

15

การเปลี่ยนเส้นทางมีสี่ประเภท (ปัจจุบัน) แต่เดิมมีเพียงสองราย แต่ลูกค้าส่วนใหญ่ใช้การเปลี่ยนเส้นทาง 302 อย่างไม่ถูกต้องดังนั้นจึงเพิ่มอีกสองรายการเพื่อชี้แจงความแตกต่างระหว่างพฤติกรรมที่เป็นไปได้ที่แตกต่างกันสองอย่างในการรับ 302

RFC ที่คุณเชื่อมโยงจะระบุสิ่งนี้ไว้ในหัวข้อการเปลี่ยนเส้นทาง 302:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. การเปลี่ยนเส้นทาง 301 เป็นการเปลี่ยนเส้นทางถาวร สามารถแคชได้และบุ๊กมาร์กใด ๆ สำหรับ URL นี้ควรได้รับการอัปเดตให้ชี้ไปที่ URL ใหม่
  2. การเปลี่ยนเส้นทาง 302 เป็นการเปลี่ยนเส้นทางชั่วคราว ไม่สามารถแคชได้ตามค่าเริ่มต้นและควรได้รับการร้องขอใหม่ทุกครั้ง (แต่คุณสามารถแทนที่สิ่งนี้ได้ด้วยส่วนหัวแคช) คำขอติดตามควรใช้วิธีการเดียวกัน (POST, GET, CONNECT, PUT, DELETE, ฯลฯ ) เช่นเดียวกับคำขอต้นฉบับและสำหรับสิ่งอื่นที่ไม่ใช่คำขอของ GET และ HEAD ลูกค้าควรแจ้งผู้ใช้ก่อนทำการร้องขอ นี่เป็นส่วนที่ลูกค้าผิดและส่วนใหญ่เปลี่ยนวิธีการขอติดตามเป็น GET โดยไม่คำนึงถึงวิธีการดั้งเดิม
  3. การเปลี่ยนเส้นทาง 303 นั้นเหมือนกับ 302 ยกเว้นว่าการร้องขอการติดตามถูกเปลี่ยนเป็นการร้องขอ GET อย่างชัดเจนและไม่จำเป็นต้องมีการยืนยัน
  4. การเปลี่ยนเส้นทาง 307 นั้นเหมือนกับ 302 ยกเว้นว่าการร้องขอการติดตามนั้นชัดเจนเช่นเดียวกันกับคำขอต้นฉบับและการยืนยันจะต้องได้รับจากผู้ใช้สำหรับวิธีการร้องขออื่น ๆ นอกเหนือจาก GET และ HEAD

ลูกค้าเก่าอาจไม่เข้าใจการเปลี่ยนเส้นทาง 303 สิ่งใดก็ตามที่ทำให้คำขอ HTTP / 1.1 ควรเข้าใจการตอบสนอง 303

เป็นไปได้ที่จะพิจารณาการตอบสนอง 300 และ 305 เพื่อเป็นการเปลี่ยนเส้นทางซึ่งหมายความว่ามีหกประเภท


0

ประเภทการเปลี่ยนเส้นทาง (301,302,303 ... ) ที่ใช้มีผลกระทบอย่างมากต่อวิธีที่เครื่องมือค้นหาจะจัดทำดัชนีและจัดอันดับเนื้อหา แมงมุมบางคนอาจปฏิเสธที่จะจัดทำดัชนีเนื้อหาที่เปลี่ยนเส้นทางชั่วคราว รายละเอียดสามารถพบได้ในวรรณกรรม SEO ต่างๆ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.