400 বিএডি অনুরোধ HTTP ত্রুটি কোড অর্থ?


346

আমার একটি জেএসএন অনুরোধ রয়েছে যা আমি এইচটিটিপি ইউআরএলে পোস্ট করছি।

ক্ষেত্রটি 400যেখানে requestedResourceবিদ্যমান তবে "Roman"এই ক্ষেত্রটির জন্য এটি একটি অবৈধ মান হিসাবে বিবেচিত হবে ?

[{requestedResource:"Roman"}] 

এই হিসাবে ধরা হবে, 400যেখানে "blah"ক্ষেত্র এ সব বিদ্যমান নেই?

[{blah:"Roman"}]

34
হয়তো 402 , যদি তারা সত্যিই মান পাঠাতে পারবেন হতে চান Roman, তারা শুধু আপনার অর্থ প্রদান করার প্রয়োজন আরো :)
জেসন Sperske

একটি বাস্তব দৃশ্য যেখানে আমি এটি দেখেছি - আমি কিছু ডেটা যুক্ত করার জন্য একটি PUT কল করেছি। আমি একই অনুরোধের বডিটি ব্যবহার করে আবার একটি কল করেছি এবং একটি 400 পেয়েছিল যা আমাকে জানিয়েছিল যে পূর্ববর্তী অনুরোধটি ইতিমধ্যে প্রক্রিয়াধীন রয়েছে। আমাদের সিস্টেমে সেই ডেটা যুক্ত করতে কিছুটা সময় নেওয়া স্বাভাবিক।
মাস্টারজয়ে 2

উত্তর:


361

একটি 400 এর অর্থ হল যে অনুরোধটি ত্রুটিযুক্ত ছিল। অন্য কথায়, ক্লায়েন্ট কর্তৃক সার্ভারে প্রেরিত ডেটা স্ট্রিম বিধিগুলি অনুসরণ করে না।

কোনও জেএসএন পে-লোড সহ একটি আরএসটি এপিআইয়ের ক্ষেত্রে, ৪০০ টি সাধারণত হয় এবং সঠিকভাবে আমি বলতে পারি যে, পরিষেবাটির API স্পেসিফিকেশন অনুসারে কোনওভাবে JSON অবৈধ indicate

এই যুক্তি অনুসারে, আপনার দেওয়া উভয় দৃশ্যের 400 টি হওয়া উচিত।

কল্পনা করুন এর পরিবর্তে এটি JSON এর চেয়ে XML ছিল। উভয় ক্ষেত্রেই, এক্সএমএল কখনই স্কিমা বৈধতা পাস করবে না - হয় কোনও অপরিজ্ঞাত উপাদান বা একটি অনুপযুক্ত উপাদান মানের কারণে। এটি একটি খারাপ অনুরোধ হবে। একই চুক্তি এখানে।


3
আমি আপনার সাথে একমত হয়েছি "এই যুক্তি অনুসারে, আপনার দেওয়া উভয় দৃশ্যের 400 টি হওয়া উচিত।" আমি মনে করি না যে এখানে JSON এর বিষয়বস্তু বিবেচনা করা উচিত। আপনি যখন ত্রুটিযুক্ত বলেছিলেন আমি বিশ্বাস করতে চাই যে আপনি যে ডেটা প্রেরণ করেছেন তা ফর্ম্যাটে সমস্যাগুলি সমাধান করে, উদাহরণস্বরূপ আপনি JSON এ কোনও ক্ষেত্র এড়িয়ে গেলে আপনার 400 হওয়া উচিত
গীতাঙ্গা

2
পুনঃনির্মাণ টিউটোরিয়াল / httpstatuscodes.html এ REST প্রতিক্রিয়া কোডের একটি শালীন সেট রয়েছে । এটি কীভাবে আপনি কোনও বৈধ অনুরোধ যেমন 406 (গ্রহণযোগ্য নয়) বা 405 পদ্ধতি অনুমোদিত নয় তা হ্যান্ডেল করতে চান তার উপরও নির্ভর করে। তবে, 400 উপযুক্ত কারণ "ত্রুটিযুক্ত সিনট্যাক্সের কারণে সার্ভারের দ্বারা অনুরোধটি বুঝতে পারা যায় নি The ক্লায়েন্টকে পরিবর্তন ছাড়া অনুরোধটি পুনরাবৃত্তি করা উচিত নয়।"
অ্যান্ড্রু স্কট ইভান্স 19

