- PR -

HTTPマルチパートレスポンスについて

1
投稿者投稿内容
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-08-05 02:11
こんばんは。

Javaの話題というよりもHTTPの仕様に関する質問なのですが、サンプルコード
をjspで作成する都合上ここに投稿させて頂きました。

Q.マルチパートレスポンスはHTTPの仕様上実現出来ないものなのでしょうか?

1つのリクエストに対して複数ファイルのダウンロードダイアログをレスポンス
で返す、ファイルダウンロードをさせつつ画面遷移を行うなどの要件はそこそこ
発生しますが、HTTPの仕様上実現することは出来ないと今まで思っていました。
ただ、RFC2616のマルチパートタイプに関連する項目を眺めてみるとサポートし
ないとは書かれておらず、むしろサポートすべきであると書かれているようにも
解釈出来てしまいます。

http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec3.7.2

ServletResponseクラスのjavadocにもマルチパートレスポンスを返す際の実装手段
が書かれており、サポートされてしかるべきなのでは?
という疑問がますます沸いてきました。

http://www.jajakarta.org/tomcat/servletapi/servletapi-4.0/docs-ja/javax/servlet/ServletResponse.html

ここで、実際にそれらしいコードを書いて動作確認を行ってみたところ、
FireFox,OperaではOK!しかしIEではNGとの結果が出てしまいます。

コード:
<%@ page language="java" contentType="multipart/mixed;boundary=BOUNDARY" %>
--BOUNDARY
Content-Type: text/html

<HTML>
<BODY>
  2ファイルをダウンロードしつつ画面遷移しました^-^
</BODY>
</HTML>

--BOUNDARY
Content-Type: application/vnd.ms-excel;
Content-Disposition: attachment; filename=hoge1.xls

binary data1

--BOUNDARY
Content-Type: application/vnd.ms-excel;
Content-Disposition: attachment; filename=hoge2.xls

binary data2

--BOUNDARY--



私の中では、HTTPの仕様上は実現出来てしかるべきだが、IEが実装を怠っている
ために一般向けのサイトでは使用出来ない仕組みである。
との結論を出したいのですが、RFCの解釈にいまいち(かなり)自信が持てません。
かなり長い間考えて、もやもやした状態が続いているので、
あってるよ!ここの解釈が間違っているよ!などのご意見を頂けたら嬉しいです。

ちなみにJavaScript等を使用した実現方法が知りたいのではなく、
HTTPの仕様の解釈があっているか間違っているかが質問内容となります。
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2005-08-05 09:53
IEではNGということですが、どのような状態がNGなんでしょうか?

引用:

In general, an HTTP user agent SHOULD follow the same or similar
behavior as a MIME user agent would upon receipt of a multipart type.
If an application receives an unrecognized multipart subtype, the
application MUST treat it as being equivalent to "multipart/mixed".

http://www.faqs.org/rfcs/rfc2616.html



MIMEエージェントと同じように動作したほうがいいけど、わからないなら
multipart/mixedがきたものとして扱えってことだから、multipartを
サポートしてないIEだとPlainText扱いになるのが正常動作かな?

#rfcはMUSTだけが最低条件かと
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-08-05 18:28
こんにちは。

回答ありがとうございます。

引用:

#rfcはMUSTだけが最低条件かと



なるほどなるほど。SHOULDまでは満たされる必要があると誤解して
おりました。ちなみに一般的に「仕様としてサポートされている」
といえる基準はどこまでのレベルが入るのでしょうか?
MUSTだけなのかな?

引用:

IEではNGということですが、どのような状態がNGなんでしょうか?



「NG」は表現の仕方が悪かったです。ファイルをダウンロードしつ
つ画面遷移を行ってくれないという意味で記載しました。

引用:

MIMEエージェントと同じように動作したほうがいいけど、わからないなら
multipart/mixedがきたものとして扱えってことだから、multipartを
サポートしてないIEだとPlainText扱いになるのが正常動作かな?



さてさて、
引用:

#rfcはMUSTだけが最低条件かと


のご回答で一度は納得したのですが、以下のような動きをする為に更なる
疑問が生まれてしまいました。

IEではPlainText扱いとなって、ブラウザに--BOUNDARY以下の文字列がその
まま表示されます。
ただよく分からないのが「multipart/hoge」のような存在しないサブタイプ
を指定した場合はjspまるごとのダウンロードダイアログが出現するのですが、
「multipart/mixed」を指定した場合には上記のようにPlainText扱いとして
動作しています。

この動作は
「わからないならmultipart/mixedがきたものとして扱え」
に矛盾しているようにも思えますし、multipart/mixedのタイプを認識して
いるようにも思えるのです。認識したならばPlainText扱いはおかしいよう
な気がするのですが真相はいったいどうなっているのでしょうか・・・?
1

スキルアップ/キャリアアップ(JOB@IT)