HTTP İLETİ istekleri, istemciden (tarayıcıdan) ileti gövdesindeki sunucuya ek veriler sağlar. Tersine, ALMAK istekleri URL'deki tüm gerekli verileri içerir. HTML'deki formlar, yöntem = "POST" veya method = "GET" (varsayılan) öğesi. Belirtilen yöntem, form verilerinin sunucuya nasıl gönderileceğini belirler. Yöntem GET olduğunda, tüm form verileri URL'ye kodlanır ve aksiyon Sorgu dizesi parametreleri olarak URL. POST ile form verileri HTTP isteğinin ileti gövdesinde görünür.
ALMAK | İLETİ | |
---|---|---|
Tarih | URL'nin bir parçası oldukları için parametreler tarayıcı geçmişinde kalır | Parametreler tarayıcı geçmişine kaydedilmedi. |
Bookmarked | Yer imi eklenebilir. | Yer imi eklenemez. |
GERİ düğmesi / davranışı yeniden gönderme | GET istekleri yeniden yürütülür, ancak HTML tarayıcı önbelleğinde depolanırsa sunucuya yeniden gönderilemez. | Tarayıcı genellikle kullanıcıyı verilerin yeniden gönderilmesi gerektiği konusunda uyarır. |
Kodlama türü (şifreleme özelliği) | Uygulama / x-www-form-urlencoded | multipart / form-data veya application / x-www-form-urlencoded İkili veriler için çok parçalı kodlama kullanma. |
Parametreler | gönderebilir ancak parametre verileri, istek satırına (URL) ekleyebileceğimiz şeyle sınırlıdır. 2K'dan daha az parametre kullanmak için en güvenli olanı, bazı sunucular 64K'ya kadar işlem yapabilir | Dosya yükleme de dahil olmak üzere parametreleri sunucuya gönderebilir. |
Hacked | Senaryo çocuklarını kesmek daha kolay | Saldırmak daha zor |
Form veri türüyle ilgili kısıtlamalar | Evet, yalnızca ASCII karakterlere izin verilir. | Kısıtlama yok. İkili verilere de izin verilir. |
Güvenlik | GET, POST'a kıyasla daha az güvenlidir, çünkü gönderilen veriler URL'nin bir parçasıdır. Böylece tarayıcı geçmişine ve sunucu günlüklerine düz metin olarak kaydedilir. | Parametreler tarayıcı geçmişinde veya web sunucusu günlüklerinde saklanmadığından POST, GET'ten biraz daha güvenlidir. |
Form veri uzunluğuna ilişkin kısıtlamalar | Evet, form verileri URL'de olduğundan ve URL uzunluğu kısıtlıdır. Güvenli bir URL uzunluk sınırı genellikle 2048 karakterdir, ancak tarayıcıya ve web sunucusuna göre değişir. | Kısıtlama yok |
Kullanılabilirlik | Parola veya diğer hassas bilgileri gönderirken GET yöntemi kullanılmamalıdır. | Parola veya diğer hassas bilgileri gönderirken kullanılan POST yöntemi. |
görünürlük | GET yöntemi herkes tarafından görülebilir (tarayıcının adres çubuğunda görüntülenir) ve gönderilecek bilgi miktarı sınırlamaları vardır. | POST yöntemi değişkenleri URL'de gösterilmez. |
Önbelleğe | Önbelleklenebilir | Önbelleğe alınmamış |
Arasındaki temel fark YÖNTEM = "GET" ve YÖNTEM = "POST" karşılık geldikleri farklı HTTP istekleri, HTTP spesifikasyonlarında tanımlandığı gibi. Her iki yöntem için de gönderme işlemi aynı şekilde başlar - tarayıcı tarafından bir form veri kümesi oluşturulur ve daha sonra enctype özniteliği. İçin YÖNTEM = "POST enctype özellik olabilir Çok parçalı / form- veya Uygulama / x-www-form-urlencoded, oysa YÖNTEM = "GET", bir tek Uygulama / x-www-form-urlencoded izin verilir. Bu form veri kümesi daha sonra sunucuya iletilir.
METHOD = "GET" ile form gönderimi için tarayıcı, URL'nin değerini alarak bir URL oluşturur. aksiyon özellik ekleyerek ? daha sonra form veri kümesini ekleme (application / x-www-form-urlencoded content type kullanılarak kodlanır). Daha sonra tarayıcı bu URL'yi bir bağlantıyı takip ediyormuş gibi (veya kullanıcı URL'yi doğrudan yazmış gibi) işler. Tarayıcı, URL'yi parçalara böler ve bir ana bilgisayarı tanır, ardından bu ana bilgisayara URL'nin geri kalanıyla birlikte bir GET isteği gönderir. Sunucu oradan alır. Bu işlem, form verilerinin ASCII kodlarıyla sınırlı olduğu anlamına gelir. URL'den ASCII biçiminde geçirilirken diğer karakter türlerini kodlamak ve kodunu çözmek için özel dikkat gösterilmelidir..
METHOD = "POST" ile formun gönderilmesi, formun değeri kullanılarak bir POST isteğinin gönderilmesine neden olur aksiyon özelliği ve tarafından belirtilen içerik türüne göre oluşturulan bir mesaj enctype nitelik.
Form verileri, URL'nin bir parçası olarak ALMAK kullanıldı --
Prensip olarak, gönderilen form verilerinin işlenmesi, birlikte gönderilip gönderilmemesine bağlıdır. YÖNTEM = "GET" veya YÖNTEM = "POST". Veriler farklı şekillerde kodlandığından, farklı kod çözme mekanizmalarına ihtiyaç vardır. Bu nedenle, genel olarak konuşmak gerekirse, YÖNTEM'in değiştirilmesi, senaryoda gönderimi işleyen bir değişikliğe ihtiyaç duyabilir. Örneğin, CGI arabirimini kullanırken, komut dosyası bir ortam değişkenindeki verileri (QUERYSTRING) ALMAK kullanıldı. Ama ne zaman İLETİ kullanıldığında, form verileri standart giriş akışında (stdin) ve okunacak bayt sayısı İçerik uzunluğu üstbilgisi tarafından verilir.
"İdempotent" formlar gönderirken GET önerilir - 'dünyanın durumunu önemli ölçüde değiştirmeyenler'. Başka bir deyişle, yalnızca veritabanı sorgularını içeren formlar. Başka bir perspektif, birkaç idempotent sorgunun tek bir sorgu ile aynı etkiye sahip olacağıdır. Veritabanı güncellemeleri veya e-postaları tetikleme gibi diğer eylemler söz konusuysa, POST kullanılması önerilir.
Dropbox geliştirici blogundan:
tarayıcı belirli bir HTML formunun ne yaptığını tam olarak bilmez, ancak form HTTP GET aracılığıyla gönderilirse, tarayıcı bir ağ hatası varsa gönderimi otomatik olarak yeniden denemenin güvenli olduğunu bilir. HTTP POST kullanan formlar için yeniden denemek güvenli olmayabilir, bu nedenle tarayıcı önce kullanıcıdan onay ister.
Bir "GET" isteği genellikle önbelleğe alınabilirken, bir "POST" isteği zor olabilir. Sorgu sistemleri için, özellikle sorgu dizeleri basitse, bu önemli bir verimlilik etkisine sahip olabilir, çünkü önbellekler en sık sorulan sorgulara hizmet edebilir.
Bazı durumlarda, İLETİ idempotent sorgular için bile önerilir:
Güncelleme: 15 Mayıs 2015: Özellikle HTTPS (TLS / SSL üzerinden HTTP) kullanırken POST, GET'ten daha fazla güvenlik sunuyor mu??
Bu ilginç bir soru. Bir web sayfasına GET isteği yaptığınızı varsayalım:
Https://www.example.com/login.php?user=mickey&passwd=mini ALIN
İnternet bağlantınızın izlendiğini varsayarsak, bu istek hakkında bilgi sahibi snooper tarafından kullanılabilir mi? Bunun yerine POST kullanılırsa ve kullanıcı ve parola verileri POST değişkenlerine dahil edilirse, HTTPS bağlantılarında daha güvenli olur?
Cevap hayır. Böyle bir GET isteği yaparsanız, web trafiğinizi izleyen saldırgan tarafından yalnızca aşağıdaki bilgiler bilinir:
URL'nin yol kısmı - yani istenen gerçek sayfa ve sorgu dizesi parametreleri - hedef sunucuya giderken "kablo üzerinden" korunur (şifrelenir). POST istekleri için durum tamamen aynıdır.
Elbette, web sunucuları erişim günlüklerinde tüm URL'yi düz metin olarak kaydetme eğilimindedir; bu nedenle hassas bilgilerin GET üzerinden gönderilmesi iyi bir fikir değildir. Bu, HTTP veya HTTPS kullanılmasına bakılmaksızın uygulanır.