3
সুতরাং "অনুরোধ বিকৃত সিনট্যাক্স কারণে সার্ভার দ্বারা বোঝা যাবে পারে" পারেন হতে পারি অনুরোধ (উদাহরণস্বরূপ, এক HTTP- র হেডার বিকৃত হচ্ছে) অথবা ডেটা অনুরোধ দ্বারা বাহিত (উদাহরণস্বরূপ, একটি JSON- মান অনুপস্থিত) ?
এমসির সম্রাট

2
বিদ্যা বলেছেন, "এক্সএমএল কখনই স্কিমা বৈধতা পাস করবে না"। পয়েন্ট হ'ল এক্সএমএল পার্সারগুলি নথির সু-গঠন (যেমন সিনট্যাক্টিক্যালি সাউন্ড) এবং বৈধ (অর্থাত শব্দার্থিক শব্দ, যেমন একটি স্কিমা অনুযায়ী) এর মধ্যে পার্থক্য করে। 400 কোডটির বিবরণ হ'ল "অনুরোধটি ত্রুটিযুক্ত সিনট্যাক্সের কারণে সার্ভারের দ্বারা বুঝতে পারা যায়নি " - সুতরাং এটি বৈধতা ত্রুটির জন্য ব্যবহার করা উচিত নয়, ইমো।
মার্টিন লাই

@Vidya stackoverflow.com/questions/42851301/... এই ত্রুটি আমি এই ত্রুটির অনুরূপ একই সমস্যা সম্মুখীন হচ্ছি কটাক্ষপাত করা যদি আপনি দয়া করে সহায়তা আমাকে জানতে
মোহন গোপী

74

W3.org থেকে

10.4.1 400 খারাপ অনুরোধ

অনুরোধটি ত্রুটিযুক্ত সিনট্যাক্সের কারণে সার্ভারের দ্বারা বোঝা গেল না। ক্লায়েন্ট পরিবর্তন ছাড়া অনুরোধ পুনরাবৃত্তি করা উচিত।


10
ত্রুটি 400 ফিরিয়ে দেওয়ার যথার্থতা কোনও মান বনাম কোনও ক্ষেত্রের উপর ভিত্তি করে নয়, সামগ্রিকভাবে অনুরোধের ভিত্তিতে। আমার মনে হয় এইচটিটিপি 400 যাওয়ার ভাল উপায়
জেসন স্পারস্ক

আপনি কী বোঝাতে চেয়েছেন যে 400 টি প্রতিক্রিয়া ক্লায়েন্টদের বলতে ব্যবহার করা যেতে পারে যে অনুরোধে যে কোনও কিছু, যেমন url, শিরোনাম, বডি ইত্যাদি, ভুল হতে পারে এবং কেবল শরীর নয়?
মাস্টারজয়ে 2

3
ইউআরএল-এর জন্য সঠিক কোডটি 404, শিরোলেখগুলির জন্য, আমি অনুমান করি এটি একটি টস আপ হয়েছে, 403 (নিষিদ্ধ) সঠিক পথে যাওয়ার মতো মনে হচ্ছে যদি শিরোনাম পরিচয় প্রত্যাখ্যান করে তবে শিরোনাম যদি আউটপুট ফর্ম্যাট নির্ধারণ করে? আমি মনে করি যে 400 টির জন্য সঠিক বলে মনে করি সেই একমাত্র পথটি এমন পরিস্থিতিতে যেখানে কোনও পদক্ষেপের জন্য অনুরোধ করা হচ্ছে যা বুদ্ধিযুক্ত নয় এবং এর পুনরাবৃত্তি করা উচিত নয়। আমি এই উত্তরটি 4 বছর আগে লিখেছি, আজকাল আমার মনে হচ্ছে এমনকি ত্রুটিগুলি 200 ফিরে আসা উচিত এবং এই ত্রুটিগুলি কেবলমাত্র HTTP সংক্রমণে প্রযোজ্য হবে, পে-লোডের ক্ষেত্রে নয়।
জেসন স্পারস্কে

1
এই উত্তরটি, এই অনেক কভার যদিও আমি এখনো চার্টের সব দিয়ে পড়েন নি stackoverflow.com/a/34324179/16959
জেসন Sperske

@ জেসনস্পারস্কে লোড ব্যালেন্সার, প্রক্সি এবং অন্যান্য মিডলওয়্যার প্রায়শই রুট, রিপোর্ট এবং মেরামত করতে সহায়তা সংক্রান্ত স্থিতি কোড ব্যবহার করে। ভাগ্যক্রমে "422" এর মতো কোডগুলি স্পষ্টভাবে পে-লোড সম্পর্কিত, সুতরাং পে-লোডের স্থিতি কোডগুলির জন্য বিশেষত কিছু জায়গা রয়েছে।
এরিক অ্যারোনস্টি

