"accept" 部分是做什么用的?

What is the "accept" part for?

当使用 Net::HTTP 连接到网站时,您可以解析 URL 并使用 #.each_header 输出每个 URL headers。我了解编码和用户代理等含义,但不了解 "accept"=>["*/*"] 部分是什么。这是接受的有效载荷吗?还是其他原因?

require 'net/http'

uri = URI('http://www.bible-history.com/subcat.php?id=2')
http://www.bible-history.com/subcat.php?id=2>
http_request = Net::HTTP::Get.new(uri)
http_request.each_header { |header| puts header }

# => {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"], "accept"=>["*/*"], "user-agent"=>["Ruby"], "host"=>["www.bible-history.com"]}

来自https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z3

This field contains a semicolon-separated list of representation schemes ( Content-Type metainformation values) which will be accepted in the response to this request.

基本上,它指定了您可以回读的内容类型。例如,如果您编写一个 api 客户端,您可能只对 application/json 感兴趣(并且您不会关心 text/html)。

在这种情况下,您的 header 将如下所示:

Accept: application/json

并且该应用会知道不会按您的方式发送任何 html。

使用 Accept header,客户端可以指定他们愿意为请求的 URL 接受的 MIME 类型。如果请求的资源是例如有多种表示形式(例如 PNG、JPG 或 SVG 图像),用户代理可以指定他们只需要 PNG 版本。是否接受此请求取决于服务器。

在您的示例中,请求 header 指定您愿意接受任何内容类型。

header定义在RFC 2616.