web-dev-qa-db-ja.com

window.open with headers

window.open(クロスブラウザ)によって送信されたHTTPヘッダーを制御できますか?

そうでない場合、ポップアップウィンドウ内にカスタムヘッダーを使用してリクエストを発行するページを何らかの方法でwindow.openできますか?

Unningなハックが必要です。

48
Andrew Bullock

Window.open(ブラウザ間)によって送信されるHTTPヘッダーを制御できますか?

いや

そうでない場合、どういうわけかwindow.openページを開き、ポップアップウィンドウ内にカスタムヘッダーを含むリクエストを発行できますか?

  • 任意のヘッダーでリクエストを作成し、レスポンスを返すサーバー側プログラムをトリガーするURLをリクエストできます
  • JavaScriptを実行して(おそらくProgressive Enhancementに別れを告げる)XHRを使用して任意のヘッダーでリクエストを行い(URLがSame Origin Policyに適合すると仮定)、結果をJSで処理できます。

Unningなハックが必要です...

可能性のある解決策が機能するかどうかを尋ねるのではなく、問題を説明すると役立つ場合があります。

32
Quentin

サーバー側を制御している場合、クエリ文字列にヘッダー値を設定し、そのように送信することは可能ですか?そうすれば、ヘッダーで見つからない場合はクエリ文字列から解析できます。

ただのアイデア...そして、あなたはcなハックを求めました:)

10
Igor

カスタムヘッダーを直接追加することはできません window.open() ポップアップウィンドウで動作しますが、2つの解決策があります


  1. Ajaxメソッドを記述して、特定のURLをヘッダー付きの別のHTMLファイルで呼び出し、そのHTMLをurl in<i>window.open()</i>として使用します abc.html
_        $.ajax({
        url: "ORIGIONAL_URL",
        type: 'GET',
        dataType: 'json',
        headers: {
            Authorization : 'Bearer ' + data.id_token,
            AuthorizationCheck : 'AccessCode ' +data.checkSum , 
            ContentType :'application/json'
        },

        success: function (result) {
              console.log(result);
        },
        error: function (error) {

        } });
_

htmlを呼び出す

_window.open('*\abc.html')
_

ここで、要求されたURLでCORSが有効になっていない場合、CORSポリシーは要求をブロックできます


  1. カスタムヘッダーを使用して要求を作成し、その特定のURLにリダイレクトする応答を返すサーバー側プログラムをトリガーするURLを要求できます。

Java Servlet(/ requestURL)でこのリクエストを作成するとします

`

_        String[] responseHeader= new String[2];
        responseHeader[0] = "Bearer " + id_token;
        responseHeader[1] = "AccessCode " + checkSum;

        String url = "ORIGIONAL_URL";

        URL obj = new URL(url);
        HttpURLConnection urlConnection = (HttpURLConnection) obj.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestProperty("Authorization", responseHeader[0]);
        urlConnection.setRequestProperty("AuthorizationCheck", responseHeader[1]);
        int responseCode = urlConnection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader in = new BufferedReader(new 
                         InputStreamReader(urlConnection.getInputStream()));
            String inputLine;
            StringBuffer response1 = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response1.append(inputLine);
            }
            in.close();
            response.sendRedirect(response1.toString());
            // print result
            System.out.println(response1.toString());
        } else {
            System.out.println("GET request not worked");
        }
_

`

window.open('/requestURL')でサーブレットを呼び出します

0
sunil bishnoi

window.openを除くXMLHttpResponseを使用して最高のanwserが記述したため、abstracts-anwserをインスタンスとして作成します。

メインのJsファイルはdownload.jsDownload-JS

 // var download_url = window.BASE_URL+ "/waf/p1/download_rules";
    var download_url = window.BASE_URL+ "/waf/p1/download_logs_by_dt";
    function download33() {
        var sender_data = {"start_time":"2018-10-9", "end_time":"2018-10-17"};
        var x=new XMLHttpRequest();
        x.open("POST", download_url, true);
        x.setRequestHeader("Content-type","application/json");
//        x.setRequestHeader("Access-Control-Allow-Origin", "*");
        x.setRequestHeader("Authorization", "JWT " + localStorage.token );
        x.responseType = 'blob';
        x.onload=function(e){download(x.response, "test211.Zip", "application/Zip" ); }
        x.send( JSON.stringify(sender_data) ); // post-data
    }
0
actanble