53

এইচটিটিপি রেসপন্স কোড নির্বাচন করা বেশ সহজ কাজ এবং সাধারণ নিয়মে বর্ণনা করা যায়। একমাত্র কৌশলযুক্ত অংশ যা প্রায়শই ভুলে যায় তা আরএফসি 7231 থেকে অনুচ্ছেদ 6.5:

হেড অনুরোধটির প্রতিক্রিয়া জানানো ব্যতীত সার্ভারটি ত্রুটির পরিস্থিতির ব্যাখ্যা সহ একটি উপস্থাপনা পাঠাতে হবে এবং এটি কোনও অস্থায়ী বা স্থায়ী অবস্থা কিনা।

বিধিগুলি নিম্নরূপ:

  1. যদি অনুরোধটি সফল হয়, তবে 2XX কোড (পুনর্নির্দেশের জন্য 3xx) ফেরত দিন। যদি কোনও সার্ভারে অভ্যন্তরীণ লজিক ত্রুটি ঘটে থাকে তবে 5XX ফিরে আসুন। ক্লায়েন্টের অনুরোধে যদি কোনও ভুল হয়, তবে 4XX কোডটি ফিরিয়ে দিন।
  2. নির্বাচিত বিভাগ থেকে উপলব্ধ প্রতিক্রিয়া কোড দেখুন। যদি কোনওটির একটির নাম থাকে যা আপনার পরিস্থিতির সাথে ভাল মেলে, আপনি এটি ব্যবহার করতে পারেন। অন্যথায় কেবল x00 কোডে ফ্যালব্যাক (200, 400, 500)। আপনি যদি সন্দেহ করেন তবে x00 কোডে ফ্যালব্যাক।
  3. প্রতিক্রিয়া শৃঙ্খলে ত্রুটির বর্ণনা ফেরত দিন। 4XX কোডগুলির জন্য এটি ক্লায়েন্ট বিকাশকারীদের কারণ বুঝতে এবং ক্লায়েন্টকে ঠিক করার জন্য পর্যাপ্ত তথ্য থাকতে হবে। সুরক্ষার কারণে 5XX জন্য কোনও বিবরণ প্রকাশ করা আবশ্যক।
  4. যদি ক্লায়েন্টকে বিভিন্ন ত্রুটি আলাদা করতে হয় এবং তার উপর নির্ভর করে আলাদা প্রতিক্রিয়া থাকে তবে একটি মেশিনকে পঠনযোগ্য এবং প্রসারণযোগ্য ত্রুটি ফর্ম্যাটটি সংজ্ঞায়িত করুন এবং এটি আপনার এপিআই এর সর্বত্র ব্যবহার করুন। এটি প্রথম থেকেই তৈরি করা ভাল অনুশীলন।
  5. মনে রাখবেন যে ক্লায়েন্ট বিকাশকারী অদ্ভুত কাজ করতে পারে এবং স্ট্রিংগুলি পার্স করার চেষ্টা করতে পারে যা আপনি মানব পাঠযোগ্য বর্ণনা হিসাবে ফিরিয়ে দেন। এবং স্ট্রিংগুলি পরিবর্তন করে আপনি এই জাতীয় খারাপ লিখিত ক্লায়েন্টদের ভেঙে ফেলবেন। সুতরাং সর্বদা মেশিনকে পঠনযোগ্য বর্ণনা সরবরাহ করুন এবং পাঠ্যগুলিতে অতিরিক্ত তথ্যের প্রতিবেদন এড়ানোর চেষ্টা করুন।

সুতরাং আপনার ক্ষেত্রে আমি 400 ত্রুটি ফিরে পেয়েছি এবং ব্যবহারকারী ইনপুট থেকে "রোমান" পাওয়া গেলে এবং ক্লায়েন্টের অবশ্যই নির্দিষ্ট প্রতিক্রিয়া থাকতে হবে:

{
    "error_type" : "unsupported_resource",
    "error_description" : "\"Roman\" is not supported"
}

বা আরও সাধারণ ত্রুটি, যদি এমন পরিস্থিতি কোনও ক্লায়েন্টের মধ্যে একটি খারাপ যুক্তি ত্রুটি হয় এবং এটি প্রত্যাশিত না হয়, যদি না বিকাশকারী কিছু ভুল করে তোলে:

{
    "error_type" : "malformed_json",
    "error_description" : "\"Roman\" is not supported for \"requestedResource\" field"
}

21

