ฉันควรใช้รหัสตอบกลับสถานะ HTTP ใดหากคำขอไม่มีพารามิเตอร์ที่ต้องการ


คำตอบ:


387

สถานะ 422 ดูเหมือนว่าเหมาะสมที่สุดขึ้นอยู่กับสเปค

รหัสสถานะ 422 (หน่วยประมวลผลไม่ได้) หมายความว่าเซิร์ฟเวอร์เข้าใจประเภทเนื้อหาของเอนทิตีที่ร้องขอ (ดังนั้นรหัสสถานะ 415 (ประเภทสื่อที่ไม่สนับสนุน) ไม่เหมาะสม) และไวยากรณ์ของเอนทิตีที่ร้องขอนั้นถูกต้อง (ดังนั้น 400 (คำขอไม่ถูกต้อง) ) รหัสสถานะไม่เหมาะสม) แต่ไม่สามารถประมวลผลคำแนะนำที่มีอยู่ ตัวอย่างเช่นเงื่อนไขข้อผิดพลาดนี้อาจเกิดขึ้นหากเนื้อความคำขอ XML มีรูปแบบที่ถูกต้อง (เช่นถูกต้องทางไวยากรณ์) แต่คำสั่ง XML ผิดพลาดทางอรรถศาสตร์

พวกเขาระบุว่า xml ที่มีรูปแบบไม่ถูกต้องเป็นตัวอย่างของไวยากรณ์ที่ไม่ดี (เรียกใช้ 400) สตริงข้อความค้นหาที่มีรูปแบบไม่ถูกต้องคล้ายกับกรณีนี้ดังนั้น 400 จึงไม่เหมาะสำหรับสตริงข้อความค้นหาที่มีรูปแบบที่ดีซึ่งไม่มีพารามิเตอร์อยู่

UPDATE @DavidV ชี้ให้เห็นอย่างถูกต้องว่าข้อมูลจำเพาะนี้มีไว้สำหรับ WebDAV ไม่ใช่ core HTTP แต่บางอย่างที่ไม่ใช่ WebDAV APIs ยอดนิยมนั้นใช้ 422 อยู่ดีเพราะไม่มีรหัสสถานะที่ดีกว่านี้ ( ดูที่นี่ )


2
IMO ฉันจะใช้สิ่งนี้เมื่อค่าในสตริงการสืบค้นไม่ถูกต้องไม่ใช่เมื่อมีค่าเพิ่มเติมหรือค่าขาดหายไป กล่าวคือ ต้องการรับอีเมลและค่าของมันคือ '123123'
Derek Litz

2
ฉันมักจะคิดว่าพารามิเตอร์ GET และ POST เป็นลายเซ็นเมธอดของเส้นทาง URL ดังนั้น 404 จึงสมเหตุสมผลสำหรับฉัน ใน RESTful API นั้นมีไว้สำหรับการใช้งานสาธารณะการระมัดระวังในการส่งคืนพารามิเตอร์ที่หายไป / พิเศษ ในบริบทของ URL พารามิเตอร์สตริงการสืบค้นจะมีความสำคัญสำหรับการระบุทรัพยากรและพารามิเตอร์พิเศษหรือขาดหายไปแสดงถึงทรัพยากรที่ไม่มีอยู่โดยไม่มีข้อสันนิษฐานใด ๆ แน่นอนว่ามีการแลกเปลี่ยนกับความแข็งแกร่งโดยการมีความชัดเจนและพารามิเตอร์ทางเลือกทำให้ทรัพยากรที่อาจเป็นเพียงความเสี่ยงที่จะเกิดข้อผิดพลาดเงียบ จากนั้นจะมีการใช้งาน ...
Derek Litz

13
ข้อมูลจำเพาะอ้างอิงสำหรับ WebDAV และไม่ใช่ข้อมูลจำเพาะมาตรฐาน HTTP
David V

