URL parametreleri ile sorgu dizeleri arasındaki fark nedir?


92

URL'de parametreler ve sorgu dizeleri arasında pek bir fark görmüyorum. Öyleyse fark nedir ve biri diğerine göre ne zaman kullanılmalıdır?


1
Bir bağlamınız var mı, çünkü bildiğim kadarıyla ikisi genellikle aynı amaçla kullanılıyor - ancak sizin durumunuz bağlama özel olabilir.
Allan S. Hansen

Belirli bir bağlamım yok, genel bir soru. Hangi durumda diğeri yerine birini kullanmalıyım. Bu ikisinin farklı kullanımları olmalı.
Konst

Kişisel olarak - Bir değişken veya yöntem çağrısı bağlamında onlar hakkında konuşurken çoğunlukla word parametresini ve URL bağlamında onlar hakkında konuşurken sorgu dizesini kullanıyorum. (örneğin: sorgu dizesi yöntem için parametrelere bölünmüştür). Ama bu sadece bir dil, bu yüzden bağlam ve durumlar farklı ve ben "hissettiğinizde" herhangi birinin bu ikisinden birini kullanmak için peşine düşeceğinden şüpheliyim :).
Allan S. Hansen

Yanıtlar:


85

Sorgu bileşeni , ilk olarak belirtilir ?bir URI. "Sorgu dizesi" eşanlamlı olabilir (bu terim URI standardında kullanılmaz).

Sorgu bileşenlerine sahip HTTP URI'lerine bazı örnekler:

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b

( sorgu bileşeninde izin verilen karakterlerin listesi )

Sorgu bileşeninin "biçimi" URI yazarlarına bağlıdır. Yaygın bir kural ( ancak URI standardı söz konusu olduğunda bir kuraldan başka bir şey değildir ¹) anahtar-değer çiftleri için sorgu bileşenini, aka. parametreler , yukarıda geçen örnekte gibi: bar1=a&bar2=b.

Bu tür parametreler, diğer URI bileşenlerinde, yani yol² ve parçada da görünebilir. URI standardı söz konusu olduğunda, hangi bileşenin ve hangi formatın kullanılacağı size bağlıdır.

Yol, sorgu ve parçadaki parametrelerin bulunduğu örnek URI:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ URI standardı , sorgu bileşeni hakkında şunları söylüyor :

[…] Sorgu bileşenleri genellikle tanımlayıcı bilgileri "anahtar = değer" çiftleri şeklinde taşımak için kullanılır […]

² URI standardı , yol bileşeni hakkında şunları söyler :

[…] Noktalı virgül (";") ve eşittir ("=") ayrılmış karakterler, genellikle o segment için geçerli parametreleri ve parametre değerlerini sınırlamak için kullanılır. Virgül (",") ayrılmış karakter genellikle benzer amaçlar için kullanılır.


1
Parametre ve sorgu farklıdır. Tools.ietf.org/html/rfc2396.html'deki
başlık

@cowlinator: (RFC 2396 eski, ancak mevcut standart olan RFC 3986, yol bileşenindeki parametreler hakkında benzer şeyler söylüyor ). Onların aynı olduğunu söylemedim, değil mi? URI yazarları olabilir (benim yanıt açıklandığı) sorgu bileşeninde parametrelerini belirlemek ve (referans açıklandığı gibi) aynı zamanda yol bileşeninde parametrelerini belirlemek olabilir - her iki durumda da bu sadece bir kongre, hiçbir şey standart tanımlar. - Cevabıma bir değişiklik önerir misin? OP'nin yoldaki parametreler anlamına geldiğini düşünüyor musunuz?
unor

30

Parametreler, URL yolu içinde görünebilen ve bir noktalı virgül karakteriyle ( ;) başlayabilen anahtar / değer çiftleridir .

Sorgu dizesi yoldan (varsa) sonra görünür ve bir soru işareti karakteri ( ?) ile başlar .

Hem parametreler hem de sorgu dizesi anahtar / değer çiftleri içerir.

Bir GETistekte, parametreler URL'nin kendisinde görünür:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

Bir POSTistekte, parametreler URL'nin kendisinde görünebilir, ancak aynı zamanda veri akışında (içerik olarak bilinir) görünebilir.

Sorgu dizesi her zaman URL'nin bir parçasıdır.

form-dataPOST yöntemi kullanılırken parametreler veri akışına gömülebilir, böylece URL'de görünmeyebilirler. Evet, bir POSTistek parametreleri form verileri olarak ve URL'de tanımlayabilir ve bu tutarsız değildir çünkü parametreler birkaç değere sahip olabilir.

Şimdiye kadar bu davranış için hiçbir açıklama bulamadım. Sanırım bazen bir istekteki parametreleri "göstermek" POST, hatta bir GETisteği işleyen kodun, kodun a POST. Elbette bu, bir URL'deki parametreleri destekleyen sunucu kodu ile çalışabilir.

Daha iyi içgörüler elde edene kadar, parametreleri yalnızca isteklerin form-dataveri akışında kullanmanızı öneririm POST.

Kaynaklar:

Her Geliştiricinin URL'ler Hakkında Bilmesi Gerekenler

RFC 3986

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.