Daugiau
Ką reiškia enctype='multipart/form-data'?
Ką reiškia enctype='multipart/form-data'
HTML formoje ir kada ją naudoti?
1281
3
Ką reiškia enctype='multipart/form-data'
HTML formoje ir kada ją naudoti?
Kai siunčiate POST užklausą, turite tam tikru būdu užkoduoti duomenis, kurie sudaro užklausos turinį.
HTML formose numatyti trys kodavimo būdai.
application/x-www-form-urlencoded
(numatytasis)multipart/form-data
text/plain
Buvo rengiamasi pridėti
application/json
, tačiau to buvo atsisakyta.(Kitos koduotės galimos, kai HTTP užklausos generuojamos naudojant kitas priemones, o ne HTML formos pateikimą.)
Daugumai kūrėjų formatų specifika nėra svarbi. Svarbūs šie dalykai:
text/plain
.Kai rašote kliento pusės kodą:
multipart/form-data
, kai jūsų formoje yra kokių nors<input type="file">
elementųmultipart/form-data
arbaapplication/x-www-form-urlencoded
, tačiauapplication/x-www-form-urlencoded
bus efektyvesnisKai rašote serverio pusės kodą:
Dauguma jų (pavyzdžiui, Perl's
CGI->param
arba PHP's$_POST
superglobal) pasirūpins skirtumais už jus. Nesistenkite analizuoti neapdorotų įvesties duomenų, kuriuos gauna serveris.Kartais rasite biblioteką, kuri negali apdoroti abiejų formatų. Populiariausia Node.js'formų duomenų tvarkymo biblioteka yra body-parser, kuri negali tvarkyti daugiapartinių užklausų (tačiau jos dokumentacijoje rekomenduojama keletas alternatyvių bibliotekų, kurios tai gali daryti).
Jei rašote (arba derinate) biblioteką, skirtą neapdorotiems duomenims analizuoti arba generuoti, reikia pradėti rūpintis formatu. Galbūt taip pat norėsite apie jį žinoti įdomumo dėlei.
application/x-www-form-urlencoded
yra daugiau ar mažiau tas pats, kas užklausos eilutė URL pabaigoje.multipart/form-data
yra gerokai sudėtingesnis, tačiau jis leidžia į duomenis įtraukti ištisus failus. Rezultato pavyzdį galima rasti HTML 4 specifikacijoje.text/plain
įvestas HTML 5 ir yra naudingas tik derinimui - iš specifikacijos: (Jų negalima patikimai interpretuoti kompiuteriu - teigčiau, kad kiti kartu su įrankiais (pavyzdžiui, daugumos naršyklių kūrėjų įrankių skirtuku Net) tam yra tinkamesni).enctype='multipart/form-data
yra kodavimo tipas, leidžiantis siųsti failus per POST. Paprasčiausiai be šios koduotės failų negalima siųsti per POST.Jei norite leisti naudotojui įkelti failą per formą, turite naudoti šį enctype.
Pateikdami formą nurodote naršyklei, kad HTTP protokolu į tinklą išsiųstų pranešimą, tinkamai įkomponuotą į TCP/IP protokolo pranešimo struktūrą. HTML puslapyje yra būdas siųsti duomenis į serverį: naudojant `s.
Pateikus formą, sukuriama HTTP užklausa, kuri siunčiama į serverį, o pranešime pateikiami formos laukų pavadinimai ir naudotojo užpildytos reikšmės. Šis perdavimas gali vykti naudojant
POST
arbaGET
_HTTP metodus.POST
nurodo naršyklei sukurti HTTP pranešimą ir visą turinį įrašyti į pranešimo kūną (tai labai naudingas būdas, saugesnis, be to, lankstus).GET
pateiks formos duomenis kvestionavimo eilutėje. Ji turi tam tikrų apribojimų dėl duomenų pateikimo ir ilgio.Nurodymas, kaip siųsti formą į serverį
Atributas
enctype
turi prasmę tik tada, kai naudojamasPOST
metodas. Nurodytas jis nurodo naršyklei siųsti formą koduojant jos turinį tam tikru būdu. Iš MDN - Form enctype:Kai metodo atributo reikšmė yra post, enctype yra MIME
application/x-www-form-urlencoded
: Tai numatytoji reikšmė. Siunčiant formą, surenkami visi vardai ir reikšmės, o galutinei eilutei atliekamas URL kodavimas.multipart/form-data
: Ženklai NEKODUOJAMI. Tai svarbu, kai formoje yra failo įkėlimo valdiklis. Norite siųsti dvejetainį failą, o tai užtikrina, kad bitų srautas nebus pakeistas.text/plain
: Eilutės konvertuojamos, bet daugiau kodavimas neatliekamas.Saugumas
Siunčiant formas gali kilti tam tikrų saugumo problemų, kaip nurodyta RFC 7578 Section 7: Multipart form data - Security considerations:
Visa formų apdorojimo programinė įranga turėtų apdoroti naudotojo pateiktus formos duomenis.
Tai aktualu, jei esate programuotojas ir jūsų serveryje bus apdorojamos naudotojų pateiktos formos, kuriose gali būti konfidencialios informacijos.