自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等于null时,我只说谎了一点。没关系
但是,在浏览器(客户端)中,它不是那样工作的。 “ x-frame-options”被拒绝或不是我的(与cookie相同)。
你能帮我吗,我从两天开始就拔头发了,这对我不利。
谢谢。
答案 0 :(得分:0)
问题在于,回调实际上是在请求完成之后发生的,这是在管道已经开始将数据流传输到响应之后的方式。您可能想加入响应事件,它看起来像这样:
request.get({ url: this.url + req.url, headers: this.headers })
.on('response', function (resp) {
resp.headers['my-custom-header'] = 'blah';
})
.pipe(response);
response
事件是在流到目的地(在这种情况下,返回到原始调用者)之前 发出的,因此您应该可以使用此功能执行所需的操作方法。
答案 1 :(得分:0)
我的代码现在看起来像这样:
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;
}