সদৃশ HTTP জিইটি কোয়েরি কীগুলির অনুমোদিত অবস্থান


137

এইচটিটিপি জিইটি কোয়েরি স্ট্রিং সদৃশ ক্ষেত্রের মতো আচরণ সম্পর্কে অনুমোদনমূলক তথ্য খুঁজতে আমার সমস্যা হচ্ছে

http://example.com/page?field=foo&field=bar 

এবং বিশেষত যদি আদেশটি রাখা হয় বা না থাকে। বেশিরভাগ ওয়েব-ওরিয়েন্টেড ভাষাগুলি একটি কী "ক্ষেত্রের" সাথে সম্পর্কিত foo এবং বার উভয়ই একটি অ্যারের উত্পাদন করে তবে আমি জানতে চাই যে এই বিষয়টির বিষয়ে অনুমোদনমূলক বিবৃতি উপস্থিত রয়েছে (যেমন কোনও আরএফসি-তে)। আরএফসি 3986 এর একটি বিভাগ রয়েছে 3.4. Query, যা কী = মান জোড়গুলি বোঝায়, তবে কীভাবে অর্ডার এবং সদৃশ ক্ষেত্রগুলি ব্যাখ্যা করতে হবে ইত্যাদি বিষয়ে কিছুই বলা হয়নি is এটি অর্থবহ করে তোলে, যেহেতু এটি ব্যাকএন্ড নির্ভরশীল, এবং সেই আরএফসি'র সুযোগে নয় ...

যদিও একটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড বিদ্যমান, আমি কৌতূহলের বাইরে একেবারে একটি অনুমোদিত উত্স দেখতে চাই।


সে সম্পর্কেও ভাবছিলাম। অন্য জিনিসটি পোষ্টের বডিগুলির সাথে কোয়েরি স্ট্রিং থেকে প্যারামিটারগুলি মার্জ করার বিষয়ে অনুমান।
থিলো

কোডের পাল্লায়, লোকেরা বলে যে কোনও আদেশের গ্যারান্টি নেই। তবে এই থ্রেডটি পুরানো এবং কেউ কোনওভাবেই
থিলো

1
সার্ভারের পাশাপাশি ক্যোয়ারী স্ট্রিংয়ের ক্রম রাখে, ব্রাউজারগুলি সেগুলি ডিওএম (বা অন্য কোনও নির্দিষ্ট) ক্রমে প্রেরণ করার বিষয়েও প্রশ্ন রয়েছে।
থিলো

উত্তর:


112

এ নিয়ে কোনও অনুমান নেই । আপনি যা পছন্দ করেন তা করতে পারেন।

সাধারণ পদ্ধতির মধ্যে রয়েছে: প্রথম প্রদত্ত, সর্বশেষ প্রদত্ত, অ্যারে-অফ-অল, স্ট্রিং-জয়-উইথ-কমা-অফ-অল।

ধরুন কাঁচা অনুরোধটি হ'ল:

GET /blog/posts?tag=ruby&tag=rails HTTP/1.1
Host: example.com

তারপরে request.query['tag']ভাষা বা কাঠামোর উপর নির্ভর করে ফলন করার জন্য বিভিন্ন বিকল্প রয়েছে :

request.query['tag'] => 'ruby'
request.query['tag'] => 'rails'
request.query['tag'] => ['ruby', 'rails']
request.query['tag'] => 'ruby,rails'

12
প্রশ্নের মূল বিষয় হল, ['রেল', 'রুবি'] (বিভিন্ন ক্রম) এর বিকল্পও রয়েছে।
থিলো

2
যে কেউ অবশ্যই প্রচুর পরিমাণে কাজ করতে পারে।
yfeldblum

7
.NET আপনাকে একটি অ্যারে হিসাবে দেবে (যখন আমি এটি পরীক্ষা করেছিলাম তখন অর্ডারটির বিষয়ে যত্ন নিই না), পিএইচপি আপনাকে সর্বদা সর্বশেষ এবং জাভা (অন্তত জাভা ভিত্তিতে আমি যে পদ্ধতিতে কাজ করেছি) সর্বদা প্রথম মান দেবে। stackoverflow.com/questions/1809494/...
SimonSimCity

