Pregunta

¿Puedo controlar las cabeceras HTTP enviados por window.open (navegadores)?

Si no es así, ¿hay algún modo window.open una página que emite entonces mi solicitud con cabeceras personalizadas dentro de su ventana lanzada hacia arriba?

Necesito algunos trucos astutos.

¿Fue útil?

Solución

  

¿Puedo controlar las cabeceras HTTP enviados por window.open (navegadores)?

No

  

Si no es así, ¿hay algún modo window.open una página que emite entonces mi solicitud con cabeceras personalizadas dentro de su ventana lanzada hacia arriba?

  • Usted puede solicitar una URL que activa un programa del lado del servidor que hace la solicitud con cabeceras arbitrarias y luego devuelve la respuesta
  • Puede ejecutar JavaScript (adiós diciendo probablemente a la mejora progresiva) que utiliza XHR para hacer la solicitud con cabeceras arbitrarias (suponiendo que los ataques de URL dentro de la política del mismo origen) y luego procesar el resultado en JS.
  

Necesito algunos trucos astutos ...

Podría ayudar si usted ha descrito el problema en lugar de preguntar si las posibles soluciones funcionarían.

Otros consejos

Si usted está en control del lado del servidor, podría ser posible valor de cabecera de set en cadena de consulta y enviar así? De esa manera se podría analizar desde string consulta si no se encuentra en las cabeceras.

Es sólo una idea ... Y se pidió un truco astuto:)

Como el mejor anwser han escrito utilizando XMLHttpResponse excepto window.open, y hacer que el resúmenes-anwser como un ejemplo.

El archivo principal Js es download.js Descargar 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
    }
  

No se puede agregar directamente cabeceras personalizadas con window.open) en la ventana emergente (   pero con el trabajo que tenemos dos soluciones posibles


  
      
  1. Escribir método Ajax para llamar a una URL concreta con cabeceras en un archivo HTML independiente y el uso que el HTML como in<i>window.open()</i> url   aquí es 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) {

        } });

llamar html

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

aquí Cors política puede bloquear la solicitud si CORS no está habilitada en la dirección URL solicitada .


  
      
  1. Usted puede solicitar una URL que activa un programa de servidor que hace la solicitud con cabeceras personalizadas y luego devuelve el redireccionamiento respuesta a una URL concreta.
  2.   

Supongamos que en Java Servlet (/ requestURL) vamos a hacer esta solicitud

`

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

`

Llamada de servlet en window.open('/requestURL')

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top