試食版その漆(1.0.g)から試食版その捌(1.0.h)へのアップデートに伴う仕様変更
試食版その漆 (1.0.g)から試食版その捌 (1.0.h)はMIME-Typeがtext/*はそのまま、それ以外はescape()を使用したエンコード(英数記号以外は全て%nn形式)したテキストデータとして送信します。
Dabten.Net.Load() multipart/form-data仕様
methodを"POST"、enctypeを"multipart/form-data"または"multipart/mixed"を指定してください。
送信データはRFC2388 multipart/form-dataの仕様に準じ、一般的な<form>を使用して送信した場合とほぼ同じになります。
XMLHttpRequestの仕様上、テキストデータでなければならないため、
試食版その漆 (1.0.g)までは全てのデータをencodeURIComponent()を使用したURLエンコード(英数と一部の記号以外を%nn形式する)、
試食版その捌 (1.0.h)はMIME-Typeがtext/*はそのまま、それ以外はescape()を使用したエンコード(英数記号以外は全て%nn形式)したテキストデータとして送信します。
個々のデータの、ヘッダの変更
postDataの内容をオブジェクトの配列にすることで、個々の値に任意のヘッダを付与することができます。
XMLHttpRequestのRequest Headerに相当します。
{name: 'name', filename: 'filename', disposition: 'form-data', contentType: 'text/plain', data: 'data' , headers: {} }
- name (String , 必須)
- フォームフィールドのname属性に相当します。
application/x-www-form-urlencoded使用時のkey=valueの組み合わせでは、keyに相当します。 - filename (String , default: null)
- inputエレメントをtype="file"にしたときに付与されるデータです。
なお、JavaScriptではファイルを送信することはできません - disposition (String , default: null)
- データ種別の指定。
通常はCGIプログラムが無視します。 - contentType (String , default: 'text/plain')
- MIME-Typeの指定
- data (String , default: '')
- 送信データ
application/x-www-form-urlencoded使用時のkey=valueの組み合わせでは、valueに相当します。 - headers (Object , default: null)
- 任意のHTTPヘッダ
---- サンプル ----
var postdata=[ {name:'home', data:'https://home.wi-wi.jp', headers:{'x-header-type':'url'}} ,{name:'sozai', data:'https://sozai.wi-wi.jp/', disposition:'alternate', headers:{'x-header-type':'url'}} ,{name:'wataru', data:'dabten@example.com', disposition:'inline', headers:{'x-header-type':'mail'}} ]; Dabten.Net.Load('sender.cgi', callback, {postData: postdata, method:'POST', enctype:'multipart/form-data'});
サーバーに送信されるデータ
------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="home"; x-header-type: url; http%3A%3D%3Dhome.wi-wi.jp%3D ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: alternate; name="sozai"; x-header-type: url; http%3A%3D%3Dsozai.wi-wi.jp%3D ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: inline; name="wataru"; x-header-type: mail; dabten%40example.com ------boundary--
---- サンプル ----
var tpls={ tpl1: 'container.txt' ,tpl2: 'mytable.txt' }; var postdata={page: '3 and any data' }; Dabten.LoadMixed('sender.cgi', tpls, {postData: postdata});
サーバーに送信されるデータは
------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl1"; filename="container.txt"; tpl1%3Dcontainer.txt ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl2"; filename="mytable.txt"; tpl2%3Dmytable.txt ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="page"; 3%20and%20any%20data ------boundary--
となります。(順不同です。)
テンプレートIDの指定(第二引数)を{tpl1:'container.txt'}
とした場合、
<input type="file" name="tpl1">
というフォームフィールドを作成し、container.txtというファイル名で、内容がtpl1=container.txt
と書かれたテキストファイルを送信した場合と同じになります。
multipart/mixedでは、Content-Dispositionをmixedとし、nameとfilenameはform-dataと同じです。
multipart/form-dataのヘッダ部分(だぶ天が生成します)の改行コードはCRLFですが、postDataに含まれるデータは変換を行いません。
---- サンプル ----
テンプレートのファイル名は省略可能です。
テンプレートIDがname、テンプレートファイル名がfilenameとし、本文にContent-Type: text/plainとして、URLエンコードされたQUERY_STRING形式でプロパティ名とファイル名が連結されます。
テンプレートのファイル名を省略した場合は、Content-Dispositionのfilenameは送信されません。
var tpls={ tpl1: '' ,tpl2: '' }; Dabten.LoadMixed('sender.cgi', tpls);
サーバーに送信されるデータ
------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl1"; tpl1%3D ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl2"; tpl2%3D ------boundary--
Dabten.LoadMixed(uri, tpls, opts) 送信データ仕様
送信データはRFC2388 multipart/form-dataの仕様に準じ、一般的な<form>を使用して送信した場合とほぼ同じになります。
テンプレートIDがname、テンプレートファイル名がfilenameとし、本文にContent-Type: text/plainとして、URLエンコードされたQUERY_STRING形式でプロパティ名とファイル名が連結されます。
---- 引数 ----
uri
データを送受信するCGIアプリケーション、またはテキストファイルを指定
tpls
テンプレートIDとテンプレートファイルの組み合わせ。
CGIアプリケーションで参照しない場合にはファイル名を""としても構いませんが、
テンプレートIDと、受信データに含まれるIDが一致しない場合は、テンプレートの作成を行いません。
opts
multipart/form-dataの付属データとして送信します。
---- サンプル ----
var tpls={ tpl1: 'container.txt' ,tpl2: 'mytable.txt' }; var postdata={page: '3 and any data' }; Dabten.LoadMixed('sender.cgi', tpls, {postData: postdata});
サーバーに送信されるデータは
------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl1"; filename="container.txt"; tpl1%3Dcontainer.txt ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl2"; filename="mytable.txt"; tpl2%3Dmytable.txt ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="page"; 3%20and%20any%20data ------boundary--
となります。(順不同です。)
テンプレートIDの指定(第二引数)を{tpl1:'container.txt'}
とした場合、
<input type="file" name="tpl1">
というフォームフィールドを作成し、container.txtというファイル名で、内容がtpl1=container.txt
と書かれたテキストファイルを送信した場合と同じになります。
multipart/mixedでは、Content-Dispositionをmixedとし、nameとfilenameはform-dataと同じです。
multipart/form-dataのヘッダ部分の改行コードはCRLFですが、postDataに含まれるデータは変換を行いません。
---- サンプル ----
テンプレートのファイル名は省略可能です。
テンプレートのファイル名を省略した場合は、Content-Dispositionのfilenameは送信されません。
var tpls={ tpl1: '' ,tpl2: '' }; Dabten.LoadMixed('sender.cgi', tpls);
サーバーに送信されるデータ
------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl1"; tpl1%3D ------boundary Content-Type: text/plain; charset="utf-8"; Content-Disposition: form-data; name="tpl2"; tpl2%3D ------boundary--
Dabten.LoadMixed() 受信
サーバーが送信すべきデータは、基本的には送信時のフォーマットと同じです。
本文中にテンプレート本文を入れてください。
HTTPヘッダ内のContent-Typeヘッダにcharsetを必ず入れてください
これがないとIE6でフリーズします。
---- サンプル .1 ----
分割されるデータのヘッダにcharset指定は任意ですが、本文中のcharasetはUTF-8で記述してください。
RFCで定義されるmultipart/mixedの改行コードはCRLFですが、だぶ天では改行コードはCR/CRLF/LFのいずれもサポートしています。
Content-Type: multipart/mixed; charset="utf-8"; boundary="abcedfghijklmn" --abcedfghijklmn Content-Type: text/plain; Content-Disposition: form-data; name="tpl1"; filename="container.txt"; <div id="mycontainer"> <h3>Templates 3</h3> <div id="dataes"></div> --abcedfghijklmn Content-Type: text/plain; Content-Disposition: form-data; name="tpl2"; filename="mytable.txt"; <table> <tr>{tpl:value}</tr> </table> --abcedfghijklmn--
---- サンプル .2 ----
MIME-Typeにtext/plainを指定し、1行目にmultipart/mixedのヘッダを出力することで、だぶ天がmultipart/mixedとみなして受信します。
CGIを使えない、またはmultipart/*のデータを作成できない環境でも、通常のテキストファイルから作成することができます。
なおiCabではmultipart/*の受信はできません。
Content-Type: text/plain Content-Type: multipart/mixed; charset="utf-8"; boundary="abcedfghijklmn" --abcedfghijklmn Content-Type: text/plain; Content-Disposition: inline; name="tpl1"; filename="container.txt"; <div id="mycontainer"> <h3>Templates 3</h3> <div id="dataes"></div> --abcedfghijklmn Content-Type: text/plain; Content-Disposition: inline; name="tpl2"; filename="mytable.txt"; <table> <tr>{tpl:value}</tr> </table> --abcedfghijklmn--
---- ダウンロード ----
マルチパートミックスデータ作成用のテンプレートです。
自由に改編して使用してください。