window.open с заголовками - PullRequest
       37

window.open с заголовками

48 голосов
/ 01 декабря 2010

Можно ли управлять заголовками HTTP, отправляемыми window.open (кросс-браузер)?

Если нет, могу ли я как-то window.open страницу, которая затем выдает мой запрос с пользовательскими заголовками внутри всплывающего окна?

Мне нужны хитрые хаки.

Ответы [ 4 ]

32 голосов
/ 01 декабря 2010

Могу ли я контролировать заголовки HTTP, отправляемые window.open (кросс-браузер)?

нет

Нет

Если нет, могу ли я как-то window.open открыть страницу, которая затем выдает мой запрос с пользовательскими заголовками внутри всплывающего окна?

  • Вы можете запросить URL, который запускает серверную программу, которая делает запрос с произвольными заголовками, а затем возвращает ответ
  • Вы можете запустить JavaScript (возможно, попрощавшись с Progressive Enhancement), который использует XHR для выполнения запроса с произвольными заголовками (при условии, что URL-адрес соответствует тем же политикам происхождения), а затем обрабатывает результат в JS.

Мне нужны хитрые хаки ...

Это может помочь, если вы описали проблему, а не спросите, будут ли возможные решения работать.

10 голосов
/ 28 июля 2014

Если вы контролируете серверную часть, возможно, можно установить значение заголовка в строке запроса и отправить его так?Таким образом, вы можете разобрать его из строки запроса, если он не найден в заголовках.

Просто идея ... И вы попросили хитрый взлом:)

0 голосов
/ 22 июня 2019

Вы не можете напрямую добавлять пользовательские заголовки с помощью window.open () во всплывающем окне, но для работы у нас есть два возможных решения


  1. Напишите метод Ajax для вызова этого конкретного URL с заголовками в отдельном файле HTML и используйте этот HTML в качестве URL-адреса в <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')

здесь политика CORS может блокировать запрос, если CORS не включен в запрошенном URL .


Вы можете запросить URL, который запускает серверную программу, которая выполняет запрос с пользовательскими заголовками, а затем возвращает ответ, перенаправляющий на этот конкретный URL.

Предположим, в сервлете Java (/ 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 голосов
/ 19 ноября 2018

Как написали лучшие anwser, используя XMLHttpResponse, за исключением window.open, и я делаю abstracts-anwser в качестве примера.

Основной файл 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
    }
...