问题标签 [content-negotiation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring MVC 内容协商在提供 BufferedImage 时失败
我正在尝试将我的应用程序中的图像作为 java.awt.BufferedImage 对象提供。当我尝试执行 GET 时,结果如下:
- Accept:image/jpeg 渲染一张有效图片
- Accept:*/* 返回 HTTP 406
这是我的 servlet-context.xml 的相关部分:
这是我的控制器:
MediaType.IMAGE_JPEG_VALUE 是“图像/JPEG”。据我了解,*/* 的接受标头永远不会生成 HTTP 406,根据此页面,它告诉我们调用者不接受该类型的内容。
这是一个问题,因为大多数浏览器的接受标头中都有“*/*”,除非用户对接受标头进行硬编码,否则将无法查看此图像。
我在这里错过了什么吗?
提前致谢。
asp.net - Asp.net WebApi 支持json、xml、jsonp?
这个问题是特定于Asp.Net WebApi 的。
在我的全局文件中,我放了:
JsonpMediaTypeFormatter 是我拥有的自定义 Jsonp 格式化程序。
在此之后,当我打电话时,
有效。
但是,从我的全局文件中,如果我删除
然后它不起作用。
如果我想支持多种格式化程序怎么办?因为我可以将 HttpClient 用于 CORS 并要求 xml 或 json 或 jsop?
有人可以请教吗?
ajax - IE 9 不接受压缩的 AJAX 数据
我有一个返回网页数据的 node.js JSONP 服务器。该页面向 Node 服务器发出 AJAX 请求,并返回 JSONP 代码。
这在所有浏览器中都可以正常工作,直到我启用压缩。如果我以 deflate 或 gzip 压缩返回 AJAX 响应,它适用于除 IE 9 之外的所有人;这不会解码文件。IE 只显示返回的空白正文,没有错误,控制台上没有输出。
我已确保请求通过并将正确的数据返回给 IE 客户端,IE 只是不会接受它。以下是发送给所有客户端的响应标头:
我应该添加 - 这些标头出现在其他浏览器中,但 IE 没有显示“Content-Encoding: 标头。我认为这可能是正常的,因为我注意到启用压缩并在 IE 中工作的网站存在相同的行为。IBM .com 例如 - Chrome 显示内容编码,IE 没有。
那么IE不支持压缩而其他服务器正在检测它吗?有谁知道为什么 IE 拒绝这些数据?
干杯,
白原子
asp.net-web-api - ASP.NET Web API 通过检查请求内容类型以 JSON 或 XML 格式返回数据
使用 ASP.NET Web API 时,如何检查请求内容类型是 application/xml 还是 application/json?我知道 ASP.NET Web API 中的内容协商,但它不适用于我,因为我只从数据库中获取 XML 格式的数据。因此,如果我可以检查请求内容类型,我可以在请求内容类型为 XML 时将 XML 转换为 json,否则只需返回 XML。
提前致谢。
asp.net-mvc-4 - 如何使用内置的内容类型协商并获得决策权
我想利用内置的内容协商器,并且可以决定使用什么格式化程序。我不想使用 Request.Headers.Accept 并检查它是 json 还是 xml 内容类型,因为该决定涉及很多事情。有没有办法可以在控制器级别检查或覆盖任何告诉我将使用什么格式化程序或请求内容类型是什么的类?
提前致谢。
http - 内容协商被破坏了吗?
我最近对网络爬虫感兴趣,但有一件事对我来说不是很清楚。想象一个简单的爬虫,它将获取页面,从中提取链接并将它们排队以供以后以相同的方式处理。
当某些链接不会指向另一个页面而是指向某个资产或其他类型的静态文件时,爬虫如何处理这种情况?它怎么会知道?它可能不想下载这种可能很大的二进制数据,甚至也不想下载 xml 或 json 文件。内容协商如何落入此地?
当我向它发出请求时,我认为内容协商应该在网络服务器端起作用,如果它不能满足我的要求,它应该向我发回 html 响应或错误请求状态,没有其他方法是可以接受的,但这不是它的工作example.com/foo.png
方式Accept: text/html
真实的生活。无论如何,Content-Type: image/png
即使我告诉它我只接受它,它也会将二进制数据发回给我text/html
。为什么网络服务器像这样工作而不是强制我要求的正确响应?
内容协商的实现是否被破坏或应用程序有责任正确实现它?
真正的爬虫是如何工作的?提前发送 HEAD 请求以检查链接另一侧的内容被视为不切实际的资源浪费。
razor - ASP.NET MVC 4 / Web API - 为接受插入 Razor 渲染器:text/html
我正在使用 ASP.NET MVC 4 Web API 创建一个 RESTful Web 服务。对于 API 访问,我将返回 JSON,但一旦我让一切正常工作,默认情况下内容协商应该适用于 XML 和 JSON。
由于我正在努力实现真正以 RESTful 资源为中心的 Web 服务,因此我的 URI 将指向实际资源。如果请求中出现,我想通过返回资源的 HTML 表示来利用这一点Accepts: text/html
(比如在浏览器中抛出链接)。
我希望能够利用 MVC 4 Web API 的内容协商为使用 Razor 模板的 text/html 插入渲染器。有没有这样做的工作示例?
是的,这是桥接“常规”MVC 页面和 Web API。基本上我想创建一个渲染器,它使用基于约定的方法来查找和渲染 Razor 视图,就像“常规”MVC 一样。我可以提出基于约定的视图查找逻辑。 我只是在寻找 a)将我的渲染器全局插入text/html
到内容协商中,以及b)手动使用 Razor 引擎将我的模型渲染为 HTML。
rest - Spring MVC 3.1.1 ContentNegotiatingViewResolver - 如何在 contentTypes 中使用通配符?
我即将对我的 REST Web 服务进行版本控制,它基于 ContentNegotiatingViewResolver 以允许我返回 XML、JSON 以及 HTML 视图。
问题是,我既不能在 MappingJacksonJsonView 的 contentType 中使用通配符,也不能在 xmlMarshallingView 的 contentType 中使用通配符,它们都被 ContentNegotiatingViewResolver 引用。但我需要以通用方式定义这些 contentTypes,因为我有几个 mediaTypes(例如“application/vnd.springmvc3.sessionsinfo-v1+xml”和 application/vnd.springmvc3.sessionsinfo-v2+xml“),并且在同时似乎不可能为 MappingJacksonJsonView/xmlMarshallingView 声明多个 contentType。
这是我的调度程序 servlet 的片段:
我的控制器,例如产生 mediaType “application/vnd.springmvc3.sessionsinfo-v1+xml”:
现在我没有收到任何错误,但我也没有收到 XML 或 JSON,即使我通过接受标头明确请求它。我只得到 html,这就像我的配置中的后备策略。但是如果我写“application/vnd.springmvc3.sessionsinfo-v1+xml”而不是“application/*+xml”,它会很好用。
任何想法如何使它以更通用的方式工作?
http - HTTP 内容协商/压缩:使用 Base64 和 Accept-Encoding/Content-Encoding?
我想知道以下想法是否违背了HTTP Content Negotiation和HTTP Compression的精神和/或文字。
情况
HTTP 客户端请求资源:
HTTP 服务器返回此资源:
理念
客户认为请求资源编码是个好主意:
服务器接受此请求并返回编码的资源:
问题
我对这个想法不太满意。Accept-Encoding
使用和标头的HTTP 压缩Content-Encoding
是关于压缩数据,而不是像 Base64 那样增加其大小。
使用base64
这些标头的值是否违反了 HTTP 内容协商和 HTTP 内容压缩的精神和/或文字?
asp.net-web-api - 当请求具有不受支持的 Content-Type 时,如何配置 ASP.NET Web API 服务返回的状态代码?
如果向我的 Web API 服务发出请求,该请求的Content-Type
标头包含该服务不支持的类型,它会返回一个500 Internal Server Error
状态代码以及类似于以下内容的消息:
相反,我更愿意415 Unsupported Media Type
按照建议返回状态代码,例如,here。
我如何配置我的服务来做到这一点?