横行スパ単一ページの時代では、フロントとリアエンドは基本的に(また、このようなファイルのアップロードなどいるFormDataによる)インタラクティブJSONの対話です。以前のJSP、PHP、関係なく、家族の時間の前と後では、相互作用の大部分の前と後のフォームのフォームを介して行われています。ラベルと呼ばれるプロパティから enctype
,这属性指定了Form的Content-Type,可取的只有application/x-www-form-urlencoded, multipart/form-data, text/plain。
Content-Typeの3つの部分を備えます。
- メディアタイプ:リソースまたはデータ・ タイプのMIME (必須)
- 文字セット:文字エンコーディングの標準
- 境界:マルチパートエンティティの場合は、境界は、電子メールゲートウェイを介して非常に堅牢であることが知ら文字の集合、ではなく、ブランクの端から1から70文字まで含む、必要とされます。これは、メッセージの複数の部分を囲む境界であります
アプリケーション/ x-www-form-urlencodedでフォームは、デフォルトのContent-Typeです:フォームが送信されたときのコードは次の基準に従う必要があります。
- キーと値がエンコードされます。スペースは「+」で置き換えられ、参照符号化された予約語対向 [RFC1738に]を、非エスケープ文字'%のHH「」形式(百分の一及び2桁の16進数は、ASCIIコードを表す置換)で置換されています改行は、(CR LFに対応)は「%D0%以下の0A」で置換されencodeURI関数により変換することができ、更なる詳細は、参照してくださいMDNを
- そしてキー値は「=」キーと値の各ペアと、分離する「&」分離します
例えば:
マルチパート/フォームデータがデータいるFormDataを渡すために使用され、上部の差は、いるFormDataは、大規模なデータ(バイナリデータと非ASCII文字)を転送する別の文書を参照するために使用されている フォームデータと使用後のX-WWW- form-urlencodedでの本質的な違い (このブログは非常に詳細を感じるの話)以下のように、符号化規則は以下のとおりです。
- コンテンツ処分場は、フォームデータの値が含まれています
- name属性行、キー名フィールド形式に対応する値
- 別個のデータにCR LF( '%の0Dの%の0A')を持つすべてのMIME伝送、等
例:ルール3を組みます
私たちは、次のフォームがあるとし、multipart / form-dataエンコーディングの下に詳細を取りました
<FORM action="http://server.com/cgi/handle" enctype="multipart/form-data" method="post"> <P> What is your name? <INPUT type="text" name="submit-name"><BR> What files are you sending? <INPUT type="file" name="files"><BR> <INPUT type="submit" value="Send"> <INPUT type="reset"> </FORM>
当用户输入‘Larry’在文本input中,还选择了一个文本文件‘file1.txt’,然后点击提交按钮,传向后台的body体为:
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
我们看到蓝色部分,就是Content-Type,参考上上边提到的,少了charset,多了个boundary(我们知道,在application/x-www-form-urlencoded 中是用‘&’来告诉服务器每一个key和value,比如一个get请求: http://localhost:8080/api?name=John&age=12 ,
那么在multipart/form-data我们怎么告诉服务器呢,答案就是boundary,有了这个字段,服务器就知道一个value是从哪里开始和到哪里结束,这个字段开发者是不用写的,浏览器会自动加上,网上说我们也可以自行设置,比如你可以设置你喜欢的字符,但是我没有成功,每次都是随机的给分配一个,测试如下:)
回到刚才的Form表单,如果用户选择了第二个文件‘file2.gif’,传输结构会是以下:
コンテンツタイプ:マルチパート/フォームデータ; 境界= AaB03x
--AaB03x
コンテンツディスポジション:フォームデータ; NAME =「名を提出し、」
ラリー
--AaB03x
コンテンツディスポジション:フォームデータ; 名前= "ファイル"
のContent-Type:multipart / mixedの。境界= BbC04y
--BbC04y
のContent-処分:ファイル; ファイル名= "FILE1.TXT"
のContent-Type:text / plainの
... FILE1.TXT ...の内容
--BbC04y
コンテンツディスポジション:ファイル; "file2.gif"ファイル名=
のContent-Type:画像/ gif形式の
コンテンツ転送エンコード:バイナリ
file2.gif ...の...内容
--BbC04y--
--AaB03x--