1
@Kelvin ขอบคุณที่ชี้ให้เห็นว่าโพสต์บล็อกนั้น มันมีประโยชน์ที่จะเห็นว่า Twitter นั้นใช้ 422 ฉันคิดว่าคำตอบอาจจะดีกว่าถ้าคุณชี้แจงว่าข้อมูลจำเพาะนั้นเป็น WebDAV ในบรรทัดแรก เมื่อฉันอ่านคำตอบของคุณครั้งแรกฉันคิดว่าคุณหมายถึงข้อกำหนดมาตรฐาน HTTP จนกว่าฉันจะไปตามลิงก์
David V

3
นี่เป็นสิ่งที่ควรค่าแก่การอ่าน: bennadel.com/blog/…ฉันจะไม่ใช้ 422 สำหรับการหายพารามิเตอร์ ฉันคิดว่า400เหมาะสมกว่า
Zelphir Kaltstahl

184

ฉันไม่แน่ใจว่ามีมาตรฐานที่กำหนดไว้ แต่ฉันจะใช้400 คำขอไม่ถูกต้องซึ่งข้อกำหนด HTTP ล่าสุด (จากปี 2014) เอกสารดังต่อไปนี้ :

6.5.1 400 คำขอไม่ถูกต้อง

รหัสสถานะ 400 (คำขอไม่ถูกต้อง) บ่งชี้ว่าเซิร์ฟเวอร์ไม่สามารถหรือไม่สามารถดำเนินการตามคำขอเนื่องจากสิ่งที่ถูกมองว่าเป็นข้อผิดพลาดของลูกค้า (เช่นไวยากรณ์คำขอผิดรูปแบบ, กรอบข้อความคำขอไม่ถูกต้องหรือการกำหนดเส้นทางคำขอหลอกลวง)


65
400 Bad Requestมีไว้เพื่อระบุปัญหาระดับโปรโตคอลไม่ใช่ข้อผิดพลาดทางความหมาย หากเรากำลังจะขโมยรหัสสถานะ HTTP เพื่อระบุข้อผิดพลาดระดับแอปพลิเคชัน (แทนที่จะเป็นระดับโปรโตคอล) ทำไมไม่ลองใช้จนหมดแล้วใช้เลย412ล่ะ
Matt Zukowski

36
การใช้ OAuth 1.0 ของ Google เห็นด้วยกับคำตอบนี้ จะมีการตอบสนอง 400 ครั้งเมื่อพารามิเตอร์ POST ขาดหายไปหรือไม่ได้รับการสนับสนุน: code.google.com/apis/accounts/docs/OAuth_ref.html
Tom

1
@ matt-zukowski: "412: เงื่อนไขที่กำหนดในฟิลด์คำขอส่วนหัวหนึ่งรายการหรือมากกว่านั้นประเมินเป็นเท็จเมื่อมีการทดสอบบนเซิร์ฟเวอร์" จากRFC2616 - ถ้าเป็น POST พารามิเตอร์จะอยู่ในเนื้อความคำขอไม่ใช่ฟิลด์ส่วนหัวคำขอ ในทางเทคนิคแล้ววิธี GET จะส่งพารามิเตอร์ในส่วนหัวของคำขอ แต่ฉันอยากจะมีความมั่นคงแทนบ้างไหม?
toong

6
@MattZukowski 400 เป็นรหัสสถานะระดับแอปพลิเคชัน หากคุณดูการอ้างอิงในแบบร่าง RFC 7231 คุณจะเห็นว่า น่าเสียดายที่ถ้อยคำในเวอร์ชั่นล่าสุดยังไม่ชัดเจนนักเนื่องจากผู้แต่งการเปลี่ยนแปลงล่าสุดได้คิดค้น 422
Darrel Miller

