সংক্ষিপ্ত উত্তর: POST অনুরোধগুলিতে, অনুরোধটির "বডি" তে মানগুলি প্রেরণ করা হয়। ওয়েব ফর্মগুলির সাথে এগুলি সম্ভবত application/x-www-form-urlencoded
বা একটি মিডিয়া প্রকারের সাথে প্রেরণ করা হয় multipart/form-data
। ভাষা অথবা অবকাঠামো যা হ্যান্ডেল ওয়েব-অনুরোধ পরিকল্পিত হয়েছে সাধারণত এই ধরনের অনুরোধ সঙ্গে "ডান জিনিস ™" এবং (যেমন নির্দ্ধিধায় সঙ্কেতমুক্ত মান সহজ ব্যবহারের অ্যাক্সেস প্রদান প্রোগ্রামিং $_REQUEST
বা $_POST
পিএইচপি, বা cgi.FieldStorage()
, flask.request.form
পাইথন মধ্যে)।
এবার আসুন কিছুটা খনন করি যা পার্থক্যটি বুঝতে সাহায্য করতে পারে;)
GET
এবং POST
অনুরোধগুলির মধ্যে পার্থক্যটি মূলত অর্থপূর্ণ। এগুলি পৃথকভাবে "ব্যবহৃত" হয়, যা মানগুলি কীভাবে পাস হয় তার পার্থক্য ব্যাখ্যা করে।
কোনও GET
অনুরোধ কার্যকর করার সময় , আপনি একটির জন্য সার্ভারের কাছে, বা সত্তাগুলির একটি সেট জিজ্ঞাসা করেন। ক্লায়েন্টকে ফলাফল ফিল্টার করার অনুমতি দেওয়ার জন্য এটি URL এর তথাকথিত "ক্যোয়ারী স্ট্রিং" ব্যবহার করতে পারে। ক্যোরিয় স্ট্রিংয়ের পরে অংশ ?
। এটি ইউআরআই সিনট্যাক্সের অংশ ।
সুতরাং, আপনার অ্যাপ্লিকেশন কোডের দৃষ্টিকোণ থেকে (অংশটি যা অনুরোধটি গ্রহণ করে), আপনাকে এই মানগুলিতে অ্যাক্সেস পেতে ইউআরআই কোয়েরি অংশটি পরীক্ষা করতে হবে।
মনে রাখবেন কীগুলি এবং মানগুলি ইউআরআইয়ের অংশ। ব্রাউজারগুলি ইউআরআই দৈর্ঘ্যের উপর একটি সীমা চাপিয়ে দিতে পারে । এইচটিটিপি স্ট্যান্ডার্ড বলছে যে এর কোনও সীমা নেই। কিন্তু এই লেখার সময়, বেশিরভাগ ব্রাউজার না URI উল্লিখিত (আমি নির্দিষ্ট মান থাকতে না) সীমিত। GET
অনুরোধগুলি সার্ভারে নতুন তথ্য জমা দেওয়ার জন্য কখনও ব্যবহার করা উচিত নয় । বিশেষত বড় দলিল নয়। তোমরা কোথায় ব্যবহার করা উচিত এর POST
বা PUT
।
একটি POST
অনুরোধ কার্যকর করার সময় , ক্লায়েন্ট আসলে দূরবর্তী হোস্টে একটি নতুন দস্তাবেজ জমা দিচ্ছে। সুতরাং, একটি ক্যোয়ারী স্ট্রিং (শব্দার্থবিজ্ঞান) অর্থ দেয় না। যে কারণে আপনার নিজের অ্যাপ্লিকেশন কোডে তাদের অ্যাক্সেস নেই।
POST
কিছুটা জটিল (এবং আরও নমনীয় উপায় ):
কোনও পোস্টের অনুরোধটি গ্রহণ করার সময়, আপনার সর্বদা একটি "পে-লোড" আশা করা উচিত, বা, HTTP পদে: একটি বার্তা সংস্থা । কোনও মান নেই (যতদূর আমি বলতে পারি Maybe সম্ভবত অ্যাপ্লিকেশন / অক্টেট-স্ট্রিম?) ফর্ম্যাটটি ম্যাসেজের বডিটি নিজেই বেশ বেহুদা । বডি ফর্ম্যাট Content-Type
শিরোনাম দ্বারা সংজ্ঞায়িত করা হয় । এইচটিএমএল FORM
উপাদানটি ব্যবহার করার সময় method="POST"
এটি সাধারণত application/x-www-form-urlencoded
। আর একটি খুব সাধারণ ধরণ হ'ল মাল্টিপার্ট / ফর্ম-ডেটা যদি আপনি ফাইল আপলোড ব্যবহার করেন। তবে এটি কোনও প্রথা থেকে শুরু করে এমনকি কিছু হতে পারে ।text/plain
application/json
application/octet-stream
যে কোনও ক্ষেত্রে, যদি POST
অনুরোধটি এমন কোনও সাথে করা হয় Content-Type
যা অ্যাপ্লিকেশন দ্বারা পরিচালনা করা যায় না, তবে এটি একটি 415
স্থিতি-কোডটি ফিরিয়ে আনবে ।
বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ (এবং / অথবা ওয়েব-ফ্রেমওয়ার্ক) সবচেয়ে সাধারণ প্রকারের (যেমন application/x-www-form-urlencoded
, multipart/form-data
বা application/json
) থেকে ম্যাসেজের বডিটি ডি / এনকোড করার একটি উপায় সরবরাহ করে । সুতরাং যে সহজ। কাস্টম ধরণেরগুলির জন্য সম্ভবত আরও কিছু কাজ করা প্রয়োজন।
উদাহরণস্বরূপ একটি স্ট্যান্ডার্ড এইচটিএমএল ফর্ম এনকোডড নথি ব্যবহার করে, অ্যাপ্লিকেশনটির নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা উচিত:
Content-Type
ফিল্ড পড়ুন
- মানটি যদি কোনও সমর্থিত মিডিয়া-প্রকারের না হয় তবে
415
স্থিতি কোড সহ প্রতিক্রিয়া ফিরিয়ে দিন
- অন্যথায়, বার্তাটির প্রধান থেকে মানগুলি ডিকোড করুন।
আবার, পিএইচপি, বা অন্যান্য জনপ্রিয় ভাষার ওয়েব ফ্রেমওয়ার্কের মতো ভাষা সম্ভবত আপনার জন্য এটি পরিচালনা করবে। এর ব্যতিক্রম 415
ত্রুটি। কোনও অ্যাপ্লিকেশন কোনও অনুমান করতে পারে না যে আপনার অ্যাপ্লিকেশনটি কোন ধরণের-ধরণের প্রকারটি সমর্থন করে এবং / বা সমর্থন সমর্থন করে না। এটি সম্পূর্ণভাবে আপনার জন্য।
একটি PUT
অনুরোধ অনুরোধ হিসাবে ঠিক ঠিক একইভাবে পরিচালনা করা হয় POST
। বড় পার্থক্য হ'ল একটি POST
অনুরোধটি সার্ভারকে সিদ্ধান্ত নিতে দেয় যে কীভাবে একটি নতুন সংস্থান তৈরি করা যায় (এবং যদি হয় তবে)। Icallyতিহাসিকভাবে (এখন অপ্রচলিত আরএফসি 2616 থেকে অনুরোধটি প্রেরিত হয়েছিল এমন ইউআরআইয়ের "অধস্তন" (শিশু) হিসাবে একটি নতুন সংস্থান তৈরি করা ছিল)।
একজন PUT
বিপরীতে অনুরোধ ঠিক "আমানত" একটি সম্পদ অনুমিত হয় এ যে কোনো URI, এবং ঠিক যে সামগ্রী অন্তর্ভুক্ত রয়েছে। বেশিও না, কমও না. ধারণাটি হ'ল ক্লায়েন্ট "পুটিং" এর আগে সম্পূর্ণ সংস্থানটি তৈরি করার জন্য দায়বদ্ধ । প্রদত্ত ইউআরএলটিতে সার্ভারের এটি যেমন রয়েছে তেমন গ্রহণ করা উচিত ।
ফলস্বরূপ, একটি POST
অনুরোধ সাধারণত বিদ্যমান সংস্থানটি প্রতিস্থাপনের জন্য ব্যবহৃত হয় না । একটি PUT
অনুরোধ তৈরি এবং প্রতিস্থাপন উভয়ই করতে পারে ।
সাইড নোট
এছাড়াও " পথের পরামিতি " রয়েছে যা দূরবর্তীগুলিতে অতিরিক্ত ডেটা প্রেরণে ব্যবহার করা যেতে পারে, তবে এগুলি এতটা অস্বাভাবিক, যে আমি এখানে খুব বেশি বিশদে যাব না। তবে, রেফারেন্সের জন্য, এখানে আরএফসির একটি অংশ রয়েছে:
শ্রেণিবদ্ধ পাথগুলিতে বিন্দু-বিভাগগুলি বাদ দিয়ে একটি পাথ বিভাগকে জেনেরিক সিনট্যাক্স দ্বারা অস্বচ্ছ হিসাবে বিবেচনা করা হয়। ইউআরআই উত্পাদনকারী অ্যাপ্লিকেশনগুলি প্রায়শই কোনও বিভাগে অনুমোদিত স্ক্রিন-সুনির্দিষ্ট বা ডেরারফারেন্স-হ্যান্ডলার-নির্দিষ্ট উপ-উপাদানগুলি সীমিত করতে অনুমোদিত অক্ষরগুলি ব্যবহার করে। উদাহরণস্বরূপ, সেমিকোলন (";") এবং সমান ("=") সংরক্ষিত অক্ষরগুলি প্রায়শই সেগমেন্টে প্রযোজ্য পরামিতি এবং পরামিতি মানগুলি ব্যবহার করতে ব্যবহৃত হয়। কমা (",") সংরক্ষিত অক্ষরটি প্রায়শই একই উদ্দেশ্যে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি ইউআরআই প্রযোজক "নাম" এর ১.১ সংস্করণ উল্লেখ উল্লেখ করতে "নাম; ভি = ১.১" এর মতো একটি বিভাগ ব্যবহার করতে পারে, অন্যদিকে একই নামটি বোঝাতে "নাম, ১.১" এর মতো একটি বিভাগ ব্যবহার করা যেতে পারে। প্যারামিটারের ধরনগুলি স্কিম-নির্দিষ্ট শব্দার্থ দ্বারা সংজ্ঞায়িত করা যেতে পারে,
multipart/form-data
। আগ্রহীদের জন্য যদিও এটি সম্পর্কে এখানে একটি প্রশ্ন ।