为什么访问同一个网址却返回不同的内容

哈喽大家好,我是咸鱼。今天给大家分享一个关于 HTTP 有趣的现象

链接:https://csvbase.com/meripaterson/stock-exchanges

我们用浏览器访问这个链接,可以看到下面的网页
为什么访问同一个网址却返回不同的内容
但如果我们使用 curl 命令去访问这个链接呢?
为什么访问同一个网址却返回不同的内容
可以看到返回的是一个 csv 文件

我们用 wget 命令下载下来看看
为什么访问同一个网址却返回不同的内容
可以看到 text/csv 字段,表示下载了一个 csv 格式的文件

奇怪,同样的 url ,为什么浏览器返回的内容跟 curl、wget 命令返回的内容却不一样

内容协商

当 HTTP 客户端去发送响应给 HTTP 服务端的时候,响应里面会包含响应头(headers)

我们来看下 Google浏览器发送的响应头
为什么访问同一个网址却返回不同的内容
我们着重注意一下响应头里的 accept 字段
为什么访问同一个网址却返回不同的内容
这个 accept 报头是一个无序列表,它告诉了 HTTP 服务端应该返回什么媒体类型(又称内容类型或文件格式)的内容给我

以上面 Google 浏览器的 accept 报头为例:这段 accept 报头表示该请求中浏览器可接受的媒体类型(或文件格式)的偏好。从左到右,各类型的优先级逐渐降低

  • text/html: 浏览器首选的媒体类型,即 HTML 文本。
  • application/xhtml+xml: 次选的媒体类型,即 XHTML 文本。
  • application/xml;q=0.9: 服务器可以发送的 XML 类型的文本,但是客户端更愿意接收前面的两种媒体类型,所以权重为 0.9。
  • image/avif,image/webp,image/apng: 浏览器能够接受的图片类型,优先级逐渐降低。如果服务器返回多种可接受的图片类型,则浏览器将选择优先级最高的那个。
  • */*;q=0.8: 如果服务器无法以以上任何一种类型响应,则浏览器愿意接受任何类型,但是这个类型的优先级最低,只有 0.8。
  • application/signed-exchange;v=b3;q=0.7: 该媒体类型是用于实现 Web 页面“前进”和“后退”功能的标准。客户端更愿意接受前面提到的其他媒体类型,所以该类型的权重为 0.7。

所以说我们用 Google 浏览器去访问这个 url (csvbase.com)时,会跟 HTTP 服务端去协商:你应该返回什么类型的内容给我,优先是 text/html

而 curl 命令或者 wget 命令去访问请求这个 url 时,默认情况下发送的请求头中的 Accept 字段的值是 */*,表示支持接受所有类型的响应

而这个网站 csvbase 默认格式是 csv,所以说当 curl 命令或者 wget 命令去访问请求这个 url 时,得到的是一个 csv 格式返回内容

这就是 HTTP 协议中的内容协商(content negotiation)

HTTP内容协商是指客户端和服务器端协商出最适合的响应数据格式、语言等内容的过

HTTP中的内容协商机制,可以确保客户端和服务器端发送和接收的内容格式是一致的,从而提高通信的效率和可靠性

HTTP内容协商通常有三种类型:

  • 基于请求头的内容协商(Header-based content negotiation)
  • 基于URL的内容协商(URL-based content negotiation)
  • 基于实体的内容协商(Entity-based content negotiation)

基于请求头的内容协商是指客户端在请求头中指定自己可以接受的内容类型(MIME类型),服务器根据客户端的请求头中所指定的信息,选择最合适的响应内容类型进行响应

常用的请求头字段是 Accept 和 Accept-Language。服务器端根据 Accept 字段的内容,选择最匹配的响应类型进行响应

如果客户端所能接受的响应类型都不能满足服务器端的响应类型,则会返回一个 406 Not Acceptable 的错误状态码

那有小伙伴可能会想:我用 curl 命令或者 wget 命令不想得到一个 csv 格式的响应,我想 HTTP 服务端返回其他类型的响应,这时候该怎么办