9
@DarrelMiller ถูกต้อง ( ลิงค์โดยตรง ): "รหัสสถานะ 400 (คำขอไม่ถูกต้อง) ระบุว่าเซิร์ฟเวอร์ไม่สามารถหรือไม่สามารถดำเนินการตามคำขอเนื่องจากสิ่งที่รับรู้ว่าเป็นข้อผิดพลาดของลูกค้า (เช่นไวยากรณ์คำขอผิดรูปแบบ) ข้อความคำขอไม่ถูกต้อง การกำหนดกรอบหรือการกำหนดเส้นทางคำขอหลอกลวง) " ขึ้นอยู่กับความหมายและความคาดหวังของการขยายความสามารถ (จะเป็นไปได้ในหนึ่งวันที่จะออกคำขอโดยไม่มีพารามิเตอร์หรือไม่) จากนั้นมีเพียง 400 และ 404 ที่เหมาะสมใน HTTP มาตรฐาน อื่น ๆ คิดค้นรหัสใหม่สำหรับ API ของคุณ แต่อย่าให้ความหมายมากเกินไป
tne

31

WCF APIในการจับ .NET พารามิเตอร์โดยกลับหายไปHTTP 404"ปลายทางไม่พบข้อผิดพลาด" เมื่อใช้webHttpBinding

404 Not Foundสามารถทำให้ความรู้สึกถ้าคุณพิจารณาชื่อวิธีการบริการเว็บของคุณพร้อมกับลายเซ็นของพารามิเตอร์ นั่นคือถ้าคุณเปิดเผยวิธีการให้บริการเว็บLoginUser(string, string)และคุณร้องขอLoginUser(string)ไม่พบวิธีหลัง

โดยทั่วไปสิ่งนี้จะหมายความว่าไม่พบวิธีการบริการเว็บที่คุณโทรพร้อมกับลายเซ็นพารามิเตอร์ที่คุณระบุ

10.4.5 404 ไม่พบ

เซิร์ฟเวอร์ไม่พบสิ่งใดที่ตรงกับ Request-URI ไม่มีการบ่งชี้ว่าเงื่อนไขเป็นแบบชั่วคราวหรือถาวร

400 Bad Requestเป็นเกิร์ตที่แนะนำยังคงเป็นรหัสการตอบสนองที่ถูกต้อง แต่ฉันคิดว่ามันถูกนำมาใช้ตามปกติเพื่อบ่งบอกถึงปัญหาในระดับต่ำกว่า สามารถตีความได้อย่างง่ายดายว่าเป็นคำขอ HTTP ที่มีรูปแบบไม่ถูกต้องอาจขาดหายไปหรือส่วนหัว HTTP ที่ไม่ถูกต้องหรือคล้ายกัน

10.4.1 400 คำขอไม่ถูกต้อง

เซิร์ฟเวอร์ไม่สามารถเข้าใจการร้องขอได้เนื่องจากไวยากรณ์ผิดรูปแบบ ลูกค้าไม่ควรทำซ้ำการร้องขอโดยไม่มีการดัดแปลง


นี่คือสิ่งที่ CherryPy ทำตามค่าเริ่มต้น
Derek Litz

จะทำอย่างไรเมื่อจัดการคำขอโพสต์ที่คุณยอมรับรุ่นและส่วนหนึ่งของโมเดลหายไป ในกรณีนี้คุณจะไม่ได้รับ 404 แต่คุณจะได้รับแบบจำลองที่ไม่ถูกต้องหากฉันไม่เข้าใจผิดและคุณต้องตัดสินใจว่าจะทำอย่างไร
Shane Courtrille

1
การตีความนี้ดูเหมือนยืดออกและเป็นการแสดงออกถึง RPC แทนที่จะเป็นส่วนที่เหลือ REST URI เป็นตัวระบุและมีอยู่และถูกค้นพบแล้ว สิ่งที่ส่งในเนื้อความไม่ได้เป็นส่วนหนึ่งของตัวระบุทรัพยากร 422 เหมาะสมกว่า
โจนาห์

