SORU
24 EKİM 2010, Pazar


x-www-form-urlencoded veya çok parçalı/form-data application/?

Veri göndermek için iki yol vardır HTTP: application/x-www-form-urlencoded multipart/form-data. Çoğu tarayıcı sadece multipart/form-data kullanılan dosyaları yüklemek mümkün olduğunu anlıyorum. API bağlamda kodlama türleri (tarayıcı dahil) kullanmak için herhangi bir ek bilgi var mı? Bu, örneğin bağlı olabilir:

  • veri boyutu
  • varlığı olmayan ASCII karakterler
  • (unencoded) ikili veri üzerinde varlığı
  • ek veri transfer ihtiyacı (filename)

Ben temel olarak web üzerinde resmi rehberlik farklı kullanımı içerik türleri ile ilgili bugüne kadar bulunamadı.

CEVAP
1 Kasım 2010, PAZARTESİ


Söz MIME türleri için HTTP Content-Type iki başlıkları user-agent (tarayıcı) desteklemelidir POST istekleri. İstekleri bu tür iki amacı sunucu için ad/değer çiftleri listesini göndermek için. Aktarılan veri miktarı ve türü bağlı olarak, yöntemlerden biri diğerinden daha fazla etkili olacaktır. Nedenini anlamak için, her örtünün altında ne yaptığına bakmak gerekir.

application/x-www-form-urlencoded vücudun HTTP mesaj gönderdi server aslında dev bir sorgu dizesi -- ad/değer çiftleri ayrılmış işareti (&) ve isimleri ayrı değerleri ile eşittir işareti (=). Bu bir örnek olacaktır:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

specification göre:

[Özel] alfasayısal olmayan karakter`%', yüzde işareti ve iki onaltılık basamak karakterin ASCII kodunu gösteren SS ile değiştirilir

Bu değerlerimizi biri var alfasayısal olmayan her bayt için, üç bayt olarak temsil etmek için almaya gidiyor demektir. Büyük ikili dosyaları için, yükü üç katına son derece verimsiz olacak.

O multipart/form-data burada devreye giriyor. Verici ad/değer çiftleri bu yöntem ile, her çift "" MIME iletisi diğer cevaplar açıklandığı gibi). bir parçası olarak gösterilir Parçalar belirli bir dize sınırı (bu sınır dize "değer" yükleri). herhangi oluşmaz özellikle seçilmiş bu yüzden ayrılır Her bölümü ** 9, ve özellikle onun "adı." her bir parça verebilir Content-Disposition, MIME üstbilgi kendi belirledi Her ad/değer çiftinin değer parça MIME iletisinin her bölümü yük. MIME spec bant genişliği kaydetmek için ikili veri (örneğin base 64 veya ham ikili bile) daha verimli bir kodlama seçebilirsiniz -- yük değeri temsil ederken bize daha fazla seçenek sunar.

Neden multipart/form-data her zaman kullanabilirsiniz? Kısa alfasayısal değerleri (en web formları gibi) için, MIME tüm başlıkları ekleme yükü önemli ölçüde daha verimli ikili kodlama herhangi bir tasarruf ağır basar.

Hikayenin özü, eğer iletimi için ikili (non-alfanümerik) veriler (ya da önemli ölçüde boy yük) varsa, multipart/form-data kullanın. Aksi takdirde, application/x-www-form-urlencoded kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Howcast

    Howcast

    4 EKİM 2007
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009