我们可以手动修改请求头来告诉 HTTP 服务端它可以接受的媒体类型(即文件格式)的偏好
为什么访问同一个网址却返回不同的内容

参考文章:

How does it know I want csv? ⁠— An HTTP trick (csvbase.com)

原文链接:https://www.cnblogs.com/edisonfish/p/17391840.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:为什么访问同一个网址却返回不同的内容 - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • Linux几种网络模式介绍

    简单介绍Linux几种网络模式 ​ 虚拟化层次: ​ 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8 (NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用 于仅主机模式下的虚拟交换机…

    Linux 2023年4月10日
    00
  • LINUX添加磁盘

    博客网站原因,图片不能很好插入,望谅解 第一步:设置加载硬盘。由于是虚拟硬盘大小,不会一开始直接占用全部空间,使用多少占用多少,为了避免后期磁盘满前期设计大容量        第二步加载查看磁盘:  再执行fdisk -l命令,发现磁盘sdb [root@KS ~]# init 6 [root@KS ~]# fdisk -l     Disk /dev/sd…

    Linux 2023年4月13日
    00
  • YUM解决RPM包安装依赖关系及yum工具介绍本地源配置方法详解

    YUM解决RPM包安装依赖关系及yum工具介绍本地源配置方法详解 前言 在Linux系统中,RPM包是常见的安装软件的格式之一。我们在安装RPM包时需要关注它的依赖关系,如果依赖关系没有得到满足,会导致安装失败。为了解决这个问题,我们可以使用YUM工具来安装RPM包,YUM工具不仅可以自动解决依赖关系,而且可以从本地源或者远程源中下载安装软件,大大简化了我们…

    Linux 2023年5月14日
    00
  • linux Top命令详解

    1.top命令 top是一种直接用来反映当前linux系统中资源利用情况和状态的命令,是一种非常实用和常用的命令。 2.为了解决什么问题 在计算机系统中资源有很多种,比如可贵的CPU资源、珍贵的内存资源、运行时间情况、执行用户信息和PID等等信息,我们在有时候需要知道这些信息的实时情况,这种情况下top命令是一种很好的选择。 3.主流使用方法 top显示整体…

    2023年4月8日
    00
  • Linux 学习笔记之超详细基础linux命令 Part 11

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ———————————接Part 10—————————— tar与bzip2配套使用 方法:tar-cvf tarfile.tar.gz –use=bzip2 file  #注意,tar…

    Linux 2023年4月11日
    00
  • Linux—回写机制

    前言 当我们修改了某个文件时,被修改的内容不会直接写入磁盘中,而是会写入由内核提供的一个buffer里,那么,内核会在一个特定的时间或者机制,再将buffer中的内容写进磁盘中去,为什么要这么做?原因就是减少开销,降低磁盘的读写次数。   缓存的三种机制 一般缓存有三种机制: 1.不缓存(nowrite):这种机制是跳过缓存,直接写入磁盘中。如果进行读操作时…

    Linux 2023年4月13日
    00
  • 登录linux,输入ls显示anaconda-ks.cfg cobbler.ks ….., 原因在于root@ ~ / 区别

     今天登录linux测试机,想要创建目录,ls的时候,找不到之前的的目录,才发现是目录不对的问题。 首先,先要弄清楚 [root@330c353813ea ~] 和 [root@330c353813ea /] 区别  [root@330c353813ea ~]  是linux主目录,相当于/root  [root@330c353813ea /] 是根分区,相…

    Linux 2023年4月11日
    00
  • Git:国内用命令行访问GitHub的方法

    1 直接改Hosts文件(现在不太管用了) 如果你是Linux或Mac系统,那么可以通过命令sudo vim /etc/hosts打开Hosts文件,并加入以下内容: 140.82.114.25 alive.github.com 140.82.112.25 live.github.com 185.199.108.154 github.githubassets…

    Linux 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部