404 เป็นคำตอบที่ถูกต้องเพียงไปแก้ไข URL บนเว็บเพื่อหาฉันทามติ!
jenson-button-event

8

คุณสามารถส่งรหัสขอได้ 400 รหัส เป็นหนึ่งในรหัสสถานะ 4xx ที่เป็นวัตถุประสงค์ทั่วไปดังนั้นคุณสามารถใช้เพื่อหมายถึงสิ่งที่คุณต้องการ: ลูกค้ากำลังส่งคำขอที่ไม่มีข้อมูล / พารามิเตอร์ที่แอปพลิเคชันของคุณต้องการเพื่อดำเนินการอย่างถูกต้อง


7

ในหนึ่งในโครงการ API ของเราเราตัดสินใจที่จะตั้งสถานะ 409 เป็นคำขอบางอย่างเมื่อเราไม่สามารถเติมเต็มได้ที่ 100% เนื่องจากพารามิเตอร์ที่ขาดหายไป

รหัสสถานะ HTTP "409 ความขัดแย้ง" เป็นสิ่งที่ดีสำหรับเราเนื่องจากข้อกำหนดจำเป็นต้องมีข้อมูลที่เพียงพอเพื่อให้ผู้ใช้รับรู้ถึงแหล่งที่มาของความขัดแย้ง

การอ้างอิง: w3.org/Protocols/

ดังนั้นในการตอบสนองอื่น ๆ เช่น 400 หรือ 404 เราเลือก 409 เพื่อบังคับใช้ความต้องการในการดูบันทึกย่อในคำขอที่เป็นประโยชน์ในการตั้งค่าคำขอใหม่และถูกต้อง

กรณีของเราเป็นพิเศษเพราะเราต้องส่งข้อมูลบางอย่างหากคำขอไม่ถูกต้องสมบูรณ์และเราจำเป็นต้องบังคับให้ลูกค้าดูข้อความและเข้าใจสิ่งที่ผิดพลาดในคำขอ

โดยทั่วไปถ้าเรามีพารามิเตอร์ที่หายไปเพียงบางอย่างเราจะไปหา400และอาร์เรย์ของพารามิเตอร์ที่ขาดหายไป แต่เมื่อเราต้องการส่งข้อมูลเพิ่มเติมเช่นข้อความเฉพาะกรณีและเราต้องการให้แน่ใจว่าลูกค้าจะดูแลเราจะส่ง 409


2
นี่เป็นสิ่งที่ผิดธรรมดา 409 สำหรับปัญหาการทำงานพร้อมกันเนื่องจาก @ MaximeGélinasชี้ให้เห็นหรือสถานการณ์ที่ทรัพยากรมีอยู่แล้วและไม่อนุญาตให้ทำซ้ำ
gimlichael

ตามข้อมูลจำเพาะ"รหัสสถานะ 409 (ความขัดแย้ง) ระบุว่าไม่สามารถดำเนินการตามคำขอได้เนื่องจากข้อขัดแย้งกับสถานะปัจจุบันของทรัพยากรเป้าหมาย" . การใช้พารามิเตอร์ที่หายไปนั้นผิดปกติ นั่นเป็นข้อผิดพลาดที่แตกต่างอย่างสิ้นเชิง
Mark Amery

5

ฉันมักจะไป 422 (เอนทิตีที่ไม่สามารถประมวลผลได้) ถ้าสิ่งที่อยู่ในพารามิเตอร์ที่ต้องการไม่ตรงกับที่จุดสิ้นสุด API ต้องการ (เช่นรหัสผ่านสั้นเกินไป) แต่สำหรับพารามิเตอร์ที่ขาดหายไปฉันจะไป 406 (ยอมรับไม่ได้)


