Gesaan dan konteks
RFC 10008, yang diterbitkan pada Jun 2026, mentakrifkan kaedah HTTP QUERY. Ia membolehkan klien meletakkan perihalan kueri dalam kandungan permintaan sambil mengisytiharkan operasi yang selamat dan idempoten pada sumber sasaran. Temu duga ini menguji jurang antara semantik protokol dan realiti infrastruktur; ia tidak memerlukan migrasi serta-merta bagi setiap titik akhir carian POST sedia ada.
Perkara yang dinilai oleh penemu duga
Penemu duga ingin melihat bahawa QUERY bukan sekadar “GET dengan badan” tetapi kaedah yang bebas: kandungan permintaan dan jenis media mengambil bahagian dalam semantik kueri, kunci cache mesti mengambil kira kandungan tersebut, dan panggilan silang asal (cross-origin) secara amnya memerlukan prakerahan (preflight). Jawapan yang kukuh juga merangkumi penemuan dengan OPTIONS atau Accept-Query, sandaran 405 untuk kaedah yang tidak diketahui, log get laluan, dan keserasian WAF.
Soalan untuk dijelaskan sebelum menjawab
Adakah kueri itu benar-benar baca sahaja?
Sahkan bahawa ia tidak mengubah keadaan sumber sasaran. Selamat dan idempoten mengekang semantik sumber sasaran; pelayan masih boleh mencipta sumber tambahan yang membawa hasil, jadi "tiada kesan sampingan" bukanlah janji mutlak bahawa tiada penulisan di mana-mana.
Apakah rangkuman sokongan (support envelope)?
Senaraikan Fetch pelayar, SDK, proksi terbalik, CDN, WAF, jaring perkhidmatan (service mesh), dan klien dalaman yang mesti menerima QUERY. Sesuatu kaedah boleh berfungsi pada pelayan aplikasi tetapi ditolak atau ditulis semula di bahagian perantara.
Apakah keperluan caching dan privasi?
Kandungan kueri boleh mengandungi penapis sensitif. Kenal pasti lapisan mana yang mencatat URI, kandungan permintaan dan kunci cache, kemudian tentukan sama ada caching berkongsi, redaksi, atau laluan POST adalah wajar.
Rangka kerja jawapan 30 saat
“QUERY berguna apabila kandungan kueri yang kompleks memerlukan kaedah yang eksplisit selamat, idempoten, dan boleh dicache. Saya akan menemui sokongan melalui OPTIONS Allow atau medan respons Accept-Query, kemudian mengesahkan proksi, CDN, WAF, dan klien sebenar dalam matriks keserasian. Kunci cache mesti merangkumi kandungan permintaan dan metadata media yang berkaitan, dan panggilan silang asal memerlukan prakerahan. Jika ekosistem belum bersedia, saya akan mengekalkan GET untuk kueri pendek dan POST sebagai laluan keserasian daripada menganggap infrastruktur telah dinaik taraf hanya kerana RFC wujud.”
Jawapan mendalam langkah demi langkah
Langkah 1: Tetapkan sempadan GET, QUERY, dan POST
Kekalkan kueri yang pendek, boleh ditanda buku, dan boleh disalin pada GET. Nilaikan QUERY untuk operasi baca sahaja dengan kandungan kompleks. Kekalkan POST apabila operasi mengubah keadaan, ekosistem kekurangan sokongan, atau keserasian borang dan klien sedia ada adalah penting. Pilih berdasarkan gabungan semantik dan matriks penggunaan.
Langkah 2: Tentukan jenis kandungan dan kontrak perkhidmatan
QUERY mesti membawa Content-Type yang konsisten dengan kandungan permintaannya. Kontrak harus menyatakan format kueri, penomboran halaman, pengisihan, ralat, dan sama ada hasil boleh diambil dengan GET melalui Content-Location atau Location.
Langkah 3: Tambah penemuan keupayaan dan sandaran selamat
Gunakan OPTIONS Allow atau Accept-Query untuk mengumumkan kaedah yang disokong dan jenis media kueri. Jika klien melihat 405, 415, atau penolakan get laluan, ikuti dasar sandaran POST yang jelas; percubaan semula secara buta boleh menggandakan trafik.
Langkah 4: Reka bentuk tingkah laku cache dan cuba semula
QUERY adalah idempoten dan boleh dicuba semula selepas kegagalan sambungan, tetapi kunci cache mesti merangkumi kandungan permintaan dan metadata berkaitan. Sebarang penormalan mesti mengekalkan persetujuan antara semantik cache dan asal, atau satu kueri boleh menerima hasil kueri yang lain.
Langkah 5: Sahkan silang asal dan operasi
QUERY bukan kaedah tersenarai selamat CORS (CORS-safelisted), jadi pelayar mencetuskan prakerahan. Sahkan OPTIONS, Allow, log, metrik, peraturan WAF, had kadar, dan penjejakan mengenali kaedah tersebut, serta rekod kadar sandaran dan punca kegagalan.
Contoh jawapan berkualiti tinggi
Saya tidak akan menggantikan POST secara kelompok hanya kerana RFC 10008 telah diterbitkan. Saya akan mengekalkan penapis kecil yang boleh dikongsi pada GET dan menguji QUERY hanya untuk antara muka baca sahaja dengan kandungan kueri yang besar dan set klien yang terkawal. Pelayan akan memerlukan Content-Type yang betul dan mengiklankan sokongan dengan Accept-Query atau OPTIONS; kunci cache akan merangkumi kandungan permintaan dan jenis media, dan klien silang asal akan melepasi prakerahan. Sebelum pelancaran, pelayar, SDK, get laluan, CDN, WAF, dan jaring perkhidmatan akan menjalankan kueri sebenar sementara kami memantau 405, 415, ketidakpadanan cache, dan pemotongan log. Mana-mana lapisan kritikal yang tidak disokong akan mengekalkan sandaran POST sehingga bukti migrasi mencukupi.
Kesilapan biasa
- Kesilapan: Menganggap QUERY sebagai GET dengan badan. → Sebab ia gagal: Semantik kaedah, caching, dan peraturan penemuan adalah berbeza. → Penyelesaian: Gunakan peraturan RFC untuk kandungan, keselamatan, keidempotensian, dan kunci cache.
- Kesilapan: Menguji pelayan aplikasi sahaja. → Sebab ia gagal: Proksi, WAF, CDN, atau SDK mungkin menolak kaedah yang tidak diketahui. → Penyelesaian: Jalankan matriks keserasian laluan penuh dengan sandaran POST.
- Kesilapan: Membina kunci cache daripada URI sahaja. → Sebab ia gagal: Kandungan yang berbeza boleh menghasilkan hasil perkongsian yang salah. → Penyelesaian: Sertakan kandungan permintaan dan metadata, kemudian uji penormalan.
- Kesilapan: Menganggap keidempotensian sebagai kebenaran untuk mencuba semula selama-lamanya. → Sebab ia gagal: Percubaan semula masih menggunakan sumber dan meningkatkan beban kueri. → Penyelesaian: Gabungkan masa tamat, backoff, had kadar, dan had kerumitan kueri.
Soalan susulan dan respons
Soalan susulan 1: Mengapa tidak menukar setiap kueri kompleks kepada QUERY?
Semantik kaedah hanyalah satu syarat. Klien, proksi, CDN, WAF, dan pemantauan mesti menyokong kaedah tersebut bersama-sama. Apabila kerumitan migrasi dan sandaran melebihi nilainya, POST yang matang kekal lebih selamat.
Soalan susulan 2: Bolehkah respons QUERY dicache?
Boleh, tetapi kunci cache mesti merangkumi kandungan permintaan dan metadata berkaitan, dan cache mesti memahami jenis media. Untuk hasil yang sensitif atau penormalan yang berisiko, hadkan caching berkongsi atau dedahkan sumber yang setara melalui GET.
Soalan susulan 3: Apakah yang berlaku untuk panggilan pelayar silang asal?
QUERY tidak disenaraikan selamat dalam CORS, jadi pelayar menghantar prakerahan. Pelayan mesti menjawab OPTIONS dan membenarkan kaedah, pengepala yang diminta, dan asal; prakerahan yang gagal harus menjadi ralat klien yang jelas.
Soalan susulan 4: Bagaimana jika get laluan yang tidak diketahui mengembalikan 405?
Baca Allow, pilih sandaran POST daripada dasar klien yang diversi, dan rekod punca serta kadarnya. Jangan kelaskan kegagalan kaedah yang tidak diketahui sebagai kegagalan kueri perniagaan.