Top / html / TIPS集

formでPOSTするときの enctype="application/x-www-form-urlencoded" の話

このenctypeを指定することで、

  • URL Encodeしたい(application/x-www-form-urlencoded)
  • プレーンなテキストで(text/plain)
  • メール形式(?)で(multipart/form-data)

などと送信するデータの形式を指定することができます。というかココを見て、ブラウザが適切にform内のデータをエンコーディングしてサーバに送信してくれます。例えば

<form action="[URL]" method="post" enctype="[いろいろ]" name="form1">
  <input type="text" name="textfield" />
  <input type="submit" name="Submit" value="送信" />
</form>

というフォームデータを送る場合

  • enctype=application/x-www-form-urlencoded ならば
    POST /hoge/ HTTP/1.0
    Content-Type: text/plain
    
    --- ヘッダ省略 ---
    
    textfield=aaaaa
    Submit=送信
  • text/plain ならば
    Content-Type: text/plain
    
    --- ヘッダ省略 ---
    
    textfield=aaaaa
    Submit=送信
  • multipart/form-data ならば
    POST /hoge/ HTTP/1.1
    Content-Type: multipart/form-data; boundary=----
    -----------------------41184676334
    
    --- ヘッダ省略 ---
    
    
    
    -----------------------------41184676334
    Content-Disposition: form-data; name="textfield"
    
    aaa
    -----------------------------41184676334
    Content-Disposition: form-data; name="Submit"
    
    送信
    -----------------------------41184676334--
    

となります。ほかにもいろいろ指定できると思うんだけど、たとえば

enctype="text/xml; charset=utf-8"

とやってもIE6.0SP1やFirefoxで1.5.0.1ではムシされて

application/x-www-form-urlencoded

で送信されてました。何でかなあ。。

ちなみにファイルのアップロードなどは、multipart/form-dataを用いるみたいですね。

参考
http://hp.vector.co.jp/authors/VA014833/mailto.html
http://jsgt.org/ajax/ref/test/enctype/test1.htm

リロード

<meta http-equiv="Refresh" content="1;URL=DBTestServlet">

文字列のALT

<acronym title="World Wide Web">WWW</acronym>

文法チェックサイト

http://openlab.ring.gr.jp/k16/htmllint/htmllint.html

改ページ

<BR STYLE="page-break-after: always">

Cookieについて覚え書き

Cookieのパスとか、有効期限とかについてちょっと調べたので、覚え書き。

Cookie cookieExample = new Cookie("CookieExample","CookieExample");
cookieExample.setPath("/CookieExample");
//↑ パスが/CookieExample で始まるもののみに有効(前方一致)
cookieExample.setMaxAge(1); //<-有効時間を1秒にセット

Cookie cookieExample2 = new Cookie("CookieExample2","CookieExample2");
cookieExample2.setPath("/CookieExample2");
//↑ パスが/CookieExample2 で始まるもののみに有効(前方一致)

response.addCookie(cookieExample);
response.addCookie(cookieExample2);

サーバ側でこのように指定してクライアントに返却したときに、ヘッダの内容と次にリクエストされる内容をモニタしてみました。まず上の処理後のレスポンスヘッダは

Set-Cookie: CookieExample=CookieExample; Expires=Thu, 19-Aug-2004 06:11:13 GMT; Path=/CookieExample
Set-Cookie: CookieExample2=CookieExample2; Path=/CookieExample2

て書かれていました。有効期限とか、パスとかを一緒に返してます。

で次に、次のリクエストヘッダは、

  • /CookieExample? にリクエストした場合
    • CookieExample?の方は1秒以内なら有効期限内なのでCookieは
      Cookie: JSESSIONID=hogehoge; CookieExample=CookieExample
      となります。1秒たってると期限切れなのでブラウザはなにもヘッダに載せません(nullで送出もされない)。
    • CookieExample2の方はパスが違うのでブラウザはなにもヘッダに載せません(nullで送出もされない)。
  • /CookieExample2 にリクエストした場合
    • CookieExample?の方は1秒以内なら有効期限内なのでCookieは
      Cookie: JSESSIONID=hogehoge; CookieExample=CookieExample
      となります。1秒たってると期限切れなのでブラウザはなにもヘッダに載せません(nullで送出もされない)。
    • CookieExample2の方はパスが一致してるからブラウザはヘッダに載せてきます。

結果的に/CookieExample2にリクエストした場合にブラウザが載せるCookieは

Cookie: CookieExample2=CookieExample2; JSESSIONID=hogehoge; CookieExample=CookieExample

となりました。

ポイントはパスは前方一致なので/CookieExample2にリクエストしても、CookieExample?のCookieは載ってくるってことと、有効期限が切れたり、無効なCookieはキー値すら載ってこないってこと。。

現在のアクセス:8496


この記事は

選択肢 投票
おもしろかった 2  
そうでもない 0  

Top / html / TIPS集

現在のアクセス:8496


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-03-14 (土) 00:19:14 (5521d)