উভয় ক্ষেত্রেই "সিনট্যাক্স ত্রুটিযুক্ত" নয়। এটি শব্দার্থবিজ্ঞান যে ভুল। সুতরাং, আইএমএইচও 400 টি অনুপযুক্ত। পরিবর্তে, কোনও 200 টির সাথে কিছু ধরণের ত্রুটিযুক্ত বস্তু যেমন { "error": { "message": "Unknown request keyword" } }বা যাই হোক না কেন ফিরিয়ে দেওয়া উপযুক্ত ।

ক্লায়েন্ট প্রসেসিং পাথ বিবেচনা করুন s সিনট্যাক্সের একটি ত্রুটি (উদাহরণস্বরূপ অবৈধ জেএসওএন) প্রোগ্রামের যুক্তিতে একটি ত্রুটি, অন্য কথায় কোনও এক ধরণের বাগ, এবং সেই অনুযায়ী পরিচালনা করা উচিত, 403 এর মতো একটি উপায়ে, বলুন; অন্য কথায়, খারাপ কিছু ভুল হয়েছে।

অন্যদিকে, একটি প্যারামিটার মানটিতে ত্রুটি শব্দার্থবিজ্ঞানের একটি ত্রুটি, সম্ভবত দুর্বলতা অনুসারে ব্যবহারকারীর ইনপুট বলার কারণে। এটি কোনও HTTP ত্রুটি নয় (যদিও আমি মনে করি এটি একটি 422 হতে পারে)। প্রক্রিয়াজাতকরণের পথটি আলাদা হবে।

উদাহরণস্বরূপ, jQuery এ, আমি একক ত্রুটি হ্যান্ডলারটি লিখতে পছন্দ করব না যা 500 এবং কিছু অ্যাপ-নির্দিষ্ট সিমেটিক ত্রুটির মতো দুটি জিনিস নিয়ে কাজ করে। অন্যান্য ফ্রেমওয়ার্কগুলি, একের জন্য এম্বার, 400 এবং 500 এর মতো এইচটিটিপি ত্রুটিগুলিকেও একইভাবে বড় ফ্যাট ব্যর্থতা হিসাবে বিবেচনা করে, এটি একটি "আসল" ত্রুটি কিনা তা নির্ভর করে প্রোগ্রামারকে কী ঘটছে এবং শাখাটি সনাক্ত করতে হবে।


4
+1, দ্য পিটি ইন এইচটিটিপি প্রোটোকল এবং যদি প্রতিক্রিয়াটি এইচটিটিপি ত্রুটি হয় তবে এটি নিম্ন স্তরের সমস্যা হওয়া উচিত। ট্যারাজাবুরো দ্বারা বর্ণিত পদ্ধতির ব্যবহার করে আমি কয়েক বছর ধরে প্রচুর কোড জটিলতা এড়িয়ে চলেছি। আমরা সবাই যদি এইচটিটিপি ত্রুটিগুলি ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন না ঘটার পরিবর্তে স্থিতিশীল কোডটি লিখি তবে আরআরএসটি জমিতে কম ব্যথা হবে be
ডেম পাইলাফিয়ান

25
200 এর অর্থ হল যে অনুরোধটি প্রক্রিয়া করা হয়েছে, তাই কোনও ক্লায়েন্টের উপর একটি সাধারণ সাফল্যের যুক্তি কার্যকর করা উচিত। এখানে অবশ্যই আমাদের একটি ত্রুটি রয়েছে, সুতরাং প্রতিক্রিয়ার 2XX বা 3xx কোড থাকতে পারে না। এটি 5xx হতে পারে না কারণ এটি একটি সার্ভার সাইড ত্রুটি এবং আমাদের ক্লায়েন্ট পক্ষের একটি ত্রুটি রয়েছে। সুতরাং এটি একটি 4xx ত্রুটি হতে হবে। তবে প্রতিক্রিয়া শৃঙ্খলে ত্রুটির বর্ণনাই সঠিক কাজ এবং এটি এইচটিটিপি স্পেসিফিকেশন দ্বারা পরামর্শ দেওয়া একটি উপায়।
আলেক্সি গুসেইনভ

422 লগার, প্রক্সি এবং অন্যান্য সরঞ্জামগুলির জন্য আরও ভাল
এরিক অ্যারোনাস্টি

16

ব্যবহার 400নির্দেশ করে চেয়ে অন্য কোন উদ্দেশ্যে স্থিতি কোডগুলি অনুরোধ বিকৃত শুধু সাধারণ ভুল।

