Ruby on rails ruby会从响应中删除标题吗?

Ruby on rails ruby会从响应中删除标题吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我直接从我的博客获取html内容,如下所示: response = Net::HTTP.get_response(uri) respond_to do |format| format.html { render :text => response.body } end 虽然在博客引擎(WordPress)中,我添加了标题访问控制允许源代码:但我注意到它没有在响应中传递 然而,如果我使用邮递员获取页面或直接在浏览器中查看页面,我可以看到页眉在那里 编辑 我可以看到传递的其他标题,例如

我直接从我的博客获取html内容,如下所示:

response = Net::HTTP.get_response(uri)

respond_to do |format|
  format.html { render :text => response.body }
end
虽然在博客引擎(WordPress)中,我添加了标题
访问控制允许源代码:
但我注意到它没有在响应中传递

然而,如果我使用邮递员获取页面或直接在浏览器中查看页面,我可以看到页眉在那里

编辑

我可以看到传递的其他标题,例如:

cache-control: no-cache, must-revalidate, max-age=0
content-type: text/html; charset=UTF-8
date: Tue, 24 Jul 2018 06:37:57 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT

有什么想法吗?

响应。body
将返回您的身体部位,而不是
标题
部位。您可以将响应转换为哈希并检查标题,如下所示:

> url = "https://stackoverflow.com/questions/51492025/does-ruby-strip-headers-from-response"
> uri = URI.parse(url)
> response = Net::HTTP.get_response(uri)
#=> #<Net::HTTPOK 200 OK readbody=true> 
> response.to_hash
#=> {"cache-control"=>["private"], "content-type"=>["text/html; charset=utf-8"], "last-modified"=>["Tue, 24 Jul 2018 07:04:00 GMT"], "x-frame-options"=>["SAMEORIGIN"], "x-request-guid"=>["22a4b6b6-3039-46e2-b4de-c8af7cad6659"], "strict-transport-security"=>["max-age=15552000"], "content-security-policy"=>["upgrade-insecure-requests"], "accept-ranges"=>["bytes", "bytes"], "age"=>["0", "0"], "content-length"=>["31575"], "date"=>["Tue, 24 Jul 2018 07:04:46 GMT"], "via"=>["1.1 varnish"], "connection"=>["keep-alive"], "x-served-by"=>["cache-bom18221-BOM"], "x-cache"=>["MISS"], "x-cache-hits"=>["0"], "x-timer"=>["S1532415886.990199,VS0,VE280"], "vary"=>["Accept-Encoding,Fastly-SSL"], "x-dns-prefetch-control"=>["off"], "set-cookie"=>["prov=a7dfe911-76a1-f1c1-093b-3fc8fe79af65; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly"]}

有关更多详细信息,请阅读:

响应。body
将返回您的身体部位,而不是
标题
部位。您可以将响应转换为哈希并检查标题,如下所示:

> url = "https://stackoverflow.com/questions/51492025/does-ruby-strip-headers-from-response"
> uri = URI.parse(url)
> response = Net::HTTP.get_response(uri)
#=> #<Net::HTTPOK 200 OK readbody=true> 
> response.to_hash
#=> {"cache-control"=>["private"], "content-type"=>["text/html; charset=utf-8"], "last-modified"=>["Tue, 24 Jul 2018 07:04:00 GMT"], "x-frame-options"=>["SAMEORIGIN"], "x-request-guid"=>["22a4b6b6-3039-46e2-b4de-c8af7cad6659"], "strict-transport-security"=>["max-age=15552000"], "content-security-policy"=>["upgrade-insecure-requests"], "accept-ranges"=>["bytes", "bytes"], "age"=>["0", "0"], "content-length"=>["31575"], "date"=>["Tue, 24 Jul 2018 07:04:46 GMT"], "via"=>["1.1 varnish"], "connection"=>["keep-alive"], "x-served-by"=>["cache-bom18221-BOM"], "x-cache"=>["MISS"], "x-cache-hits"=>["0"], "x-timer"=>["S1532415886.990199,VS0,VE280"], "vary"=>["Accept-Encoding,Fastly-SSL"], "x-dns-prefetch-control"=>["off"], "set-cookie"=>["prov=a7dfe911-76a1-f1c1-093b-3fc8fe79af65; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly"]}

