enctype='multipart/form-data' ne anlama geliyor?

Bir HTML formunda enctype='multipart/form-data' ne anlama gelir ve ne zaman kullanmalıyız?

Çözüm

Bir POST isteği yaptığınızda, isteğin gövdesini oluşturan verileri bir şekilde kodlamanız gerekir.

HTML formları üç kodlama yöntemi sağlar.

  • application/x-www-form-urlencoded (varsayılan)
  • multipart/form-data
  • text/plain

Application/json`](http://www.w3.org/TR/html-json-forms/) eklenmesi üzerinde çalışılıyordu, ancak bundan vazgeçildi.

(HTML form gönderimi dışında başka yollarla oluşturulan HTTP isteklerinde diğer kodlamalar mümkündür).

Formatların özellikleri çoğu geliştirici için önemli değildir. Önemli olan noktalar şunlardır:

  • Asla text/plain kullanmayın.

İstemci tarafı kodu yazarken:

  • Formunuz herhangi bir <input type="file"> öğesi içerdiğinde multipart/form-data kullanın
  • Aksi takdirde multipart/form-data veya application/x-www-form-urlencoded kullanabilirsiniz, ancak application/x-www-form-urlencoded daha verimli olacaktır

Sunucu tarafı kodu yazarken:

  • Önceden yazılmış bir form işleme kütüphanesi kullanın

Çoğu (Perl'in CGI->paramı veya PHP'nin $_POST superglobalinin açığa çıkardığı gibi) farklılıkları sizin için halledecektir. Sunucu tarafından alınan ham girdiyi ayrıştırmaya çalışmakla uğraşmayın.

Bazen her iki formatı da işleyemeyen bir kütüphane bulabilirsiniz. Node.js'nin form verilerini işlemek için en popüler kütüphanesi body-parser çok parçalı istekleri işleyemez (ancak bunu yapabilen bazı alternatifler öneren belgelere sahiptir).


Ham verileri ayrıştırmak veya oluşturmak için bir kütüphane yazıyorsanız (veya hata ayıklıyorsanız), format hakkında endişelenmeye başlamanız gerekir. Ayrıca ilgi çekmek için de bunu bilmek isteyebilirsiniz.

application/x-www-form-urlencoded URL'nin sonundaki bir sorgu dizesi ile aşağı yukarı aynıdır.

multipart/form-data` önemli ölçüde daha karmaşıktır, ancak tüm dosyaların verilere dahil edilmesine izin verir. Sonucun bir örneği HTML 4 spesifikasyonunda bulunabilir.

text/plain` HTML 5 tarafından tanıtılmıştır ve yalnızca hata ayıklama için kullanışlıdır - the spec'den: Bilgisayar tarafından güvenilir bir şekilde yorumlanamazlar - ve diğerlerinin araçlarla birlikte (çoğu tarayıcının geliştirici araçlarındaki Net sekmesi gibi) bunun için daha iyi olduğunu iddia ediyorum).

Yorumlar (5)

enctype='multipart/form-data dosyaların bir POST aracılığıyla gönderilmesini sağlayan bir kodlama türüdür. Basitçe söylemek gerekirse, bu kodlama olmadan dosyalar POST aracılığıyla gönderilemez.

Bir kullanıcının bir form aracılığıyla dosya yüklemesine izin vermek istiyorsanız, bu enctype'ı kullanmanız gerekir.

Yorumlar (5)

Bir form gönderirken, tarayıcınıza HTTP protokolü aracılığıyla ağ üzerinde TCP/IP protokolü mesaj yapısına uygun şekilde sarılmış bir mesaj göndermesini söylersiniz. Bir HTML sayfasının sunucuya veri göndermek için bir yolu vardır: ``ları kullanarak.

Bir form gönderildiğinde, bir HTTP İsteği oluşturulur ve sunucuya gönderilirse, mesaj formdaki alan adlarını ve kullanıcı tarafından doldurulan değerleri içerecektir. Bu iletim POST veya GET HTTP yöntemleri ile gerçekleşebilir.

  • POST tarayıcınıza bir HTTP mesajı oluşturmasını ve tüm içeriği mesajın gövdesine koymasını söyler (işleri yapmanın çok kullanışlı bir yolu, daha güvenli ve aynı zamanda esnek).
  • GET form verilerini querystring içinde gönderecektir. Veri gösterimi ve uzunluğu ile ilgili bazı kısıtlamaları vardır.

Formunuzun sunucuya nasıl gönderileceğini belirtme

enctypeözniteliği yalnızcaPOST` yöntemi kullanıldığında anlamlıdır. Belirtildiğinde, tarayıcıya formun içeriğini belirli bir şekilde kodlayarak göndermesi talimatını verir. MDN - Form enctype](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype) adresinden alınmıştır:

Yöntem özniteliğinin değeri post olduğunda, enctype MIME formu sunucuya göndermek için kullanılan içerik türü.

  • application/x-www-form-urlencoded: Bu varsayılandır. Form gönderildiğinde, tüm adlar ve değerler toplanır ve URL Encoding son dize üzerinde gerçekleştirilir.
  • multipart/form-data: Karakterler kodlanmaz. Formda bir dosya yükleme denetimi olduğunda bu önemlidir. Dosyayı ikili olarak göndermek istersiniz ve bu, bit akışının değiştirilmemesini sağlar.
  • text/plain: Boşluklar dönüştürülür, ancak başka kodlama yapılmaz.

Güvenlik

Form gönderirken, RFC 7578 Bölüm 7: Çok parçalı form verileri - Güvenlik hususları'da belirtildiği gibi bazı güvenlik endişeleri ortaya çıkabilir:

Tüm form işleme yazılımları kullanıcı tarafından sağlanan form verilerini ele almalıdır genellikle gizli veya kişisel bilgiler içerdiğinden hassasiyetle tanımlayıcı bilgiler. Form "otomatik doldurma&quot yaygın olarak kullanılmaktadır; web tarayıcılarındaki özellikler; bunlar kullanıcıları kandırmak için kullanılabilir başka türlü tamamlarken bilmeden gizli bilgi göndermek zararsız görevler. multipart/form-data herhangi bir özellik sağlamaz bütünlüğü kontrol etmek, gizliliği sağlamak, kullanıcıdan kaçınmak için karışıklık veya diğer güvenlik özellikleri; bu endişeler form doldurma ve form-veri yorumlama uygulamaları tarafından ele alınmaktadır.

Formları alan ve işleyen uygulamalar dikkatli olmalıdır talep eden form işleme sitesine geri veri sağlamamak için gönderilmesi amaçlanmamıştır.

Content- dosyasının dosya adını yorumlarken önemlidir Disposition başlık alanındaki dosyaların üzerine yanlışlıkla yazılmaması için alıcı'nın dosya alanı.

Bir geliştiriciyseniz ve sunucunuz kullanıcılar tarafından gönderilen ve hassas bilgiler içerebilecek formları işleyecekse bu sizi ilgilendirir.

Yorumlar (1)