8
ดี 406 ใช้ไม่ได้กับส่วนหัวยอมรับ (ถ้าเซิร์ฟเวอร์ไม่สามารถส่งการตอบสนองลูกค้าจะเข้าใจ) "ทรัพยากรที่ระบุโดยคำขอนั้นสามารถสร้างเอนทิตี้การตอบสนองที่มีลักษณะเนื้อหาที่ไม่สามารถยอมรับได้ตามส่วนหัวยอมรับที่ส่งมาในคำขอ" . ฉันติดกับ 422 เนื่องจากไม่มีตัวเลือก "ถูก" กับสเปคปัจจุบัน: - /
JakubKnejzlik

ใช้ 406 สำหรับสิ่งนี้ผิด รหัส 406 ไม่ได้หมายความว่าคำขอไม่เป็นที่ยอมรับ หมายความว่าคุณไม่สามารถตอบสนองคำขอได้เนื่องจากคำตอบที่คุณสามารถให้บริการได้นั้นเป็นสิ่งที่ลูกค้าจะพบว่าไม่สามารถยอมรับได้โดยขึ้นอยู่กับส่วนหัวยอมรับที่ส่งมาในคำขอ (ตัวอย่างเช่นคำขอรวมถึงการAccept-Language: deระบุว่าจะยอมรับการตอบสนองในภาษาเยอรมันเท่านั้น แต่เฉพาะรุ่นของเอกสารที่ร้องขอที่เซิร์ฟเวอร์ของคุณมีอยู่เป็นภาษาอังกฤษหรือฝรั่งเศส) การใช้เพื่อระบุว่าพารามิเตอร์ที่ขาดหายไปในคำขอนั้นไม่ถูกต้อง ต่อข้อกำหนดใน spec
Mark Amery

3

สำหรับผู้ที่สนใจ Spring MVC (3.x อย่างน้อย) จะคืนค่า 400 ในกรณีนี้ซึ่งดูเหมือนว่าผิดสำหรับฉัน

ฉันทดสอบ URL ของ Google หลายอัน (accounts.google.com) และลบพารามิเตอร์ที่จำเป็นออกและโดยทั่วไปแล้วพวกเขาจะคืนค่า 404 ในกรณีนี้

ฉันจะคัดลอก Google


18
เพราะ Google ทำไม่ได้หมายความว่า Google ทำถูกต้อง!
rve

4
ฉันเห็นด้วยไม่จำเป็นต้อง 'ถูกต้อง' แต่บางครั้งสิ่งที่ถูกต้องและสิ่งที่สมเหตุสมผลเป็นสองสิ่งที่แตกต่างกัน ยัง
ไงก็ตาม

Google API บางตัวส่งคืนค่า 400 เช่นgithub.com/google/google-api-nodejs-client/issues/404
Dennis

ซึ่งเป็นสิ่งที่ผิด (และทำไม spring mvc จึงไม่ใช่ jax-rs)
jenson-button-event

3

เป็นที่ถกเถียงกันอยู่ว่า404 Not Foundควรใช้a เนื่องจากไม่พบทรัพยากรที่ระบุ


3
นี่เป็นพฤติกรรมเริ่มต้นของ Java JAX-RS เมื่อพารามิเตอร์การสืบค้นไม่สามารถแปลงเป็นประเภทข้อมูลที่เหมาะสม ฉันไม่เห็นด้วยกับมัน พบทรัพยากร WAS: พารามิเตอร์การสืบค้นใช้สำหรับการกรองทรัพยากรและตัวกรองตัวใดตัวหนึ่งได้รับค่าที่ยอมรับไม่ได้ ฉันคิดว่าสิ่งนี้ตรงกับ 422 เอนทิตีที่ไม่สามารถประมวลผลได้ใกล้เคียงที่สุดและ 400 คำขอไม่ถูกต้องที่ใกล้เคียงที่สุด
Ryan

มันเป็นพฤติกรรมเริ่มต้นของ jax-rs เพราะมันเป็นพฤติกรรมที่ถูกต้อง!
jenson-button-event

