Enhancement(機能追加・改善) #3201
closedactivity/post.json の画像投稿機能をJavaScriptから非同期に呼び出せるようにするための修正
0%
Description
Overview (概要)¶
JSON API の activity/post.json で画像を含むアクティビティの投稿を行う場合、XHR ではファイルのアップロードを行うことが出来ないため iframe 要素を動的に作成してそこで API を呼ぶ必要がある (e.g. jQuery.upload )。
この方法で API を呼び出す場合はレスポンスの Content-Type が application/json
となっていると、iframe 読み込み時にブラウザによるダウンロードダイアログが表示されたり、iframe 要素から取得できる contentWindow.document (または contentDocument) の内容に(ブラウザの拡張機能等によって整形された)HTMLタグが混入したりすることがあるため不都合となる。
このため、activity/post.json (及び、今後追加される画像アップロード機能を含んだAPI) については強制的に Content-Type を text/html
にするオプションが必要である。
Spec (仕様)¶
forceHtml
パラメータを追加、forceHtml=1 の場合は Content-Type を text/html
にする(レスポンス本文はそのまま)
Updated by Youichi Kimura over 12 years ago
- Status changed from New(新規) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 4a8aa98144c10dfca183e1a6293ee7f7849b0621 で適用されました。
Updated by isao sano almost 8 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
対象バージョン変更により修正内容の確認が必要であるため差し戻します。
Updated by isao sano almost 8 years ago
- Target version changed from OpenPNE 3.9.0-old to OpenPNE 3.9.0
Updated by Youichi Kimura almost 8 years ago
- Status changed from Rejected(差し戻し) to Won't fix(対応せず)
- % Done changed from 50 to 0
言い出した当人ではありますが、レスポンスボディに JSON を出力する API で Content-Type: text/html
を使用することは XSS を招く恐れがあるため、このような修正はすべきでないと考えます。
このチケットを作成した当時とはモダンブラウザにおける XHR の対応状況が変わっており、現在では FormData を使用した multipart/form-data のアップロードを用いることで解決が可能です。そのため、iframe を使用したアップロードを行う必要はありません。
http://caniuse.com/#feat=xhr2
XHR2 に対応していないブラウザで問題になるであろう IE9 は、2017/4/11 の Windows Vista サポート終了とともに OpenPNE におけるサポート対象から外れるため、今後はファイルアップロードを伴う API リクエストにおいても XHR が使用されることになるはずです。