【问题标题】:What is the "accept" part for?“接受”部分是干什么用的?
【发布时间】:2017-05-13 18:49:33
【问题描述】:

使用Net::HTTP 连接到网站时,您可以使用#.each_header 解析URL 并输出每个URL 标头。我了解编码和用户代理等的含义,但不了解 "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"]}

【问题讨论】:

    标签: ruby uri net-http


    【解决方案1】:

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

    此字段包含一个以分号分隔的表示方案列表(内容类型元信息值),将在对此请求的响应中被接受。

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

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

    Accept: application/json
    

    应用会知道不要以您的方式发送任何 html。

    【讨论】:

    • 所以它与网站本身将接受的有效载荷无关?
    • 不,它指定了客户端愿意接受的响应的内容类型。在向服务器发送数据时(例如在 POST 正文中),您可以使用请求的 Content-Type 标头指定其内容类型。
    • 这更有意义哈哈。谢谢大佬,非常感谢。
    【解决方案2】:

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

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

    标头在RFC 2616中定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2017-11-03
      相关资源
      最近更新 更多