我正在编写一个简单的 HTTP 服务器,它将提供来自文件系统的内容。
我对客户端和服务器如何协商内容类型有点困惑。
经过一番研究,我发现 Content-Type 指定了正在发送的 HTTP 消息的内容类型,而 Accept 标头指定了程序期望接收的响应。
当我从浏览器访问我的服务器并读取初始 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 标头没有指定它将接受 pdf,这是根据我在 accept 标头值中看不到 MIME 类型 application/pdf 的事实来判断的。
然而,当我发送 pdf 的字节以及设置为 application/pdf 的内容类型时,浏览器会神奇地显示它。
那么,我错过了什么?我原本以为浏览器可能会对 URI 做一些基本的推断,看看它是否以 .pdf 结尾,然后接受相应的 MIME 类型。
但是,当我通过指向 pdf 的链接访问它时,Accept 标头保持不变。
任何帮助将非常感激。