17
এটি এইচটিটিপি প্যারামিটার দূষণ নামক আক্রমণটির ভিত্তিতে এবং ওডাব্লুএএসপি দ্বারা বিশ্লেষণ করা হয়েছে: owasp.org/images/b/ba/appsecEU09_CrettoniDiPaola_v0.8.pdf 9 পৃষ্ঠায় আপনি 20 সিস্টেমের একটি তালিকা পাবেন এবং তারা কীভাবে পরিচালনা করবেন তার বিবরণ পাবেন এই ঘটনা.
সাইমনসিমসিটি

1
@ সিমনসিমসিটি ছাড়াও, পিএইচপি প্রকৃতপক্ষে একটি অ্যারে তৈরি করে যদি আপনি প্যারামিটার নামের সাথে একটি indexচ্ছিক সূচক সহ বর্গাকার বন্ধনী যুক্ত করেন।
মার্টিন ইন্ডার

14

আমি নিশ্চিত করতে পারি যে পিএইচপি (অন্তত 4.4.4 সংস্করণ এবং আরও নতুন সংস্করণে) এর মতো এটি কাজ করে:

GET /blog/posts?tag=ruby&tag=rails HTTP/1.1
Host: example.com

ফলাফল স্বরূপ:

request.query['tag'] => 'rails'

কিন্তু

GET /blog/posts?tag[]=ruby&tag[]=rails HTTP/1.1
Host: example.com

ফলাফল স্বরূপ:

request.query['tag'] => ['ruby', 'rails']

এই আচরণটি জিইটি এবং পোস্টের ডেটাগুলির জন্য একই।


1
[]প্রত্যয় সত্যিই অদ্ভুত আচরণের মত মনে হয়, কিন্তু যদি আপনি jQuery এর মাধ্যমে একটি আর্গুমেন্ট হিসাবে একটি অ্যারের পাঠাতে চেষ্টা .ajax(), তাহলে এটি স্বয়ংক্রিয়ভাবে আপনার জন্য তাদের একই ভাবে যুক্ত করতে হবে। দেখে মনে হচ্ছে এটি পিএইচপি ব্যবহারকারীদের সুবিধার জন্য।
ইয়ান ক্লার্ক

4
@ ইয়ান ক্লার্ক এটি পিএইচপি কোডারদের কাছে স্বজ্ঞাত - সাদামাটা পিএইচপি-তে, $foo[] = 1একটি অ্যারেতে সংযোজন করে । জ্যাঙ্গো (পাইথন )ও একই কাজ করে।
ইজকাটা

অ্যাপাচি টোমকেটে যাচাই করতে পারে এটি কমা-কনটেমেটেড স্ট্রিংগুলি দেয়।
গৌরব ওঝা

8

yfeldblum এর উত্তর নিখুঁত।

পঞ্চম আচরণ সম্পর্কে মাত্র একটি নোট যা আমি সম্প্রতি লক্ষ্য করেছি: উইন্ডোজ ফোনে , ডুপ্লিকেট ক্যোয়ারী কী দিয়ে একটি ইউরি দিয়ে একটি অ্যাপ্লিকেশন খোলার ফলে নেভিগেশনটি বন্ধ হবে:

সিস্টেম.আর্গগমেন্টএক্সেপশন: একই কী সহ একটি আইটেম ইতিমধ্যে যুক্ত করা হয়েছিল।

অপরাধী হ'ল System.Windows.Navigation.UriParsingHelper.InternalUriParseQueryStringToDictionary(Uri uri, Boolean decodeResults)

সুতরাং সিস্টেম আপনাকে এটি যেভাবে চান পরিচালনা করতে দেয় না, এটি এটি নিষেধ করবে। আপনার নিজের ফর্ম্যাট (সিএসভি, জেএসএন, এক্সএমএল, ...) এবং ইউরি-পলায়ন-এটি বেছে নেওয়ার একমাত্র সমাধান আপনার কাছে রয়েছে।


2
এটি ডিজাইনের পছন্দের চেয়ে এই ফাংশনের অভ্যন্তরীণ বাগের মতো মনে হয়। সম্ভবত ফাংশনটি এটি তৈরি করছে এমন অভিধানে সদৃশ কীগুলির সন্ধান করে না। অভিধানগুলি অবশ্যই অনন্য কীগুলির প্রয়োজন।
গিলিগোরান

