একটি এইচটিটিপি পুট অনুরোধের একটি বডি অন্তর্ভুক্ত করা প্রয়োজন?


92

স্ট্যান্ডার্ডে এর একটি নির্দিষ্ট স্পেসিফিকেশন খুঁজতে আমার সমস্যা হচ্ছে। আমার একটি এইচটিটিপি ক্লায়েন্ট রয়েছে Content-Length: 0যেখানে আমি একটি বডি নির্দিষ্ট না করে এমন একটি পিটি অনুরোধ করার সময় একটি শিরোনাম এবং এমন একটি সার্ভার নেই যা এই জাতীয় অনুরোধগুলি দ্বারা বিভ্রান্ত হয় এবং আমি ভাবছি যে কোন প্রোগ্রামটি আমাকে দোষ দেওয়া উচিত।


আমি যদি জিজ্ঞাসা করতে পারি তবে আপনি কেন 2009 থেকে কোনও প্রশ্ন সম্পাদনা করবেন?
zmuci

আরও ভাল ফর্ম্যাটিংয়ের জন্য @zmuci?
28 Ван

উত্তর:


83

HTTP অনুরোধগুলির একটি বডি থাকে যদি তাদের একটি সামগ্রী-দৈর্ঘ্য বা স্থানান্তর-এনকোডিং শিরোনাম থাকে ( আরএফসি 2616 4.3 )। যদি অনুরোধটি না থাকে তবে এর কোনও শরীর নেই এবং আপনার সার্ভারকে এটির মতো আচরণ করা উচিত।

এটি বলেছিল যে পিট অনুরোধের কোনও শরীর না থাকার জন্য এটি অস্বাভাবিক, এবং তাই যদি আমি কোনও ক্লায়েন্টকে ডিজাইন করছিলাম যা সত্যিই একটি খালি দেহ পাঠাতে চেয়েছিল, তবে আমি বিষয়বস্তু-দৈর্ঘ্যটি পার করব: ০. পোস্টের পাঠের উপর নির্ভর করে এবং পুট পদ্ধতির সংজ্ঞা ( আরএফসি 2616 9.5, 9.6 ) যে কেউ তর্ক করতে পারে যে শরীর প্রয়োজন হয় - তবে কোনও শরীরকে পরিচালনা করার একটি যুক্তিসঙ্গত উপায় হ'ল শূন্য দৈর্ঘ্যের শরীর ধরে নেওয়া ass


HTTP স্থিতি কোড 200 ("ঠিক আছে"), 201 ("তৈরি করা") এবং 204 ("কোনও সামগ্রী নয়") বোঝায়, একটি PUTঅনুরোধটি মূলত সার্ভারে একটি ফাইল তৈরি বা আপডেট করার জন্য। এবং ফাইল খালি থাকার বিষয়ে অবৈধ কিছু নেই , তাই না?
Ван


4
@ বিডনলান আপনি বলেছিলেন যে খালি শরীরের সাথে একটি পুট অস্বাভাবিক, তবে আমি যদি কোনও ব্যবহারকারীকে সক্ষম বা অক্ষম করতে চাই তবে আমার অনুরোধে আমার কোনও শরীরের প্রয়োজন হবে না, আসলে পিইটি অনুরোধগুলি "/ ব্যবহারকারী / {আইডি} / সক্ষম" হতে পারে বা "/ ব্যবহারকারী / {আইডি} / অক্ষম"।
ভিনিসিয়াস ডি আলমেডা

@ ভিনিসিয়াসে অ্যালমিডা এই সংস্থানগুলি যথাযথ হবে না যদি আপনি রেস্ট স্ট্যান্ডার্ডগুলি মেনে চলার চেষ্টা করছেন। disableএবং enableক্রিয়া হয়। আমি সম্ভবত ব্যবহার করতে পছন্দ PATCHউপর /users/{id}যে ক্ষেত্রে শেষবিন্দু।
ক্রাশ করুন

42

প্রশ্নের উত্তর না দিয়ে, তবে জ্যাক্সাররা কীভাবে আমাকে দেহহীন পিটগুলি ঘন ঘন ব্যবহারের অনুমতি দেয় তা জোর দিয়ে:

দেহহীন পুটের উদাহরণ: ব্যবহারকারীকে অতিরিক্ত অনুমতি দিন।

পুট / প্রশাসক / ব্যবহারকারী / {ব্যবহারকারীর নাম} / অনুমতি / {অনুমতি}


