Rohkem
Mida tähendab enctype='multipart/form-data'?
Mida tähendab enctype='multipart/form-data'
HTML-vormis ja millal peaksime seda kasutama?
1281
3
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
.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:
text/plain
.Kui te kirjutate kliendipoolset koodi:
multipart/form-data
, kui teie vorm sisaldab<input type="file">
elemente.multipart/form-data
võiapplication/x-www-form-urlencoded
, kuidapplication/x-www-form-urlencoded
on tõhusam.Kui kirjutate serveripoolset koodi:
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).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.
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õiGET
HTTP meetoditega.POST
] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) ütleb brauserile, et ta koostab HTTP-teate ja paneb kogu sisu sõnumi kehasse (väga kasulik viis, turvalisem ja ka paindlikum).GET
esitab vormi andmed querystring. Sellel on mõned piirangud andmete esituse ja pikkuse kohta.Vormi serverisse saatmise viisi määramine
Atribuut
enctype
on mõttekas ainultPOST
meetodi kasutamisel. Kui see on määratud, annab see brauserile korralduse saata vorm, kodeerides selle sisu kindlal viisil. Alates MDN - Form enctype: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:
See puudutab teid, kui olete arendaja ja teie server töötleb kasutajate poolt esitatud vorme, mis võivad lõpuks sisaldada tundlikku teavet.