メインフォームのContent-Typeを形成

  横行スパ単一ページの時代では、フロントとリアエンドは基本的に(また、このようなファイルのアップロードなどいるFormDataによる)インタラクティブJSONの対話です。以前のJSP、PHP、関係なく、家族の時間の前と後では、相互作用の大部分の前と後のフォームのフォームを介して行われています。ラベルと呼ばれるプロパティから enctype,这属性指定了Form的Content-Type,可取的只有application/x-www-form-urlencoded, multipart/form-data, text/plain。

  Content-Typeの3つの部分を備えます。

  1.   メディアタイプ:リソースまたはデータ・  タイプのMIME  (必須)
  2.   文字セット:文字エンコーディングの標準
  3.   境界:マルチパートエンティティの場合は、境界は、電子メールゲートウェイを介して非常に堅牢であることが知ら文字の集合、ではなく、ブランクの端から1から70文字まで含む、必要とされます。これは、メッセージの複数の部分を囲む境界であります

  アプリケーション/ x-www-form-urlencodedでフォームは、デフォルトのContent-Typeです:フォームが送信されたときのコードは次の基準に従う必要があります。

  1.   キーと値がエンコードされます。スペースは「+」で置き換えられ、参照符号化された予約語対向  [RFC1738に]を、非エスケープ文字'%のHH「」形式(百分の一及び2桁の16進数は、ASCIIコードを表す置換)で置換されています改行は、(CR LFに対応)は「%D0%以下の0A」で置換されencodeURI関数により変換することができ、更なる詳細は、参照してくださいMDNを
  2.   そしてキー値は「=」キーと値の各ペアと、分離する「&」分離します

  例えば:

 

  マルチパート/フォームデータがデータいるFormDataを渡すために使用され、上部の差は、いるFormDataは、大規模なデータ(バイナリデータと非ASCII文字)を転送する別の文書を参照するために使用されている  フォームデータと使用後のX-WWW- form-urlencodedでの本質的な違い  (このブログは非常に詳細を感じるの話)以下のように、符号化規則は以下のとおりです。

  1.   コンテンツ処分場は、フォームデータの値が含まれています
  2.         name属性行、キー名フィールド形式に対応する値
  3.         別個のデータに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--

  

おすすめ

転載: www.cnblogs.com/hanshuai/p/11210803.html