我从一个url读内容,想用流的方式把读到的内容输出到下游:
local function cache_response()
local http = require "resty.http"
local host = get_proxy_host()
local port = get_proxy_port()
local httpc = http.new()
httpc:set_timeout(1000)
httpc:connect(host, port)
local res, err = httpc:request{
path = ngx.var.request_uri,
headers = {
["Host"] = host
}
}
if not res then
ngx.log(ngx.ERR, "failed to request cache: ", err)
return ngx.exit(ngx.HTTP_GATEWAY_TIMEOUT)
end
local cw_folder = get_cw_cache_folder()
local reader = res.body_reader
local sock = ngx.req.socket(true)
for k, v in pairs(res.headers) do
ngx.header[k] = v
end
ngx.send_headers()
ngx.flush(true)
ngx.log(ngx.CRIT, "header sent: ", ngx.headers_sent)
repeat
local chunk, err = reader(8192)
if err then
ngx.log(ngx.ERR, "reader error: ", err)
break
end
if chunk then
sock:send(chunk)
end
until not chunk
local ok, err = httpc:set_keepalive()
if not ok then
ngx.log(ngx.ERR, "failed to set keepalive: ", err)
return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
end
貌似上面的代码我用ngx.send_headers发出的头浏览器收不到, 所以网页解析出来的Content-Type都是plaintext,
导致在firefox下面无法看到被浏览器渲染的网页,但是谷歌浏览器却能正常渲染。
我用curl -i也是看不到header信息,不知道问题在哪里,请高人给个答案。