7月 132012
 
Pocket

この問題はIEでのみ発生する。

解決策1

  • flex-config.xmlのtarget-palyerを10以上にする
[xml title=”flex-config.xml”]

10

[/xml]
  • mxmlcで指定するplayerglobal.swcに10のものを使用する
[xml title=”Ant”]





[/xml]

どうやらSWFを1バイト書き換えるだけで動きが変わる。。

SWFヘッダ


1~3バイト目
43 57 53
“CWS”固定文字列。圧縮済みSWFであることを示す。圧縮されてない場合は”FWS”。

4バイト目
09
プレイヤーバージョン。09だとレスポンスヘッダにno-cache系ヘッダがある場合エラーとなるが、0Aだと動く。。
この値は(Flex3では)target-playerオプションで決まる。


というわけで、target-playerオプションの違いによるSSL動作差異はPlayer側の挙動だと断定できる。
ちなみにtarget-playerを変えた場合、MXMLコンパイル時の中間ASファイル(keep-generated-actionscriptオプションで確認可能)は日付コメント以外は全く同一で、SwfScanによるデコンパイル結果も同一となった。

解決策2

  • service-config.xmlのチャネル設定でadd-no-cache-headersをfalseにする(デフォルトtrue)
[xml title=”service-config.xml”]

false

[/xml]
  • IEの[インターネットオプション]>[詳細設定]>[セキュリティ]>[暗号化されたページをディスクに保存しない]にチェックを付ける

解決策3

次期バージョンで修正されるハズ(リポジトリは修正済み)
現行バージョン

  • BlazeDS:3.2
  • LCDS:2.6.1

BlazeDSのSVN@3.xブランチ
http://opensource.adobe.com/svn/opensource/blazeds/branches/3.x
リビジョン5036で修正されている。

Bug: BLZ-347 – Secure amf polling channel not working correctly on IE in BlazeDS/3.x branch.
QA: Yes
Doc: No
Checkintests: Pass

Details: This is BlazeDS part of the fix. For MSIE over HTTPS, we need to add additional Cache-Control headers.

BlazeDS Nightly Build 3.3.0.6224で修正されている事を確認。
ただし、SSLアクセラレータをはさんでいる環境では動作しないケースがある。
その場合、WEBアプリケーションの設定でクッキーセット時にプロキシにクッキーがキャッシュされないような設定になってないか確認する。
※WEBアプリケーションでは、セッションクッキー設定時などにプロキシにクッキーがキャッシュされないよう、クッキーセット時のみNO-CACHEヘッダを追加する設定があることが多い。

WebLogic Serverの場合、以下をweblogic.xmlに追記すればうまくいく事がある。

[xml title=”weblogic.xml”]

true


[/xml]

おまけ1
  • service-config.xmlのadd-no-cache-headersをfalseにした状態で[暗号化されたページをディスクに保存しない]設定にすると、IE初回起動時はファイルロードはHTTPS、AMF通信はHTTPとなる。ブラウザをリロードするとAMF通信がHTTPSに変わる。
  • add-no-cache-headersをtrueにし、[暗号化されたページをディスクに保存しない]のチェックをはずすとリロードしてもAMF通信はHTTPのまま。
  • playerglobal.swcを10のものにしても、target-playerが10未満だと変化なし。
  • target-playerを10以上、playerglobal.swcを9のものにするとコンパイルエラーとなる。
おまけ2

FlashでSSLの時に起きる問題|本を買わずに解決するWeb制作の小技

2)FileReference.uploadが動作しない場合がある。

こちら、Mac全滅。

WINに関しては、マチマチ。

同じ環境でも動く場合と動かない場合があった。

まぁ。よくわかんないけど。

この原因はどうやら。HTTPSにあるようだ。

色々試行錯誤した結果。

URL内にHTTPSのポート番号である、433を記述すると大丈夫なようです。

このような形。

https://www.******.com:433/upload.php

これで動作確認。

全部いけるようになった。

おまけ3

[HOWTO] Internet Explorer でキャッシュを無効にする
ブラウザやアプリケーションサーバー、L7スイッチ等によってキャッシュコントロールは微妙に扱いが異なるので注意。
Pragma:no-cacheはHTTP1.0用。
CacheControl:no-cacheはHTTP1.1用。
Expires:-1はキャッシュ期限切れを示す。キャッシュはされるが即座に有効期限切れとする。比較的万能ぽい。

今回のケースでうまくいかないのはPragma:no-cacheかCacheControl:no-cacheがヘッダに含まれている場合。

参考

バグ No. なし – secure-amf チャネルを Internet Explorer と HTTPS と併用している場合、Flex は応答を受信しません。これについては、Internet Explorer と no-cache HTTP ヘッダーを受信する HTTPS 要求とに問題があることがわかっています。Flex Data Services 2 エンドポイントが応答で no-cache ヘッダーを送信しないようにするには、次の設定を secure-amf channel-definition セクションに指定します。

We’ve decided not to add a config option for specifying this value because it’s no longer an issue for swfs compiled to target Player 10+, so impact is limited to IE over HTTPS with player 9 swfs.

Hi Doug. Sounds to me like you might be running into this bug:

https://bugs.adobe.com/jira/browse/BLZ-347

To confirm this, check in IE 7 under Tools -> Internet Options -> Advanced Settings and then in the Security section see whether “Do not save encrypted pages to disk” is selected. If it’s not selected, please select it and run your test again. If your test works after applying that setting it means that you are running into the aforementioned bug and should pick up a newer build of BlazeDS that contains the fix.

 Leave a Reply