سولہ سالوں سے، وہ ڈویلپرز جنہیں سرور سے پیچیدہ سوالات پوچھنے کی ضرورت ہوتی تھی، ایک متبادل طریقے (workaround) پر مجبور تھے۔ جب سرچ پے لوڈ (payload) URL کے لیے بہت بڑا ہو جاتا، یا جب نیسٹڈ فلٹرز اور حساس پیرامیٹرز کوئری اسٹرنگ (query string) میں فٹ ہونے سے انکار کر دیتے، تو واحد عملی آپشن POST تھا۔ یہ بائٹس (bytes) تو لے جاتا تھا، لیکن یہ مقصد کے بارے میں غلط بیانی کرتا تھا۔ POST حالت میں تبدیلی (change of state) کا اشارہ دیتا ہے۔ اسے صرف پڑھنے (read-only) کے عمل کے لیے استعمال کرنے سے پورے نیٹ ورک پاتھ—کیشز، پراکسیز اور براؤزرز—کو مجبور ہونا پڑتا تھا کہ وہ ایک سادہ سی تلاش (lookup) کو ایسے سمجھیں جیسے وہ ڈیٹا بیس میں تبدیلی کر سکتا ہے۔

وہ سمجھوتہ آخر کار ختم ہو گیا ہے۔ جون 2026 میں، IETF نے RFC 10008 شائع کیا، جس نے QUERY میتھڈ کو باقاعدہ طور پر معیاری بنا دیا۔ یہ 2010 میں PATCH کے متعارف ہونے کے بعد پہلا نیا HTTP میتھڈ ہے۔ QUERY خاص طور پر ان محفوظ اور idempotent درخواستوں کے لیے ہے جنہیں باڈی (body) کی ضرورت ہوتی ہے۔ یہ سرور کی حالت کو تبدیل نہیں کرتا۔ ایک ہی درخواست کو بار بار دہرانے سے وہی نتیجہ حاصل ہوتا ہے۔ یہ کیش ایبل (cacheable) ہے، جس کا مطلب ہے کہ درمیانی ذرائع (intermediaries) جواب کو اسٹور اور دوبارہ استعمال کر سکتے ہیں۔ اور GET کے برعکس، یہ POST کی طرح ڈیٹا پے لوڈ کی اجازت دیتا ہے۔

GraphQL کوئریز اور پیچیدہ REST سرچ اینڈ پوائنٹس اس کے واضح فاتح ہیں۔ اب آپ کو ساٹھ کوئری پیرامیٹرز کو ایک URL میں ٹھونسنے یا کسی JSON فلٹر دستاویز کو POST باڈی کے اندر چھپانے کی ضرورت نہیں ہے جسے درمیانی ذرائع کیش کرنے سے انکار کر دیں۔ اب مفہوم (semantics) ایماندارانہ ہے۔

لیکن ایک RFC محض سیاہی ہے۔ آپ کی ایپلی کیشن اور آپ کے صارفین کے درمیان انفراسٹرکچر کی ایک موٹی تہہ موجود ہے، اور اس کا زیادہ تر حصہ QUERY کے بارے میں کبھی نہیں سنا۔

کیشنگ کا مسئلہ ابھی حل نہیں ہوا

GET درخواست کے ساتھ، کیشنگ سیدھی سادہ ہے۔ کیش کی (cache key) URI ہے۔ دو صارفین جب ایک ہی URL استعمال کرتے ہیں تو انہیں ایک ہی اسٹور شدہ جواب ملتا ہے، بشرطیکہ ہیڈرز اس کی اجازت دیں۔

QUERY اس ماڈل کو توڑ دیتا ہے کیونکہ درخواست کے پیرامیٹرز باڈی میں ہوتے ہیں۔ کیش کے لیے یہ پہچاننے کے لیے کہ دو درخواستیں ایک جیسی ہیں، کیش کی (cache key) میں URI اور باڈی کے مواد، دونوں کو شامل کرنا ضروری ہے۔ یہ ضرورت عملی طور پر رکاوٹیں پیدا کرتی ہے۔

پہلی بات یہ کہ، ایج سرورز اور CDNs کو ہیش (hash) کیلکولیٹ کرنے سے پہلے پوری درخواست کی باڈی کو بفر کرنا ہوگا۔ اس کے لیے ایج نوڈ پر میموری اور وقت درکار ہوتا ہے۔ دوسری بات یہ کہ، دو منطقی طور پر ایک جیسی کوئریز ایک جیسے بائٹس پیدا نہیں کر سکتیں۔ ایک کلائنٹ {"status":"active"} بھیج سکتا ہے جبکہ دوسرا مختلف وائٹ سپیس یا کی (key) کی ترتیب کے ساتھ {"status": "active"} بھیج سکتا ہے۔ جب تک کیشنگ لیئر باڈی کو پارس، نارملائز اور کینونیکلائز (canonicalize) نہیں کرتی—یعنی JSON کیز کو ترتیب دینا، غیر ضروری فارمیٹنگ کو ہٹانا، اور انکوڈنگ کے فرق کو سنبھالنا—تب تک ایک ہی سوال ہر بار کیش کو مس کر جائے گا۔

سب سے اہم بات یہ ہے کہ، بڑے پیمانے پر استعمال ہونے والے CDNs ابھی QUERY کے لیے درخواست کی باڈی کے ذریعے کیش کو تقسیم نہیں کرتے۔ مثال کے طور پر، Cloudflare اپنے موجودہ فارم میں اس میتھڈ کے لیے باڈی کو کیش کی (cache key) کا حصہ نہیں سمجھتا۔ اگر آپ یہ فرض کرتے ہوئے QUERY استعمال کرتے ہیں کہ کیش ایبل کا مطلب کیش شدہ ہے، تو آپ کو کولیژن (collision) کی غلطیاں، یونیورسل کیش مسز، یا ایسے جوابات مل سکتے ہیں جو غیر متعلقہ درخواستوں میں لیک ہو رہے ہوں۔ جب تک آپ کا فراہم کنندہ (provider) واضح سپورٹ کا اعلان نہیں کرتا، یہ فرض کریں کہ پروڈکشن میں QUERY کا کیش ایبل ہونا معنی خیز نہیں ہے۔

آپ کے ٹولز شاید اسے سب سے پہلے بلاک کریں گے

ہر HTTP درخواست مڈل باکسز (middleboxes) کے ایک ڈھانچے سے گزرتی ہے، اور ان میں سے زیادہ تر اس بارے میں سخت قوانین نافذ کرتے ہیں کہ کون سے میتھڈز قانونی ہیں۔

ویب ایپلی کیشن فائر والز (WAFs) اور API گیٹ ویز اکثر واضح الاؤ لسٹ (allowlists) پر انحصار کرتے ہیں۔ ایک عام رولزٹ GET، POST، PUT، DELETE، اور PATCH کی اجازت دیتا ہے۔ اس کے علاوہ کچھ بھی ڈراپ کر دیا جاتا ہے یا 405 Method Not Allowed کے ساتھ جواب دیا جاتا ہے۔ QUERY آپ کے ایپلی کیشن کوڈ تک پہنچنے سے پہلے ہی ان دیواروں سے ٹکرا جائے گا۔

سیکیورٹی رول انجنز ایک اور رکاوٹ پیدا کرتے ہیں۔ کچھ انٹروژن ڈیٹیکشن سسٹم یہ فرض کرتے ہیں کہ باڈی لے جانے والی درخواست