当我的浏览器没有指定它会接受的内容时,它如何显示 pdf?
How does my browser display a pdf when it didn't specify that's something it would accept?
我正在编写一个简单的 HTTP 服务器,它将提供来自文件系统的内容。
我对客户端和服务器如何协商内容类型有点困惑。
经过一些研究,我发现 Content-Type 指定了正在发送的 HTTP 消息的内容类型,而 Accept header 指定了程序期望接收的响应。
当我从浏览器访问我的服务器并读取初始 GET 请求(使用空 URI 访问时)时,我得到以下信息:
GET / HTTP/1.1
Host: 127.0.0.1:1234
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
如您所见,accept header 没有指定它将接受 pdf,根据我在 accept [=32] 中看不到 MIME 类型 application/pdf 的事实来判断=]值。
然而,当我发送 pdf 的字节以及设置为 application/pdf 的内容类型时,浏览器神奇地显示了它。
所以,我错过了什么?我原本以为浏览器可能是在对URI做一些基本的推断,看它是否以.pdf结尾,然后接受相应的MIME类型。
但是,当我使用 link 访问 pdf 时,接受 header 保持不变。
任何帮助将不胜感激。
I'm writing a simple HTTP server
那么您应该学会在描述 HTTP 的各种 RFC 中寻找出路。
这里相关的是RFC 7231, 5.3.2. Accept:
If the header field is
present in a request and none of the available representations for
the response have a media type that is listed as acceptable, the
origin server can either honor the header field by sending a 406 (Not
Acceptable) response or disregard the header field by treating the
response as if it is not subject to content negotiation.
浏览器原则上想要显示 HTML-formatted 文档,对于服务器愿意提供的 (X)HTML 的任何变体,因此默认情况下它发送接受 header你观察到了。
但是,如果请求是针对另一种资源,则服务器可以自由地响应该类型的内容。
我正在编写一个简单的 HTTP 服务器,它将提供来自文件系统的内容。
我对客户端和服务器如何协商内容类型有点困惑。
经过一些研究,我发现 Content-Type 指定了正在发送的 HTTP 消息的内容类型,而 Accept header 指定了程序期望接收的响应。
当我从浏览器访问我的服务器并读取初始 GET 请求(使用空 URI 访问时)时,我得到以下信息:
GET / HTTP/1.1
Host: 127.0.0.1:1234
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
如您所见,accept header 没有指定它将接受 pdf,根据我在 accept [=32] 中看不到 MIME 类型 application/pdf 的事实来判断=]值。
然而,当我发送 pdf 的字节以及设置为 application/pdf 的内容类型时,浏览器神奇地显示了它。
所以,我错过了什么?我原本以为浏览器可能是在对URI做一些基本的推断,看它是否以.pdf结尾,然后接受相应的MIME类型。
但是,当我使用 link 访问 pdf 时,接受 header 保持不变。
任何帮助将不胜感激。
I'm writing a simple HTTP server
那么您应该学会在描述 HTTP 的各种 RFC 中寻找出路。
这里相关的是RFC 7231, 5.3.2. Accept:
If the header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable, the origin server can either honor the header field by sending a 406 (Not Acceptable) response or disregard the header field by treating the response as if it is not subject to content negotiation.
浏览器原则上想要显示 HTML-formatted 文档,对于服务器愿意提供的 (X)HTML 的任何变体,因此默认情况下它发送接受 header你观察到了。
但是,如果请求是针对另一种资源,则服务器可以自由地响应该类型的内容。