1
সুতরাং ক্লায়েন্ট ব্রাউজার - সার্ভার নয় - এই পরিস্থিতিতে একটি ত্রুটি ছুড়ে দিচ্ছে? এটি একটি বাগের মতো মনে হচ্ছে। ভাবছি আজও যদি এই বাগটি বিদ্যমান থাকে?
জন স্নাইডার

1
@ জনস্কিনিডার হ্যাঁ, ক্লায়েন্ট এই জাতীয় ইউআরআইয়ের জন্য নিক্ষেপ NavigationFailedকরছেন। তবে, আমাকে ক্ষমা করুন, আমি এই পোস্টের এক মাস পরে উইন্ডোজ (ফোন) বিকাশ ফেলেছি এবং আমি ম্যাকোস (আইওএস) এ চলেছি, তাই আজকাল এই সমস্যাটি ট্র্যাক করতে আমি আর সাহায্য করতে পারি না।
সিউর

5

ফ্রেমওয়ার্কগুলির বেশিরভাগ (সমস্ত?) কোনও গ্যারান্টি দেয় না, সুতরাং ধরে নিন যে এলোমেলোভাবে তারা ফিরে আসবে।

সর্বদা নিরাপদ পন্থা নিন।

উদাহরণস্বরূপ, জাভা এইচটিটিপি সার্ভলেট ইন্টারফেস: সার্লেটলেকুইচ.এইচটিএমএল # getParameterValues

এমনকি getParameterMap পদ্ধতিতে প্যারামিটার ক্রমানুসারে কোনও উল্লেখ খুঁজে পাওয়া যায় না (java.util.Map পুনরুদ্ধারের ক্রমটি কোনওটির উপর নির্ভর করা যায় না))


3

সাধারণত, অনুরূপ প্যারামিটার মানগুলি পছন্দ করে

http://example.com/page?field=foo&field=bar

একটি একক ক্যোরিস্ট্রিং প্যারামিটারের ফলাফল যা অ্যারে:

field[0]=='foo'
field[1]=='bar'

আমি এএসপি, এএসপি.এনইটি এবং পিএইচপি 4 এ এই আচরণটি দেখেছি।


হ্যাঁ, এটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড, তবে যতদূর আমি দেখতে পাচ্ছি এর কোনও অনুমোদনমূলক সিদ্ধান্ত নেই। যেহেতু আমি বিশ্বাস করি না যে এটি কেস, তাই আমি এটি সন্ধানে কেবল অযোগ্য am
স্টেফানো বোরিনি

2
হ্যাঁ, সম্ভবত সবাই সেই আচরণ দেখেছেন। প্রশ্নটি ছিল যদি তা আসলে কোথাও নির্দিষ্ট করা থাকে।
থিলো

-1

আমিও একই প্রশ্ন করেছিলাম. আমি কোয়েরিগুলি পার্স এবং স্ট্রিংফাই করতে জাভাস্ক্রিপ্ট ফাংশন লিখছি। আমি জানি না যে ক্যোরির স্ট্রিংয়ের সদৃশ নাম বা বন্ধনীগুলির সাথে নাম রয়েছে, যেমন x [] = 1 এবং x [] = 2, কিছু ভাষা এই ফর্ম্যাটটিকে সমর্থন করলেও তা মানসম্পন্ন কিনা।

তবে আমি দেখতে পেয়েছি যে ক্রোম এবং ফায়ারফক্সের একটি নতুন ক্লাস নাম রয়েছে URLSeachParamsএবং এটি কেবলমাত্র সহজ বিন্যাসটিকে সমর্থন করে name=value। যদি ক্যোয়ারী স্ট্রিংয়ে সদৃশ নাম থাকে তবে কেবল প্রথমটি ফেরত দেওয়ার getপদ্ধতি URLSearchParams

তাই ব্যক্তিগতভাবে, সম্ভবত একটি সরল এবং কোনও সদৃশ নাম url ভবিষ্যতের জন্য অনেক বেশি নিরাপদ।


1
যদি ক্যোয়ারী স্ট্রিংয়ে সদৃশ নাম থাকে তবে ইউআরএল সার্চপ্যারামগুলির পদ্ধতিটি কেবল প্রথমটি ফেরত দেয়। এটি সঠিক নয়: আপনি অ্যারে হিসাবে সমস্ত মান পুনরুদ্ধার করতে পারেনURLSearchParams.getAll('x')
ব্লেইস

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