Domanda

È possibile controllare le intestazioni HTTP inviate dal window.open (cross browser)?

In caso contrario, posso in qualche modo window.open una pagina che poi emette la mia richiesta con intestazioni all'interno della sua finestra spuntato-up?

Ho bisogno di alcuni hack astuzia.

È stato utile?

Soluzione

  

È possibile controllare le intestazioni HTTP inviate dal window.open (cross browser)?

No

  

In caso contrario, posso in qualche modo window.open una pagina che poi emette la mia richiesta con intestazioni all'interno della sua finestra spuntato-up?

  • È possibile richiedere un URL che inneschi un programma lato server che effettua la richiesta con le intestazioni arbitrarie e quindi restituisce la risposta
  • È possibile eseguire JavaScript (probabilmente dire addio a Progressive Enhancement) che utilizza XHR per effettuare la richiesta con le intestazioni arbitrarie (supponendo che le crisi URL all'interno della stessa politica di origine) e quindi elaborare il risultato in JS.
  

Ho bisogno di alcuni hack astuzia ...

Potrebbe essere utile se hai descritto il problema invece di chiedere se possibili soluzioni si adattano.

Altri suggerimenti

Se si è in controllo del lato server, potrebbe essere possibile impostare il valore di intestazione nella query di stringa e inviarlo in quel modo? In questo modo si potrebbe analizzare da string query se non è trovata nelle intestazioni.

Solo un'idea ... E ti ha chiesto per un hack astuzia:)

Come il miglior anwser sono redatti utilizzando XMLHttpResponse tranne window.open, e faccio l'abstract-anwser come istanza.

Il file principale Js è download.js Download-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
    }
  

Non è possibile aggiungere intestazioni personalizzate direttamente con window.open) in una finestra pop-up (   ma per il lavoro che abbiamo due possibili soluzioni


  
      
  1. Scrivi metodo Ajax chiamare quel particolare URL con le intestazioni in un file HTML separato e l'uso che HTML come url in<i>window.open()</i>   qui è abc.html
  2.   
        $.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) {

        } });

chiamare html

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

qui CORS politica in grado di bloccare la richiesta se CORS non è abilitato a richiesta URL .


  
      
  1. È possibile richiedere un URL che attiva un programma lato server che fa la richiesta con intestazioni personalizzate e quindi restituisce il reindirizzamento risposta a quel particolare URL.
  2.   

Supponiamo che in Java Servlet (/ requestURL) faremo questa richiesta

`

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

`

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top