HTTP状态码300(多项选择)的确切响应结构是什么?

Roy*_*ron 10 http http-status-codes http-headers

当用户点击我网站上图纸的链接时http://mysite.com/some-drawing,我希望我的服务器响应状态代码300和两个资源位置:http://mysite.com/some-drawing.png并且http://mysite.com/some-drawing.myapp,让客户端浏览器根据其功能自动决定使用哪一个:

  • 如果MyApp安装在用户的计算机上,则浏览器应下载该*.myapp版本并使用MyApp进行显示.

  • 但是,如果未安装MyApp,并且浏览器无法显示此版本,那么我希望它选择该*.png版本.

但是,我很难确定状态代码为300的HTTP响应的结构.

RFC2616说:

所请求的资源对应于一组表示中的任何一个,每个表示具有其自己的特定位置,并且正在提供代理驱动的协商信息(部分12),以便用户(或用户代理)可以选择优选表示并重定向其请求到该位置.

除非是HEAD请求,否则响应应该包括一个实体,其中包含资源特征和位置列表,用户或用户代理可以从中选择最合适的资源特征和位置.实体格式由Content-Type头字段中给出的媒体类型指定.根据用户代理的格式和功能,可以自动选择最合适的选择.但是,该规范没有为这种自动选择定义任何标准.

如果服务器具有首选的表示选择,则它应该在Location字段中包含该表示的特定URI; 用户代理可以使用Location字段值进行自动重定向.除非另有说明,否则该响应是可缓存的.

措辞" 包含资源特征和位置列表的实体 "似乎含糊不清.这是什么意思?有谁知道这是怎么做的?

Jul*_*hke 5

那行不通。

“多项选择”是通过发送超文本 (HTML) 内容中的链接并让用户选择来完成的。

  • 好吧,在找不到有关主要浏览器如何处理状态代码 300 的信息后,我已经下载了 webkit 源代码并自己搜索了答案。似乎 webkit 处理状态 300 就像其他重定向状态代码:根据 Location 标头重定向,或者如果缺少此标头则向用户显示错误。所以,看来@Julian-Reschke 毕竟是对的:我的解决方案不起作用。:-( (11认同)
  • 是的。您知道一种*允许*用户代理为您选择的格式吗? (3认同)
  • rfc 说:“根据用户代理的格式和功能,可以自动执行最合适的选择”。您是说所有主流浏览器都通过提示用户手动选择来对待所有状态 300 响应吗? (2认同)
  • “multipart/alternative”媒体类型没有指定替代品的类型。每个替代品都有自己的 mime 类型。该 mime 类型可以是例如“application/http”,并且包括诸如“HTTP/1.1 307 Moved\n\rLocation: //mysite.com/some-drawing.myapp”之类的 http 实体。但是,对于这样的事情,这似乎过于麻烦,而且我不确定在这种情况下浏览器会如何选择。但这只是一种选择;可能还有其他人。 (2认同)