Ką reiškia enctype='multipart/form-data'?

Ką reiškia enctype='multipart/form-data' HTML formoje ir kada ją naudoti?

Sprendimas

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:

  • Niekada nenaudokite text/plain.

Kai rašote kliento pusės kodą:

  • naudokite multipart/form-data, kai jūsų formoje yra kokių nors <input type="file"> elementų
  • kitu atveju galite naudoti multipart/form-data arba application/x-www-form-urlencoded, tačiau application/x-www-form-urlencoded bus efektyvesnis

Kai rašote serverio pusės kodą:

  • Naudokite iš anksto parašytą formų tvarkymo biblioteką

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).

Komentarai (5)

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.

Komentarai (5)

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 arba GET _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 naudojamas POST 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

turinio tipas, kuris naudojamas pateikiant formą serveriui.

  • 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.

jautriai, nes juose dažnai būna konfidencialių ar asmeniškai identifikuojanti informacija. Plačiai naudojamas formų "automatinis užpildymas" funkcijos žiniatinklio naršyklėse; jomis gali būti naudojamasi siekiant apgauti vartotojus nesąmoningai siųsti konfidencialią informaciją, kai užpildoma kitokia informacija nekenksmingas užduotis. multipart/form-data nesuteikia jokių funkcijų vientisumui tikrinti, konfidencialumui užtikrinti, naudotojui išvengti suklaidinimo ar kitų saugumo funkcijų; šios problemos turi būti sprendžiamos spręsti formų pildymo ir formų duomenų interpretavimo taikomosiose programose.

Formas gaunančios ir jas apdorojančios programos turi būti atidžios. nepateikti duomenų atgal į formą apdorojančią svetainę, kuri nebuvo numatyta siųsti.

Svarbu interpretuojant Content- Disposition antraštės lauką, kad netyčia nebūtų perrašyti failai, esantys gavėjo failų erdvėje.

Tai aktualu, jei esate programuotojas ir jūsų serveryje bus apdorojamos naudotojų pateiktos formos, kuriose gali būti konfidencialios informacijos.

Komentarai (1)