POST'a karşılık GET

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.

Karşılaştırma Tablosu

POST karşılaştırma tablosuna karşı GET
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ış

İçindekiler: GET vs POST

  • 1 Form Göndermedeki Farklılıklar
    • 1.1 Avantaj ve Dezavantajları
  • 2 Sunucu Tarafı İşlemede Farklılıklar
  • 3 Önerilen Kullanım
  • 4 HTTPS hakkında ne?
  • 5 Kaynakça

Form Gönderimindeki Farklılıklar

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.

Lehte ve aleyhte olanlar

Form verileri, URL'nin bir parçası olarak ALMAK kullanıldı --

  • Form verileri ASCII kodlarıyla sınırlıdır. URL'den ASCII biçiminde geçirilirken diğer karakter türlerini kodlamak ve kodunu çözmek için özel dikkat gösterilmelidir. Diğer taraftan, ikili veriler, resimler ve diğer dosyaların tümü YÖNTEM = "POST"
  • Doldurulan tüm form verileri URL'de görünür. Ayrıca, kullanıcının tarayıcı için web tarama geçmişinde / günlüklerinde de saklanır. Bu konular ALMAK daha az güvenli.
  • Bununla birlikte, URL'nin bir parçası olarak gönderilen form verilerinin bir avantajı, URL'lere yer işareti koyup doğrudan kullanabilir ve form doldurma işlemini tamamen atlayabilmesidir..
  • URL uzunlukları sınırlı olduğu için ne kadar form verisi gönderilebileceği konusunda bir sınırlama var.
  • Komut dosyası dosyaları, sistemdeki güvenlik açıklarını kesmek için daha kolay bir şekilde açığa çıkarabilir. Örneğin, Citibank, URL dizesindeki hesap numaralarını değiştirerek saldırıya uğradı.[1] Elbette, deneyimli bilgisayar korsanları veya web geliştiricileri POST kullanılsa bile bu güvenlik açıklarını açığa çıkarabilir; sadece biraz daha zor. Genel olarak, sunucu istemci tarafından gönderilen verilerden şüphelenmeli ve Güvensiz Doğrudan Nesne Referanslarına karşı koruma sağlamalıdır.

Sunucu Tarafı İşlemedeki Farklılıklar

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.

Önerilen Kullanım

"İ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:

  • Form verileri ASCII olmayan karakterler içeriyorsa (aksanlı karakterler gibi), YÖNTEM = "GET" prensipte uygulanamaz, ancak pratikte çalışabilir (esas olarak ISO Latin 1 karakterleri için).
  • Form veri kümesi büyükse - diyelim, yüzlerce karakter - o zaman YÖNTEM = "GET" bu uzun URL'leri işleyemeyen uygulamalarda pratik sorunlara neden olabilir.
  • Bundan kaçınmak isteyebilirsiniz YÖNTEM = "GET" özellikle URL'de görünmeyerek "gizli" alanları (INPUT TYPE = "HIDDEN") daha gizli hale getirmek için formun nasıl çalıştığını kullanıcılara daha az görünür kılmak için. Ancak gizli alanları kullansanız bile YÖNTEM = "POST", HTML kaynak kodunda görünmeye devam edecekler.

HTTPS ne olacak??

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:

  1. HTTPS bağlantısı kurmuş olmanız
  2. Ana bilgisayar adı - www.example.com
  3. Toplam istek uzunluğu
  4. Yanıtın uzunluğu

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.

Referanslar

  • wikipedia: POST (HTTP)
  • HTTP İstek Yöntemleri
  • HTTP Yayını - W3.org
  • HTTP Get - W3.org
  • HTTPS erişilen URL'leri gizliyor mu?? - Yığın Değişimi