互換性表示だとIE11でコンテンツタイプが送信されないみたい
問題の事象と切り分け
PMP試験が終わり、そろそろ受験勉強管理システム(仮称)を使って娘の算数を見ようかなと。
ASUS ZenBook 3 UX390UAより画面が大きいHP ENVY 17 r000から受験勉強管理システムを初めて使ってみました。とりあえずブラウザはEdgeを利用し問題を登録し、印刷(PDF出力)すると、「開く」の選択肢がなく、「保存」「名前を付けて保存」「キャンセル」の3つしかありません。
とりあえず「保存」を選ぶと、続いて「開く」「フォルダーを開く」「ダウンロードの表示」の選択肢が出るので、「開くを選ぶと、PDFがXChange EditorでなくEdgeで開かれました。
なお、ダウンロードフォルダに「問題.pdf」が保存されています。
EdgeではPDFを扱いにくいので、いつもどおりIE11で受験勉強管理システムを使うことに。
問題を登録するとこころで、下図のようなPNG画像をアップロードしたところ・・・
コンテンツタイプがPNGじゃない!のようなエラーが出たわけです。あれ?KIOKUでのスクリーンショットの保存形式をJPEGにしたか?と確認しましたが、間違いなくPNGで保存しています。
※受験勉強管理システムではアップロード可能な画像形式をPNGに限定しています。
受験勉強管理システムをいつも使っているASUS ZenBook 3 UX390UAのIE11から、同じ画像をアップロードしたところ、問題なくアップできました。よって、アップするデータの問題ではないです。
原因調査
プログラムを確認することに。
Private Sub FormView問題_ItemUpdating(sender As Object, e As FormViewUpdateEventArgs) Handles FormView問題.ItemUpdating SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("MODE")) If FileUpload添付.HasFile = True Then SDSget問題.UpdateParameters.Add("MODE", "1") Dim CT As String = FileUpload添付.PostedFile.ContentType.ToString Dim FN As String = IO.Path.GetFileName(FileUpload添付.PostedFile.FileName.ToString) Dim SZ As Double = FileUpload添付.PostedFile.ContentLength Dim EX As String = IO.Path.GetExtension(FileUpload添付.PostedFile.FileName.ToString) Select Case True Case CT <> "image/png" And CT <> "application/pdf" And CT <> "image/jpeg" And CT <> "application/vnd.openxmlformats-officedocument.wordprocessingml.document" And CT <> "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" And CT <> "message/rfc822" ラベルセット(99, "PDF、mht、WORDまたはEXCEL以外はアップロードできません(コンテンツタイプ判定)") e.Cancel = True Case LCase(EX) <> ".xlsx" And LCase(EX) <> ".pdf" And LCase(EX) <> ".docx" And LCase(EX) <> ".png" And LCase(EX) <> ".jpg" And LCase(EX) <> ".jpeg" And LCase(EX) <> ".jpg" And LCase(EX) <> ".mht" ラベルセット(98, "PDF、mht、WORDまたはEXCEL以外はアップロードできません(拡張子判定)") e.Cancel = True Case SZ > 5120000 ラベルセット(97, "アップロードファイルは5MBまでです") e.Cancel = True Case Else Dim str区分 As String If CT = "image/png" Then str区分 = "問題画像メイン" Else str区分 = "添付ファイル" End If SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("コンテンツタイプ")) SDSget問題.UpdateParameters.Add("コンテンツタイプ", CT) SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("ファイル名")) SDSget問題.UpdateParameters.Add("ファイル名", FN) SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("ファイルサイズ")) SDSget問題.UpdateParameters.Add("ファイルサイズ", SZ) SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("拡張子")) SDSget問題.UpdateParameters.Add("拡張子", EX) SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("区分")) SDSget問題.UpdateParameters.Add("区分", str区分) SDSget問題.UpdateParameters.Remove(SDSget問題.UpdateParameters("コメントバイナリ")) SDSget問題.UpdateParameters.Add("コメントバイナリ", TextBoxコメントバイナリ.Text) End Select Else SDSget問題.UpdateParameters.Add("MODE", "0") End If End Sub
ど素人丸出しのコードではありますが、問題ないです。
何が違うのか?小1時間ほど悩みます。グーグル先生にもすがってみます。
そうしたら、IE11でPOSTを再送信した場合にContent-Typeが欠落する現象についてなんていうMSのフォーラム発見。再送信ではないけれど、それっぽいなとよく読んで、書かれていることをやってみたりするのですが、解決しません。
IEをリセット、IE11を機能の無効化→有効化、受験勉強管理システムのサーバを信頼済サイトへ登録など、いろいろやってみましたがダメです。
解決
おなかすいたので、ランチして気分を切り替えます。
F12開発者ツールのネットワークで調べてみることに。するとエミュレーションのところがIE7になっています。ん?と思い、IE11に変更し、画像をアップするとできるじゃないですか!
原因は互換性表示か!互換性表示だと、コンテンツタイプが送信されないようです。
下図はコンテンツタイプがサーバに送信されない状況のIE11の設定です。受験勉強管理システムは自宅のLAN(イントラネットサイト)なので、「イントラネットサイトを互換性表示する」にチェックがついていると受験勉強管理システムは互換性表示されてしまします。
この状態だと下図のようになってしまいます。
「イントラネットサイトを互換性表示する」をオフにすることで、IE11からサーバへコンテンツタイプが送信されるようになりました。下図のように問題画像が登録できるようになりました。
「イントラネットサイトを互換性表示する」に何故チェックがついていたのか?
別のWebアプリ作成過程でつけたと思われます・・・・
コメント
コメントを投稿