Bir HTML formunda enctype='multipart/form-data'
ne anlama gelir ve ne zaman kullanmalıyız?
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:
text/plain
kullanmayın.İstemci tarafı kodu yazarken:
<input type="file">
öğesi içerdiğinde multipart/form-data
kullanınmultipart/form-data
veya application/x-www-form-urlencoded
kullanabilirsiniz, ancak application/x-www-form-urlencoded
daha verimli olacaktırSunucu tarafı kodu yazarken:
Ç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).
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.
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: <form>
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.enctypeözniteliği yalnızca
POST` 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.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" 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.