none
Microsoft EdgeでのPOST後のGETについて RRS feed

  • 質問

  • AというアクションをPOSTした後、BというアクションにGETでリダイレクトしたいのですが、Microsoft Edgeの開発者ツールのネットワークタブを見ていると、以下のようになります。

    POSTでAアクション

    GETでAアクション

    GETでBアクション

    IE11で見ていると②はありません。

    POSTの後にGETが送られるのはMicrosoft Edgeの仕様なのでしょうか?

    2018年11月26日 8:11

すべての返信

  • OS, IE, Edge のバージョンは何ですか?

    Fiddler で IE, Edge 両方のキャプチャを撮って比較してみてください。画像が貼れたら貼ってください。

    2018年11月26日 14:45
  • バージョンは以下のとおりです。
    OS:Windows10
    IE:11.407.17134.0
    Edge:42.17134.1.0

    画像貼る権限がないため投稿できず申し訳ありません。

    自分で比較してみたのですが、Responseには差異がありません。

    Requestは↓の点差異ありましたが、何か意味あるものには思えず・・・。

    CacheにEdgeは「Cache-Control: max-age=0」があるが、IEにはない

    ・ClientにEdgeは「Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8」とあり、IEは「Accept: text/html, application/xhtml+xml, image/jxr, */*

    EdgeはSecurityの欄があるが、IEにはない

    一切キャッシュをさせないようにWebサーバーの設定変えているのですが、関係ありますでしょうか。


    • 編集済み MikaIM 2018年11月27日 1:22
    2018年11月27日 1:20
  • > バージョンは以下のとおりです。

    ちょっと古そうですね。ちなみに最新版は以下のようになっていると思います。関係ないかもしれませんが。

    Windows 10 1809 (OS ビルド 17763.134)
    IE 11.134.17763.0 / 更新バージョン 11.0.95
    Microsoft Edge 44.17763.1.0 / Microsoft EdgeHTML 18.17763

    > IE11で見ていると②はありません。

    Edge は SmartScreen がデフォルトで有効になっていると思いますが、それと見間違えているということはないですよね?

    > Webサーバーの設定変えているのですが

    Web サーバーの Web アプリも質問者さんの管轄範囲なのですか? であれば、どのような実装をしたのですか?

    最初の質問から見ると、Post/Redirect/Get (PRG) パターンを実装したように思えます。

    であれば、期待される動作は、(1) ページ A に POST、(2) 302 応答が返ってきて応答ヘッダには Location: ページ B の指定、(3) ブラウザはそれを見てページ B を GET 要求するということですよね?

    実際に自分の開発環境で、上のバージョンの Edge を使って PRG パターンの要求・応答を Fiddler てキャプチャしてみました。下の画像がそれです。#12 が /Home/Create への POST 要求で、それに対し 302 応答が返ってきてます。ブラウザは応答ヘッダの Location を見て /(アプリケーションルート)を #13 で GET 要求に行ってます。




    質問者さんが言われる「②GETでAアクション」はどこにも入る余地はないです。上の画像で #14 ~ #17 は SmartScreen 関係のものですが、それと勘違いしてませんか?

    • 編集済み SurferOnWww 2018年11月27日 2:38 訂正
    2018年11月27日 2:36
  • すみません、勘違いしていました。

    Fiddlerでは、「②GETでAアクション」は発生していません。

    (今朝発生しているように見えたのはセッションが入り乱れてしまい、エラー発生していためでした。)

    Microsoft Edgeの開発者ツールでは「②GETでAアクション」は「(キャッシュより)」と毎回表示されているため、実際に通信しているわけではないようです。

    環境も不足していたため補足すると、クライアントが前述のとおりのWindows 10であり、WebサーバーはAsianux Server 4にApache 2.4.37+Tomcat 8.0.53で、Struts 2.5.18を利用したJAVAのWebアプリを動かしています。

    「①POSTでAアクション」はmethod="post"のformをjavascriptでsubmitするだけ、「③GETでBアクション」はStrutsにリダイレクトするよう依頼(struts.xmlに、Aアクションの後type="redirectAction"でBアクション実行させるよう記載)してます。

    FiddlerでPOSTの状態を見ると、SurferOnWwwさんが赤枠で囲ってくださった部分は同じようになりますが、

    Microsoft Edgeの開発者ツールには受信が「(キャッシュより)」となる「②GETでAアクション」が表示されてしまいます。

    「②GETでAアクション」により表示が変わるわけでもないので実影響はないのですが、今回「一切キャッシュを使わせないようにする」ことを目標としているため、「(キャッシュより)」と表示されてしまうことを避けたいのです・・・。

    もし何か心あたりがあればご教授いただけると幸いです。

    2018年11月27日 9:58
  • > Microsoft Edgeの開発者ツールには受信が「(キャッシュより)」となる「②GETでAアクション」が表示されてしまいます。

    自分も、先のレスと同じ環境で同じ Web アプリを Edge の F12 開発者ツールを使って確認してみましたが、確かにその通り 302 応答を受けた後、同じ URL を GET 要求に行って 200 OK が返ってきているいるように見えますね。



    でも、「受信」欄に(キャッシュより)と表示されている通り Edge 内部の動作を表示しているに過ぎないと思われます。実際に、同じ要求応答を Fiddler で見ると(Fiddler はプロキシです)、上の画像で(キャッシュより)と表示されている要求・応答は、その後の css とか js を含めてキャプチャされていません。

    下の画像がそれです。Edge の SmartScreen を無効にしているところが先のレスの画像とは違いますので注意してください。



    css とか js の場合はキャッシュから取得してこなければならないのは当たり前なので、上の F12 開発者ツールの画像でそれらが表示される理由はまだ納得できるのですが、302 応答の後 /home/create がキャッシュから取得される理由は不明です。

    Edge の内部的な事情ではなかろうかと想像してます。気にしなくてもよさそうなので、これ以上追及する気力が湧いてきません。

    理由が分からないと納得できないということであれば、自分はお役に立てそうもないです。他の方の回答をお待ちください。
    • 編集済み SurferOnWww 2018年11月28日 2:44 訂正
    2018年11月28日 2:43
  • >自分も、先のレスと同じ環境で同じ Web アプリを Edge の F12 開発者ツールを使って確認してみましたが、確かにその通り 302 応答を受けた後、同じ URL を GET 要求に行って 200 OK が返ってきているいるように見えますね。

    自端末だけではないことだけでもわかり安心しました。

    (もし取り急ぎの報告求められても回答できます、ありがとうございます)

    Fiddlerの存在も今回初めて知ったので、次回通信系の問題にあたった際に自力で調べられること増えました。

    お忙しい中ご尽力くださりありがとうございました。

    .

    できるだけ理由解明したいので、まだしばらく質問は開けておこうと思います。

    2018年11月28日 5:23