4
ঠিক আমার সমস্যা! আমি একই সিদ্ধান্তে এসেছি। তবে কঠোরভাবে বলতে গেলে, এটি আরএফসির বিরুদ্ধে, যেখানে স্পষ্টভাবে উল্লেখ করা হয়নি, দেহটিকে বিদ্যমান হিসাবে উল্লেখ করা হয়েছে। এটি সমস্যার কারণ হতে পারে তবে আমার অভিজ্ঞতায় সমস্ত আধুনিক ওয়েব সার্ভার / ফ্রেমওয়ার্ক কাজ করবে।
আগস্টন হরভাথ

আমি অনুরূপ ক্ষেত্রে আছি, একটি ব্যবহারকারীর সাথে বিদ্যমান সংস্থানটি সংযুক্ত করার জন্য আমার একটি এপিআই দরকার। আমি একটি পোস্ট ব্যবহারকারী / / ব্যবহারকারীর আইডি / সংস্থানগুলি শরীরের রিসোর্সআইডি সহ ব্যবহার করতে পারি। বা বরং এটি একটি পুট ব্যবহারকারী /: ইউজারিড / রিসোর্স /: রিসোর্সআইডি ফিট করে। এখানে বড় পার্থক্য হ'ল ফার্ট এপিআই হ'ল নন-আদর্শহীন, সুতরাং আমি একই সংস্থানটি কোনও ব্যবহারকারীর সাথে দু'বার যুক্ত করতে পারি।
পুট কলটির

5

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

int x;
int f(){ return x; }

এবং একটি রিমোট ভেরিয়েবল বলা হয় r

একটি পোস্ট সমতুল্য

r=f();

একটি পুট সমান

r=x;

এবং প্রাপ্তি সমান

x=r;

4
এই বনাম পোস্ট রাখা স্পষ্ট উদাহরণ আমি কখনো পড়া করেছি নির্ধারিত আলোচনার বাইরে যদিও
ডিজিটাল বিভ্রম

যদি অনুরোধটির একটি সামগ্রী-দৈর্ঘ্যের শিরোনাম থাকে তবে এর একটি বডি রয়েছে has এটি খালি শরীর হতে পারে তবে এখনও একটি দেহ। কোনও সামগ্রী-দৈর্ঘ্যের শিরোলেখ সহ একটি অনুরোধের বিপরীতে, যার কোনও শরীর নেই, এমনকি খালিও নেই। হ্যাঁ, একটি পুট অনুরোধ, প্রযুক্তিগতভাবে, কঠোরভাবে, একটি শরীর থাকতে হবে। সর্বদা.
পল গ্রোক

এছাড়াও আপনার পোষ্ট উপমাটি আমার কাছে সম্পূর্ণ বিভ্রান্তিকর। যদি আমি আপনার বাকি উপমাগুলির সাথে থাকার চেষ্টা করি তবে এটি সার্ভারের মতো হওয়া উচিত int f(int* resource, int body);এবং তারপরে POST ডাকতে f(&r, x);পারে - যা rসার্ভার উপযুক্ত মনে করে যা করতে পারে না বা করতে পারে । তবে এটি জিনিসগুলিও ফিরে আসতে পারে, তাই ... সম্ভবত আরও পছন্দ y = f(&r, x);
পল গ্রোক

0

সার্ভারের মধ্যে পুট (ক্রিয়া অর্থে) কী হচ্ছে যদি কোনও বিষয়বস্তু না থাকে? বৈশিষ্ট "ঘিরা সত্তা" হিসেবে বিষয়বস্তু উল্লেখ করে, কিন্তু কোন কন্টেন্ট সঙ্গে একটি অনুরোধ কোন ঘিরা সত্তা সার্ভারে করা কিছুই আছে হবে, এবং সেইজন্য।

অবশ্যই, যদি না আপনি সার্ভারের উপর কিছুই রাখতে চান না, সেক্ষেত্রে আপনি সম্ভবত এর পরিবর্তে একটি মুছে ফেলতে চান।


4
আপনার
নির্বাণটি

4
খালি PUT কেবল ঘোষণা করছে যে প্রদত্ত পরিচয় সহ উত্সটি অবশ্যই সার্ভারে উপস্থিত থাকতে পারে যদিও পরিচয়টি ছাড়া এটির কোনও সামগ্রী নেই has মুছে ফেলা থেকে সম্পূর্ণ পৃথক শব্দার্থবিদ্যা।
ইম্রে পহভেল

কল্পনা করুন আপনি কোনও সংস্থান রাখতে চান তবে সমস্ত সার্ভার-সাইড ডিফল্ট গ্রহণ করুন। তা Content-Length: 0নাকি { }জেএসএন-র মতো দেহ হবে?
লুক পুপলেট

4
সুতরাং আপনার কম্পিউটারে একটি ফাঁকা ফাইল নেই , তাই না?
33 Ван

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.