Mida tähendab enctype='multipart/form-data'?

Mida tähendab enctype='multipart/form-data' HTML-vormis ja millal peaksime seda kasutama?

Lahendus

Kui teete POST-taotluse, peate te taotluse keha moodustavad andmed mingil viisil kodeerima.

HTML-vormid pakuvad kolme kodeerimismeetodit.

  • application/x-www-form-urlencoded (vaikimisi).
  • multipart/form-data.
  • "text/plain".

Töötati application/json lisamisega, kuid sellest on loobutud.

(Teised kodeeringud on võimalikud HTTP-päringute puhul, mis on genereeritud muul viisil kui HTML-vormi esitamisel).

Formaatide spetsiifika ei ole enamiku arendajate jaoks oluline. Olulised punktid on järgmised:

  • Ärge kunagi kasutage text/plain.

Kui te kirjutate kliendipoolset koodi:

  • kasutage multipart/form-data, kui teie vorm sisaldab <input type="file"> elemente.
  • muidu võite kasutada multipart/form-data või application/x-www-form-urlencoded, kuid application/x-www-form-urlencoded on tõhusam.

Kui kirjutate serveripoolset koodi:

  • Kasutage eelkirjutatud vormikäsitlusraamatukogu

Enamik (näiteks Perli CGI->param või PHP $_POST superglobal) hoolitseb teie eest erinevuste eest. Ärge püüdke analüüsida serveri poolt saadud toorsisendit.

Mõnikord leiad raamatukogu, mis ei saa hakkama mõlema formaadiga. Node.js-i kõige populaarsem raamatukogu vormiandmete töötlemiseks on body-parser, mis ei saa hakkama mitmeosalise päringuga (kuid mille dokumentatsioon soovitab mõningaid alternatiive, mis seda suudavad).


Kui te kirjutate (või silute) raamatukogu toorandmete parsimiseks või genereerimiseks, siis peate hakkama muretsema formaadi pärast. Võib-olla tahate seda teada ka huvi pärast.

application/x-www-form-urlencoded on enam-vähem sama, mis päringustring URL-i lõpus.

multipart/form-data on tunduvalt keerulisem, kuid see võimaldab andmete hulka lisada terveid faile. Näide tulemuse kohta on esitatud HTML 4 spetsifikatsioonis.

text/plain on kasutusele võetud HTML 5-ga ja on kasulik ainult silumiseks - spetsifikatsioonist: Ne ei ole arvuti poolt usaldusväärselt tõlgendatavad - ja ma väidan, et teised kombineerituna tööriistadega (nagu enamiku brauserite arendajatööriistade vahekaart Net) on selleks paremad).

Kommentaarid (5)

enctype='multipart/form-data on kodeerimistüüp, mis võimaldab faile saata POST kaudu. Lihtsalt öeldes, ilma selle kodeeringuta ei saa faile saata POST kaudu.

Kui soovite lubada kasutajal laadida faili üles vormi kaudu, peate kasutama seda enctype.

Kommentaarid (5)

Vormi esitamisel annate oma brauserile käsu saata HTTP-protokolli kaudu võrgus sõnum, mis on nõuetekohaselt ümbritsetud TCP/IP-protokolli sõnumistruktuuriga. HTML-lehel on võimalus andmeid serverile saata: kasutades ``s.

Kui vorm esitatakse, luuakse ja saadetakse serverile HTTP päring, mis sisaldab vormi väljade nimesid ja kasutaja poolt täidetud väärtusi. See edastamine võib toimuda POST või GET HTTP meetoditega.

Vormi serverisse saatmise viisi määramine

Atribuut enctype on mõttekas ainult POST meetodi kasutamisel. Kui see on määratud, annab see brauserile korralduse saata vorm, kodeerides selle sisu kindlal viisil. Alates MDN - Form enctype:

Kui meetodi atribuudi väärtus on post, on enctype MIME-vorming. sisu tüüp, mida kasutatakse vormi saatmiseks serverile.

  • application/x-www-form-urlencoded: See on vaikimisi. Kui vorm saadetakse, kogutakse kõik nimed ja väärtused kokku ja URL-kodeerimine tehakse lõplikule stringile.
  • multipart/form-data: Märke EI kodeerita. See on oluline, kui vormil on faili üleslaadimise kontroll. Sa tahad saata faili binaarselt ja see tagab, et bitivoolu ei muudeta.
  • text/plain: Tühikud konverteeritakse, kuid kodeerimist enam ei toimu.

Turvalisus

Vormide saatmisel võivad tekkida mõned turvaprobleemid, nagu on märgitud RFC 7578 Section 7: Multipart form data - Security considerations:

Kõik vormitöötlustarkvarad peaksid käsitlema kasutaja esitatud vormiandmeid. tundlikult, kuna need sisaldavad sageli konfidentsiaalset või isiklikku teavet. isiklikku teavet. Laialdaselt kasutatakse vormide automaatset täitmist. funktsioonid veebibrauserites; neid võidakse kasutada kasutajate petmiseks, et nad saaksid teadmatult saata konfidentsiaalset teavet, kui nad täidavad muidu konfidentsiaalset teavet. multipart/form-data ei paku mingeid funktsioone, mis võimaldaksid > ohutute ülesannete täitmist. terviklikkuse kontrollimiseks, konfidentsiaalsuse tagamiseks, kasutaja > vältimiseks, et segadust või muid turvaelemente; need probleemid peavad olema > ise lahendatud. lahendada vormide täitmise ja andmete tõlgendamise rakendused.

Vorme vastuvõtvad ja neid töötlevad rakendused peavad olema ettevaatlikud. et mitte edastada andmeid tagasi taotluse esitanud vormitöötlemiskohale, mis on ei olnud ette nähtud saata.

Oluline on failinime tõlgendamisel Content- Disposition päise väljale, et mitte kogemata üle kirjutada faile, mis on vastuvõtja failiruumis olevaid faile.

See puudutab teid, kui olete arendaja ja teie server töötleb kasutajate poolt esitatud vorme, mis võivad lõpuks sisaldada tundlikku teavet.

Kommentaarid (1)