有关更多详细信息,请阅读:

Net::HTTPResponse
(这是您的
响应
)混合在一起。因此,您可以将单个头作为
response['Access-Control-Allow-Origin']
,使用
response对其进行迭代。每个头都可以使用
response,甚至可以使用
response将它们全部作为散列来获取。to_hash
Net::HTTPResponse
(即您的
响应
)混合在一起。因此,您可以获得一个单独的头作为
response['Access-Control-Allow-Origin']
,使用
response对其进行迭代。每个头都是
response,甚至可以使用
response将其作为一个散列来获取。如果您想通过从您要获取的主机提供服务的头,首先需要将博客中的响应隐藏在不同的变量名中。让我们称之为
blog\u response
(这是因为
response
是rails控制器实例中预先存在的特殊方法名)

然后,您需要从
blog\u响应中获取您关心的标题,如下所示:

header_name, header_value = blog_response.each_header.find do |name, value| 
  name =~ /pattern-matching-a-header-name-i-care-about/i  #case insensitive regex matching recommended for http headers
end
然后,在呈现响应之前,需要在控制器中设置它们,例如:

response.headers[header_name] = header_value

respond_to do |format|
  format.html { render :text => blog_response.body }
end
这个示例显然只针对一个标题,但您可以通过在响应中迭代、匹配和设置多个标题来复制多个标题,如下所示:

blog_response.each_header.select do |name, value| 
  if name =~ /pattern-matching-header-names-i-care-about|some-other-pattern-i-care-about/i  #case insensitive regex matching recommended for http headers
    response.headers[name] = value
  end
end
如果要传递所有标题,只需执行以下操作:

blog_response.each_header do |name, value| 
  response.headers[name] = value
end

respond_to do |format|
  format.html { render :text => blog_response.body }
end

如果要传递从主机获取的消息头,首先需要将来自博客的响应存储在不同的变量名中。让我们称之为
blog\u response
(这是因为
response
是rails控制器实例中预先存在的特殊方法名)

然后,您需要从
blog\u响应中获取您关心的标题,如下所示:

header_name, header_value = blog_response.each_header.find do |name, value| 
  name =~ /pattern-matching-a-header-name-i-care-about/i  #case insensitive regex matching recommended for http headers
end
然后,在呈现响应之前,需要在控制器中设置它们,例如:

response.headers[header_name] = header_value

respond_to do |format|
  format.html { render :text => blog_response.body }
end
这个示例显然只针对一个标题,但您可以通过在响应中迭代、匹配和设置多个标题来复制多个标题,如下所示:

blog_response.each_header.select do |name, value| 
  if name =~ /pattern-matching-header-names-i-care-about|some-other-pattern-i-care-about/i  #case insensitive regex matching recommended for http headers
    response.headers[name] = value
  end
end
如果要传递所有标题,只需执行以下操作:

blog_response.each_header do |name, value| 
  response.headers[name] = value
end

respond_to do |format|
  format.html { render :text => blog_response.body }
end

render text:response.body
不处理标题,因此它们仍然是Rails响应的“默认值”。您可以通过执行以下操作获取标题:
Net::HTTP.head(uri)
render text:response.body
不处理标题,因此,它们仍然是Rails响应的“默认值”。您可以通过执行以下操作获取标题:
Net::HTTP.head(uri)
response.to#hash
将列出所有标题,但如何呈现响应中的body+所有标题?
response.to#hash.map{k,v |“{k}:{v}.join(“\n”)+“\n\n”+response.body
response.to#u hash
将列出所有头,但是如何在响应中呈现body+所有头?
response.to_hash.map{k,v |“}:{k}:{v}。join(“\n”)+“\n\n”+response.body
response.to#u hash将列出所有头,但是如何呈现响应中的正文+所有标题?@simo在响应中添加新键,并将正文内容分配给它,如:
response[“body\u part”]=response.body
然后选中
response.to\u hash
response.to\u hash将列出所有标题,但是如何呈现响应中的正文+所有标题?@simo在响应中添加新键,并将正文内容分配给它,如:
response[“body\u part”]=response.body
然后选中
response.to_hash
完美答案!完美答案!