การใช้ 404 นั้นสมเหตุสมผลเมื่อพารามิเตอร์สตริงข้อความค้นหามีความหมายในการระบุทรัพยากรมีการกำหนดค่า แต่ค่านั้นไม่สอดคล้องกับทรัพยากรที่มีอยู่ - ตัวอย่างเช่นหากคุณกำลังร้องขอexample.com/show-user -profile? user_id = 123และผู้ใช้ 123 ไม่มีอยู่ แต่นั่นไม่ใช่สิ่งที่คำถามนี้ถาม มันเกี่ยวกับสถานการณ์ที่พารามิเตอร์ที่ต้องการถูกละเว้นทั้งหมด ฉันไม่เห็นวิธีที่สอดคล้องกับทรัพยากรที่ระบุไม่ถูกพบ
Mark Amery

2

ฉันมักจะใช้ข้อผิดพลาดที่ต้องห้าม 403 เหตุผลก็คือคำขอนั้นเข้าใจ แต่ฉันจะไม่ทำตามที่ถาม (เพราะมีสิ่งผิดปกติ) เอนทิตีการตอบสนองอธิบายสิ่งที่ผิดดังนั้นหากการตอบสนองเป็นหน้า HTML ข้อความแสดงข้อผิดพลาดจะอยู่ในหน้านั้น หากเป็นการตอบสนอง JSON หรือ XML ข้อมูลข้อผิดพลาดจะอยู่ในนั้น

จากrfc2616 :

10.4.4 403 สิ่งต้องห้าม

เซิร์ฟเวอร์เข้าใจคำขอ แต่ปฏิเสธที่จะปฏิบัติตาม
การอนุญาตจะไม่ช่วยและคำขอจะไม่ถูกทำซ้ำ
หากวิธีการร้องขอไม่ได้เป็น HEAD และเซิร์ฟเวอร์ประสงค์ที่จะ
เปิดเผยต่อสาธารณะว่าทำไมคำขอไม่ได้รับการตอบสนองก็ควรอธิบายเหตุผลของการปฏิเสธในเอนทิตี หากเซิร์ฟเวอร์ไม่ต้องการให้ข้อมูลนี้พร้อมใช้งานสำหรับลูกค้าสามารถใช้รหัสสถานะ 404
(ไม่พบ) แทน


4
ฟังดูดีในตอนแรกแม้ว่าฉันจะเชื่อมโยงกับการตรวจสอบหรือข้อผิดพลาดตามการอนุญาต นอกจากนี้ข้อมูลจำเพาะเกี่ยวกับสิ่งนี้ซึ่งระบุว่า "หากเซิร์ฟเวอร์ไม่ต้องการให้ข้อมูลนี้พร้อมใช้สำหรับลูกค้า" นอกจากนี้ 404 อาจเป็นตัวเลือกที่ดีกว่า ฉันจะมุ่งหน้าไปที่ 404 หรือ 400 กว่า 403
tonyhb

21
นี่เป็นความคิดที่แย่มากแม้ว่าในทางเทคนิคจะฟังดูดี 403 ถูกใช้อย่างกว้างขวางสำหรับการตอบกลับการตรวจสอบความล้มเหลวและคุณจะสร้างความสับสนให้กับลูกค้าของคุณหากคุณพยายามใช้สิ่งนี้เพื่อระบุข้อผิดพลาดของพารามิเตอร์ ตัวอย่างเช่น Twitter ทำเช่นนี้ - 403 ใช้ทั้งสองอย่างเมื่อคุณให้ข้อมูลประจำตัว OAuth ที่ไม่ถูกต้องและเมื่อมีสิ่งผิดปกติทางความหมายกับคำขอของคุณ - และเป็นแหล่งที่มาของความสับสนอย่างต่อเนื่องสำหรับลูกค้า API
Matt Zukowski

