webentwicklung-frage-antwort-db.com.de

window.open mit Kopfzeilen

Kann ich die HTTP-Header steuern, die von window.open (Browserübergreifend) gesendet werden?

Wenn nicht, kann ich irgendwie eine Seite window.openen, die dann meine Anfrage mit benutzerdefinierten Kopfzeilen im eingeblendeten Fenster ausgibt?

Ich brauche ein paar listige Hacks.

43
Andrew Bullock

Kann ich die HTTP-Header steuern, die von window.open (Browserübergreifend) gesendet werden?

Nein

Wenn nicht, kann ich irgendwie window.open, eine Seite, die dann meine Anfrage mit benutzerdefinierten Kopfzeilen im eingeblendeten Fenster ausgibt?

  • Sie können eine URL anfordern, die ein serverseitiges Programm auslöst, das die Anforderung mit beliebigen Kopfzeilen vornimmt und die Antwort zurückgibt
  • Sie können JavaScript ausführen (wahrscheinlich verabschieden Sie sich von Progressive Enhancement), das XHR verwendet, um die Anforderung mit beliebigen Headern zu erstellen (vorausgesetzt, die URL passt in die Same Origin-Richtlinie) und verarbeitet das Ergebnis anschließend in JS.

Ich brauche ein paar listige Hacks ...

Es könnte hilfreich sein, wenn Sie das Problem beschrieben haben, anstatt zu fragen, ob mögliche Lösungen funktionieren.

31
Quentin

Wenn Sie die Serverseite steuern, kann es möglich sein, den Header-Wert in der Abfragezeichenfolge festzulegen und so zu senden? Auf diese Weise könnten Sie ihn aus der Abfragezeichenfolge analysieren, wenn er nicht in den Kopfzeilen gefunden wird.

Nur eine Idee ... Und du hast nach einem schlauen Hack gefragt :)

8
Igor

Mit können Sie keine benutzerdefinierten Header direkt hinzufügen window.open () in Popup-Fenster aber zu arbeiten, dass wir zwei mögliche Lösungen haben


  1. Schreiben Sie die Ajax-Methode, um diese bestimmte URL mit Kopfzeilen in einer separaten HTML-Datei aufzurufen, und verwenden Sie diese HTML als 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) {

        } });

rufen Sie HTML auf

window.open('*\abc.html')

hier kann die CORS-Richtlinie die Anforderung blockieren, wenn CORS in der angeforderten URL nicht aktiviert ist.


  1. Sie können eine URL anfordern, die ein serverseitiges Programm auslöst, das die Anforderung mit benutzerdefinierten Headern erstellt und dann die Antwort zurückgibt, die zu dieser bestimmten URL umleitet.

Angenommen, in Java Servlet (/ requestURL) stellen wir diese Anfrage

`

        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");
        }

`

servlet in window.open('/requestURL') aufrufen

0
sunil bishnoi

Als beste Antwort habe ich mit XMLHttpResponse außer window.open geschrieben, und ich mache den abstracts-anwser als Instanz. 

Die Haupt-Js-Datei ist 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