سلسلة الاستعلام
سلسلة الاستعلام هي جزء من مُحدد موقع الموارد الموحد (URL) تُسند قيمًا لمعلمات مُحددة. تتضمن سلسلة الاستعلام عادةً حقولًا تُضاف إلى عنوان URL الأساسي بواسطة متصفح الويب أو تطبيق عميل آخر، على سبيل المثال كجزء من مستند HTML، أو لاختيار مظهر الصفحة، أو للانتقال إلى مواضع مُعينة في محتوى الوسائط المتعددة.

title=Query_string&action=editيستطيع خادم الويب معالجة طلبات بروتوكول نقل النص التشعبي (HTTP) إما بقراءة ملف من نظام ملفاته بناءً على مسار عنوان URL ، أو بمعالجة الطلب باستخدام منطق خاص بنوع المورد. في حال استدعاء منطق خاص، ستكون سلسلة الاستعلام متاحة لهذا المنطق لاستخدامها في المعالجة، بالإضافة إلى جزء المسار من عنوان URL.
بناء
فيما يلي مثال على عنوان URL نموذجي يحتوي على سلسلة استعلام:
https://example.com/over/there?name=ferret
عندما يتلقى الخادم طلبًا لمثل هذه الصفحة، فإنه قد يُشغّل برنامجًا، مُمرِّرًا سلسلة الاستعلام، وهي في هذه الحالة name=ferret، دون تغيير إلى البرنامج. تُستخدم علامة الاستفهام كفاصل، وليست جزءًا من سلسلة الاستعلام. [ 1 ] [ 2 ]
قد توفر أطر عمل الويب طرقًا لتحليل معلمات متعددة في سلسلة الاستعلام، مفصولة بفاصل معين . [ 3 ] في عنوان URL المثال أدناه، يتم فصل معلمات الاستعلام المتعددة بواسطة علامة العطف (& )، &":
https://example.com/path/to/page?name=ferret&color=purple
لا يوجد معيار موحد لبنية سلسلة الاستعلام. وقد تختلف طرق تحليل سلسلة الاستعلام بين المواقع الإلكترونية.
قد يحتوي الرابط في صفحة الويب على عنوان URL يتضمن سلسلة استعلام. يحدد HTML ثلاث طرق يمكن لوكيل المستخدم من خلالها إنشاء سلسلة الاستعلام:
- نموذج HTML عبر العنصر
<form>...</form> - خريطة صور من جانب الخادم عبر السمة
ismapالموجودة على العنصر ذي البنية<img><imgismap> - بحث مفهرس عبر العنصر الذي تم إيقاف استخدامه الآن
<isindex>
نماذج الويب
كان أحد الاستخدامات الأصلية هو احتواء محتوى نموذج HTML ، المعروف أيضًا باسم نموذج الويب. على وجه الخصوص، عند إرسال نموذج يحتوي على الحقول ، field1يتم ترميز محتوى الحقول كسلسلة استعلام على النحو التالي:field2field3
field1=value1&field2=value2&field3=value3...
- يتكون نص الاستعلام من سلسلة من أزواج الحقول والقيم.
- ضمن كل زوج، يتم فصل اسم الحقل وقيمته بعلامة يساوي ، "
=". - يتم فصل سلسلة الأزواج بواسطة علامة العطف (& )، "
&" ( لم تعد الفواصل المنقوطة ";" موصى بها من قبل W3C ، انظر أدناه).
على الرغم من عدم وجود معيار نهائي، فإن معظم أطر عمل الويب تسمح بربط قيم متعددة بحقل واحد (على سبيل المثال field1=value1&field1=value2&field2=value3). [ 4 ] [ 5 ]
يحتوي كل حقل من حقول النموذج على زوج من القيم . قد تتضمن نماذج الويب حقولًا غير مرئية للمستخدم؛ وتُضاف هذه الحقول إلى سلسلة الاستعلام عند إرسال النموذج.field=value
هذا الاتفاق توصية من اتحاد شبكة الويب العالمية (W3C) . [ 3 ] في توصيات عام 1999، أوصى الاتحاد بأن تدعم جميع خوادم الويب فواصل الفاصلة المنقوطة بالإضافة إلى فواصل علامة العطف (& ) [ 6 ] للسماح باستخدام سلاسل الاستعلام application/x-www-form-urlencoded في عناوين URL ضمن مستندات HTML دون الحاجة إلى تهريب علامات العطف. منذ عام 2014، يوصي الاتحاد باستخدام علامة العطف فقط كفاصل للاستعلام. [ 7 ]
لا يتم ترميز محتوى النموذج في سلسلة استعلام عنوان URL إلا عند استخدام طريقة إرسال GET . ويتم استخدام نفس الترميز افتراضيًا عند استخدام طريقة الإرسال POST ، ولكن يتم إرسال النتيجة كنص طلب HTTP بدلاً من تضمينها في عنوان URL مُعدَّل. [ 8 ]
البحث المفهرس
قبل إضافة النماذج إلى لغة HTML، كانت المتصفحات تعرض عنصر <<> كعنصر إدخال نصي من سطر واحد. وكان النص المُدخل في هذا العنصر يُرسل إلى الخادم كسلسلة استعلام مُضافة إلى طلب GET لعنوان URL الأساسي أو عنوان URL آخر مُحدد بواسطة السمة. [ 9 ] وكان الهدف من ذلك هو تمكين خوادم الويب من استخدام النص المُقدم كمعيار استعلام، بحيث يُمكنها إرجاع قائمة بالصفحات المطابقة. [ 10 ]<isindex>action
عند إرسال النص المدخل في عنصر تحكم البحث المفهرس، يتم ترميزه كسلسلة استعلام على النحو التالي:
argument1+argument2+argument3...
- تتكون سلسلة الاستعلام من سلسلة من الوسائط عن طريق تحليل النص إلى كلمات عند المسافات.
- يتم فصل السلسلة بعلامة الجمع ، '
+'.
على الرغم من أن هذا العنصر أصبح مهملاً، ومعظم المتصفحات لم تعد تدعمه أو تعرضه، إلا أن بعض آثار البحث المفهرس لا تزال موجودة. على سبيل المثال، هذا هو مصدر المعالجة الخاصة لعلامة الجمع (+ ) ضمن ترميز النسبة المئوية لعناوين URL في المتصفح (والتي أصبحت اليوم، مع إهمال البحث المفهرس، شبه زائدة عن الحاجة ). كذلك، تقوم بعض خوادم الويب التي تدعم CGI (مثل Apache ) بمعالجة سلسلة الاستعلام وتحويلها إلى وسيطات سطر الأوامر إذا لم تحتوي على علامة يساوي (= ) (وفقًا للقسم 4.4 من CGI 1.1). لا تزال بعض نصوص CGI تعتمد على هذا السلوك التاريخي وتستخدمه لعناوين URL المضمنة في HTML.<isindex>+%20=
ترميز عنوان URL
لا يمكن لبعض الأحرف أن تكون جزءًا من عنوان URL (مثل المسافة)، بينما تحمل أحرف أخرى معنى خاصًا في عنوان URL: على سبيل المثال، يمكن استخدام حرف المسافة# لتحديد قسم فرعي (أو جزء ) من مستند. في نماذج HTML، =يُستخدم حرف المسافة لفصل الاسم عن القيمة. يستخدم بناء جملة URI العام ترميز URL لمعالجة هذه المشكلة، بينما تُجري نماذج HTML بعض الاستبدالات الإضافية بدلًا من تطبيق ترميز النسبة المئوية على جميع هذه الأحرف. تُرمّز المسافة كـ ' +' أو " %20". [ 11 ]
تحدد لغة HTML 5 التحويل التالي لإرسال نماذج HTML باستخدام طريقة "GET" إلى خادم الويب. فيما يلي ملخص موجز للخوارزمية:
- يتم استبدال الأحرف التي لا يمكن تحويلها إلى مجموعة الأحرف الصحيحة بمراجع أحرف رقمية HTML [ 12 ]
- يتم ترميز المسافة كـ '
+' أو '%20' - تُترك الأحرف (
A–Zو–a)z، والأرقام (0–9)، والرموز '~'،' '-،'.'، و' ' كما هي._ +يتم ترميزها بواسطة %2B- يتم ترميز جميع الأحرف الأخرى كتمثيل
%HHسداسي عشري، مع ترميز أي أحرف غير ASCII أولاً باستخدام UTF-8 (أو ترميز محدد آخر).
يُسمح باستخدام الجزء الثماني المقابل لعلامة التلدة (" ~") في سلاسل الاستعلام وفقًا لـ RFC3986، ولكن يجب ترميزه بنسبة مئوية في نماذج HTML إلى " %7E".
إن ترميز المسافة كـ ' +' واختيار الأحرف "كما هي" يميز هذا الترميز عن RFC 3986.
مثال
إذا تم تضمين نموذج في صفحة HTML على النحو التالي:
< form action = "/cgi-bin/test.cgi" method = "get" > < input type = "text" name = "first" /> < input type = "text" name = " second" /> < input type = "submit" / > </form>وإذا أدخل المستخدم السلاسل "هذا حقل" و "هل كان واضحًا (بالفعل)؟" في حقلي النص وضغط على زر الإرسال، فسيتلقى البرنامج (البرنامج المحدد بواسطة سمة العنصر في المثال test.cgiأعلاه action) سلسلة الاستعلام التالية: .formfirst=this+is+a+field&second=was+it+clear+%28already%29%3F
إذا تمت معالجة النموذج على الخادم بواسطة برنامج نصي CGI ، فقد يتلقى البرنامج النصي عادةً سلسلة الاستعلام كمتغير بيئي باسم .QUERY_STRING
التتبع
يمكن للبرنامج الذي يستقبل سلسلة استعلام أن يتجاهل جزءًا منها أو كلها. إذا كان عنوان URL المطلوب يُشير إلى ملف وليس إلى برنامج، فسيتم تجاهل سلسلة الاستعلام بالكامل. ومع ذلك، وبغض النظر عما إذا تم استخدام سلسلة الاستعلام أم لا، يتم تخزين عنوان URL بالكامل، بما في ذلك سلسلة الاستعلام، في ملفات سجل الخادم .
تتيح هذه الحقائق استخدام سلاسل الاستعلام لتتبع المستخدمين بطريقة مشابهة لتلك التي توفرها ملفات تعريف الارتباط HTTP . ولتحقيق ذلك، في كل مرة يقوم المستخدم بتنزيل صفحة، يجب اختيار مُعرّف فريد وإضافته كسلسلة استعلام إلى عناوين URL لجميع الروابط الموجودة في الصفحة. بمجرد أن ينقر المستخدم على أحد هذه الروابط، يتم طلب عنوان URL المقابل من الخادم. وبهذه الطريقة، يتم ربط تنزيل هذه الصفحة بالصفحة السابقة.
على سبيل المثال، عند طلب صفحة ويب تحتوي على ما يلي:
<a href="foo.html"> شاهد صفحتي ! </a> <a href="bar.html"> صفحتي أفضل ! </a>يتم اختيار سلسلة فريدة، مثل تلك e0a72cb2a2c7التي تم اختيارها، ويتم تعديل الصفحة على النحو التالي:
<a href="foo.html?e0a72cb2a2c7"> شاهد صفحتي ! </a> <a href="bar.html?e0a72cb2a2c7"> صفحتي أفضل ! </a>لا يؤثر إضافة سلسلة الاستعلام على طريقة عرض الصفحة للمستخدم. فعندما ينقر المستخدم، على سبيل المثال، على الرابط الأول، يطلب المتصفح الصفحة foo.html?e0a72cb2a2c7من الخادم، الذي يتجاهل ما يليه ?ويرسل الصفحة foo.htmlكما هو متوقع، مضيفًا سلسلة الاستعلام إلى روابطه أيضًا.
بهذه الطريقة، سيحمل أي طلب لاحق للصفحة من هذا المستخدم نفس سلسلة الاستعلام e0a72cb2a2c7، مما يُتيح التأكد من أن جميع هذه الصفحات قد تمت مشاهدتها من قِبل نفس المستخدم. تُستخدم سلاسل الاستعلام غالبًا بالتزامن مع إشارات الويب .
تتمثل الاختلافات الرئيسية بين سلاسل الاستعلام المستخدمة للتتبع وملفات تعريف الارتباط HTTP فيما يلي:
- تشكل سلاسل الاستعلام جزءًا من عنوان URL، وبالتالي يتم تضمينها إذا قام المستخدم بحفظ عنوان URL أو إرساله إلى مستخدم آخر؛ ويمكن الاحتفاظ بملفات تعريف الارتباط عبر جلسات التصفح، ولكن لا يتم حفظها أو إرسالها مع عنوان URL.
- إذا وصل المستخدم إلى نفس خادم الويب من خلال مسارين (أو أكثر) مستقلين، فسيتم تعيين سلسلتي استعلام مختلفتين له، بينما تكون ملفات تعريف الارتباط المخزنة هي نفسها.
- يمكن للمستخدم تعطيل ملفات تعريف الارتباط، وفي هذه الحالة لن يعمل استخدامها للتتبع. ومع ذلك، ينبغي أن يعمل استخدام سلاسل الاستعلام للتتبع في جميع الحالات.
- إن استخدام سلاسل استعلام مختلفة من خلال زيارات مختلفة للصفحة يعني أن الصفحات لا يتم عرضها أبدًا من ذاكرة التخزين المؤقت للمتصفح (أو الخادم الوكيل، إن وجد)، مما يزيد من الحمل على خادم الويب ويبطئ تجربة المستخدم.
مشاكل التوافق
وفقًا لمواصفات بروتوكول HTTP :
توجد في الواقع قيودٌ مختلفةٌ غير رسمية على طول سطر الطلب. يُوصى بأن يدعم جميع مُرسِلي ومُستقبِلي بروتوكول HTTP، كحدٍ أدنى، أطوال سطر طلب تبلغ 8000 بايت. [ 13 ]
إذا كان عنوان URL طويلاً للغاية، فسيفشل خادم الويب مع رمز حالة HTTP 414 Request-URI Too Long .
الحل الشائع لهذه المشاكل هو استخدام POST بدلاً من GET وتخزين المعاملات في نص الطلب. عادةً ما تكون حدود طول نص الطلب أعلى بكثير من حدود طول عنوان URL. على سبيل المثال، الحد الأقصى لحجم POST افتراضيًا هو 2 ميجابايت في IIS 4.0 و128 كيلوبايت في IIS 5.0. يمكن ضبط هذا الحد في Apache2 باستخدام LimitRequestBodyالتوجيه، الذي يحدد عدد البايتات المسموح بها في نص الطلب، من 0 (أي غير محدود) إلى 2147483647 (2 جيجابايت). [ 14 ]
انظر أيضاً
مراجع
- ↑ تي. بيرنرز-لي؛ آر. فيلدينغ؛ إل. ماسينتر (يناير 2005). "RFC 3986" . "مكونات بناء الجملة" (القسم 3).
- ↑ تي. بيرنرز-لي؛ آر. فيلدينغ؛ إل. ماسينتر (يناير 2005). "RFC 3986" . "استعلام" (القسم 3.4).
- 1 2 النماذج في مستندات HTML . W3.org. تم الاطلاع عليه بتاريخ 2013-09-08.
- ↑ "ServletRequest (Java EE 6)" . docs.oracle.com . 2011-02-10 . تم الاطلاع عليه بتاريخ 2013-09-08 .
- ↑ "URI – الموقع الموثوق لمفاتيح استعلام HTTP GET المكررة" . Stack Overflow . 2013-06-09 . تم الاسترجاع في 2013-09-08 .
- ↑ ملاحظات حول الأداء والتنفيذ والتصميم . W3.org. تم الاطلاع عليه بتاريخ 2013-09-08.
- ↑ "4.10 النماذج — HTML5" .
- ↑، HTML5.2، توصية W3C، 14 ديسمبر 2017
- ↑ " < isindex > " . لغة ترميز النص التشعبي (HTML) . مؤرشف من الأصل بتاريخ 19-10-2017 . تم الاطلاع عليه بتاريخ 21-11-2015 .
- ↑ "HTML/Elements/isindex" . ويكي W3C . مؤرشف من الأصل بتاريخ 22-06-2021 . تم الاطلاع عليه بتاريخ 20-03-2020 .
- ↑ "مرجع ترميز عناوين URL في HTML" . W3Schools . تم الاطلاع عليه في 1 مايو 2013 .
- ↑ خوارزمية ترميز application /x-www-form-urlencoded ، HTML5.2، توصية W3C، 14 ديسمبر 2017
- ↑ بنية رسائل HTTP/1.1 وتوجيهها . ietf.org. تم الاطلاع عليه بتاريخ 31-07-2014.
- ↑ core – خادم Apache HTTP . Httpd.apache.org. تم الاطلاع عليه بتاريخ 2013-09-08.
- عنوان URL
- السلاسل النصية (علوم الحاسوب)