1
@ Mattzukowski ดีนั่นเป็นเพียงความผิด ข้อมูลจำเพาะบอกว่าAuthorization will not helpดังนั้น Twitter ไม่ควรส่งสิ่งนี้เพื่อรับรอง OAuth ที่ไม่ถูกต้อง
torvin

@torvin Twitter ควรจะส่ง401 Unauthorizedแทน อย่างไรก็ตามคุณสามารถเข้าใจได้ว่าทำไมถึงไม่ทำเช่นนั้นถ้าคุณดูคำอธิบายของเอกสาร MDNของทั้งสองรหัสซึ่งคล้ายกันมาก
Agi Hammerthief

-1

เพียงแค่ใช้ ASP.NET Core เป็นข้อมูลอ้างอิงหรือเป็นตัวอย่าง ASP.NET Core ช่วยให้คุณสามารถควบคุมตัวควบคุมพร้อมการกระทำได้นี่คือลักษณะการทำงานของ "รายละเอียด"

    // GET: Cars/Details/5
    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var car = await _context.Cars.FirstOrDefaultAsync(m => m.CarId == id);
        if (car == null)
        {
            return NotFound();
        }

        return View(car);
    }

หากidไม่ได้ตั้งค่าพารามิเตอร์ไว้จะส่งคืน 404 Not Found


-5

ส่งคืน 404 - ซึ่งหมายความว่าไม่พบทรัพยากร

ลองแก้ไข URL ของเว็บไซต์ที่มีรหัส ฉันพยายามไม่กี่:

  • ปัญหา repo gitub
  • หน้าบรรจบ
  • มุมมองผลิตภัณฑ์ amazon
  • รายชื่ออีเบย์
  • บทความข่าวบีบีซี

ผลตอบแทนทั้งหมด 404 นั้นเป็นเพราะนักพัฒนาเหล่านั้นตีความมาตรฐานอย่างถูกต้องซึ่งคำตอบที่นี่และอื่น ๆ อีกมากมายนั้นไม่ใช่!


1
ฉันเชื่อว่า devs ส่วนใหญ่ให้คำจำกัดความ "พารามิเตอร์" เป็นหนึ่งในคู่ชื่อ / ค่าในสตริงการสืบค้นหรือรูปแบบเนื้อหา POST คำขอให้แก้ไขปัญหา Github ไม่ได้มีสิ่งนี้
เคลวิน

@Kelvin เรา devs ยังรวมถึงพารามิเตอร์เส้นทางในรายการ หากพารามิเตอร์ url ใด ๆ เป็นสิ่งจำเป็นแสดงถึงตำแหน่งของทรัพยากรและไม่รวมอยู่ดังนั้นควรส่งคืน 404 requestBodyไม่รวมนี้
jenson-button-event

-6

ฉันจะไปกับ 403

จากRFC 2616 - Hypertext Transfer Protocol - HTTP / 1.1

403 ต้องห้าม

เซิร์ฟเวอร์เข้าใจคำขอ แต่ปฏิเสธที่จะปฏิบัติตาม การอนุญาตจะไม่ช่วยและคำขอจะไม่ถูกทำซ้ำ หากวิธีการร้องขอไม่ได้เป็น HEAD และเซิร์ฟเวอร์ประสงค์ที่จะเปิดเผยต่อสาธารณะว่าทำไมคำขอไม่ได้รับการตอบสนองก็ควรอธิบายเหตุผลของการปฏิเสธในเอนทิตี หากเซิร์ฟเวอร์ไม่ต้องการให้ข้อมูลนี้พร้อมใช้งานสำหรับลูกค้าสามารถใช้รหัสสถานะ 404 (ไม่พบ) แทน

คุณควรอธิบายถึงสาเหตุของความล้มเหลวในการตอบสนองของคุณ หากคุณไม่ต้องการทำเพียงแค่ใช้ 404


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