Как можно изменить заголовок ответа? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть проблема, которая ломает мне голову уже 2 дня.

request( {url: url } , function(err,res, body){ res.headers['...'] = ...; return res }).pipe(response);

Я думал, что этот код меняет заголовок с первого ответа, а затем помещает его во второй ответ.но НЕ, все попытки терпят неудачу.Я пытаюсь и пытаюсь, но НИЧЕГО, НИЧЕГО НЕ РАБОТАЮ.

Слушай, я действительно спокоен и непредубежден.

Вот мой код, ясный и лаконичный:

   modify_header(err,res,body){

        var header = res.headers;

        header['x-frame-options'] = null;
        header['Set-Cookie'] =  'HttpOnly;';
        return res;
    }


   request_src(req,response){

      let isabsolute = this.decode_href(req.url);


      if(!isabsolute) {
           request.get({ url : this.url+req.url , headers : this.headers },this.modify_header).pipe(response);
      }else{
           request.get({ url : isabsolute , headers : this.headers },this.modify_header).pipe(response);
      }

     return false;

}

request_src (req, response) - это функция, вызываемая в http.createServer, поэтому req & response - это просто запрос от клиентов.затем, когда я делаю request.get( {url:this.url ..., я отправляю запрос клиента на другой сайт, например прокси.но мне нужно изменить заголовок между "другим сайтом" и клиентом.и поверьте мне точно, функция modify_header ничего не изменяет.

нет, я немного вру, когда устанавливаю header['x-frame-options'] = null; res.headers равно нулю.это нормально, НО, в браузере (на стороне клиента) Это просто не работает таким образом.'x-frame-options' запрещен или что-то не мое (то же самое для cookie).

Не могли бы вы мне помочь, пожалуйста, я выдергиваю свои волосы уже 2 дня, и это не хорошо для меня.

спасибо.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

мой код выглядит так прямо сейчас:

modify_header(res){

     var header = res.headers;

     header['x-frame-options'] = null;
     header['Set-Cookie'] =  'HttpOnly;';
    return res;
}


request_src(req,response){

    console.log('original: ',req.url);
    let isabsolute = this.decode_href(req.url);

    if(!isabsolute) {

        request.get({ url : this.url+req.url , headers : this.headers })
        .on('response',this.modify_header)
        .pipe(response);

    }else{

        request.get({ url : isabsolute , headers : this.headers})
        .on('response',this.modify_header)
        .pipe(response);

    }

    return false;

}
0 голосов
/ 20 декабря 2018

Проблема в том, что обратные вызовы действительно происходят после завершения запроса, то есть после того, как канал уже начал передавать данные в ответ.Вы, вероятно, хотите подключиться к ответному событию , которое будет выглядеть примерно так:

request.get({ url: this.url + req.url, headers: this.headers })
    .on('response', function (resp) {
        resp.headers['my-custom-header'] = 'blah';
    })
    .pipe(response);

Событие response отправляется до потоковой передачи в пункт назначения(который в данном случае возвращается к исходному вызывающему объекту), поэтому вы должны иметь возможность делать то, что вы хотите, используя этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...