যদি অনুরোধ application/jsonপেওলডটিতে একটি বাইট-সিকোয়েন্স থাকে যা পার্স করা যায়নি (যদি সার্ভারটি ডেটা ফর্ম্যাটটি প্রত্যাশা করে) তবে উপযুক্ত স্থিতি কোডটি হ'ল 415:

সার্ভারটি অনুরোধটি পরিষেবা দিতে প্রত্যাখ্যান করছে কারণ অনুরোধটির সত্তা অনুরোধ পদ্ধতির জন্য অনুরোধকৃত উত্স দ্বারা সমর্থিত নয় এমন ফর্ম্যাটে রয়েছে।

যদি অনুরোধ পে-লোড সিনট্যাক্টিকভাবে সঠিক তবে শব্দার্থগতভাবে ভুল হয় তবে অ-মানক 422প্রতিক্রিয়া কোড ব্যবহার করা যেতে পারে বা মান 403স্থিতি কোড:

সার্ভারটি অনুরোধটি বুঝতে পেরেছিল তবে তা পূরণ করতে অস্বীকার করছে। অনুমোদন সাহায্য করবে না এবং অনুরোধটির পুনরাবৃত্তি করা উচিত নয়।


3
না, 415 যখন সত্তা ভুল টাইপ যেমন হতে দাবি করা হয় জন্য image/gifপরিবর্তে text/json মধ্যে Content-Type:হেডার। - সম্ভবত এটিও প্রযোজ্য যদি কোনও গুণমানের কোনও উপাদানকে ভুল ধরণের নির্দিষ্ট করা থাকে, সরঞ্জামগুলি দেখুন ietietf.org/html/rfc4918 যেখানে এটি আরও আলোচনার জন্য ৪২২ আলোচনা করে,
জেসেন

8

প্রত্যাশা সম্পর্কে চিন্তা করুন।

ক্লায়েন্ট অ্যাপ হিসাবে, আপনি সার্ভারের দিক থেকে কিছু ভুল হয়ে গেছে কিনা তা জানতে আশা করছেন expect যদি হারিয়ে যাওয়ার সময় সার্ভারকে একটি ত্রুটি নিক্ষেপ করার প্রয়োজন হয় blahবা requestedResource400 টিরও ত্রুটির চেয়ে মানটি যথাযথ হবে।


5

পরিপূরক হিসাবে, যারা আমার হিসাবে একই সমস্যাটি পূরণ করতে পারে, আমি $.ajaxসার্ভারে ফর্ম ডেটা পোস্ট করতে ব্যবহার করছি এবং আমিও পেয়েছি400 প্রথমে ত্রুটিটি ।

ধরুন আমার কাছে জাভাস্ক্রিপ্ট ভেরিয়েবল আছে,

var formData = {
    "name":"Gearon",
    "hobby":"Be different"
    }; 

formDataচাবির মান হিসাবে চলকটি সরাসরি ব্যবহার করবেন নাdataনীচের মতো :

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

পরিবর্তে, এনক্যাপসুলেট করতে JSON.stringify ব্যবহার করুন formData নীচের :

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

যাইহোক, অন্যরা যেমন বর্ণনা করেছেন, ত্রুটিটি কারণ সার্ভারটি অনুরোধটিকে ত্রুটিযুক্ত সিনট্যাক্সের কারণ হিসাবে চিহ্নিত করতে পারে নি, আমি অনুশীলনে কেবল একটি উদাহরণ উত্থাপন করছি। আশা করি এটি কারও সহায়ক হবে।


4

প্রথমে ইউআরএলটি যা ভুল হতে পারে তা পরীক্ষা করুন, যদি এটি সঠিক হয় তবে আপনি যে অনুরোধটি পাঠাচ্ছেন তা যাচাই করুন, সম্ভাব্য কারণটি যা আপনি প্রেরণ করছেন সেটি সঠিক সিনট্যাক্স অনুপস্থিত।

বিস্তারিত জানার জন্য, অনুরোধের স্ট্রিংয়ে বিশেষ অক্ষরগুলি পরীক্ষা করুন। যদি এটি (বিশেষ চর) ব্যবহার করা হয় তবে এটিই এই ত্রুটির মূল কারণ।

অনুরোধটি অনুলিপি করে দেখুন এবং প্রতিটি ট্যাগ ডেটা বিশ্লেষণ করুন।


আমি HTTP 400 ত্রুটি পাচ্ছিলাম, আমি আমার অনুরোধটিতে কিছু বিশেষ অক্ষর রয়েছে তা পরীক্ষা করেছি। এটি ঠিক করতে, আমি বিষয়বস্তুতে অক্ষরেট = UTF-8 পাশ করেছি।
কিসলে কিশোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.