问题标签 [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.

0 投票
1 回答
323 浏览

php - PhalconPHP:内容协商?

Phalcon 是否支持开箱即用的内容协商,还是有一些易于实施的解决方案?我正在搜寻“网”,但没有看到它。

谢谢!

0 投票
1 回答
580 浏览

javascript - Hapi.js 内容协商

我想在我的 hapi 路由中进行内容协商,以便我可以返回客户可以接受的数据类型。

有了快递,我会做这样的事情

有没有内置的方法可以用 hapi 做到这一点?我浏览了API 文档并没有看到任何东西。我是否坚持推出自己的解决方案?

0 投票
1 回答
524 浏览

java - Jersey - content negotiation for error handling

I'd like to allow clients to select an error response format using HTTP content negotiation.

E.g. given an endpoint

and exception mapper:

and having two body writers, MyBodyWriter and standard JacksonJsonProvider.

I'd like to invoke one of the writers depending on the contents of Accept header, e.g.

  • Accept: application/json -> invokes JacksonJsonProvider
  • Accept: application/vnd-mycompany-error, application/json -> invokes MyBodyWriter

I had tried different approaches but all of them fail because the matched HttpRule implies an application/json content type.

The only workaround I've found is to inject the request headers into ExceptionMapper and set the content type explicitly there -- but I don't like it.

0 投票
1 回答
135 浏览

http - 内容协商和扩展媒体类型

一些媒体类型是其他媒体类型的扩展。此类媒体类型通常在其名称中使用 + 来表示这一点。例如,application/atom+xml 扩展了通用 xml,application/hal+json 扩展了通用 json。

我的问题是:如果客户端请求通用媒体类型并且服务器想要使用扩展媒体类型之一进行响应,应该怎么做?例如,如果请求具有标头Accept: application/json并且服务器想要使用 application/hal+json 进行响应,那么服务器应该...

  1. ...提供一个普通的简 JSON 与Content-type: application/json,即不包括_links_embeddeds?这就是客户所要求的,这就是它得到的。如果您想要 HAL,请索取。

  2. Content-type: application/json...使用?提供 HAL 表示 HAL,毕竟是 json,这就是客户要求的。客户很高兴,可以忽略它不理解的部分。

  3. Content-type: application/hal+json...使用?提供 HAL 表示 像 2. 一样,客户端得到它想要的并且可以忽略它不理解的位。但也有一条线索表明,客户可以从表示中获得更多收益。

我的偏好是 3。但是是否有规范、最佳实践或常用方法可以提供指导,这是最佳选择?

0 投票
1 回答
1291 浏览

spring - 如何在控制器中更改视图的 mediaType - Spring MVC

我已经使用http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc实现了内容协商。

我有一个控制器 ProviderController 并且该控制器中的所有视图都在 web.xml 中附加了 .action

如果需要在 html 中呈现任何视图,我使用格式查询参数(例如:renderHtml.action?format=html)。如何在不使用格式查询参数的情况下以另一种格式呈现页面?

PS:我使用的是spring 3.0。我不能使用产生注释。

谢谢

编辑 :

provider-servlet.xml 中的 viewresolver 配置

网页.xml:

控制器 :

0 投票
1 回答
11297 浏览

xml - 如何在 Spring MVC 中配置自定义 MediaType?

使用 Spring MVC,我的控制器已经同时适用于 JSON 和 XML 媒体格式。在内容协商配置中,我想只依赖 Accept header,并引入自定义名称媒体类型,例如:“myXml”

我的配置:

我的控制器:

它工作得很好,接受标头:application/json生成 JSON,application/xml生成 XML。其他任何东西都会返回 406 Not Acceptable,甚至myXml.

我期待xml虽然......

0 投票
1 回答
291 浏览

asp.net-mvc-routing - Web API 2.2 带有文件扩展名的内容协商

我正在开发一个 Web API,我想使用带有文件扩展名的内容协商来允许浏览器客户端指定他们想要接收的内容。例如

根据这篇文章(http://msdn.microsoft.com/en-us/magazine/dn574797.aspx),我应该能够使用类似这样的东西设置路由

//设置带有扩展名的路由 config.Routes.MapHttpRoute( name: "Url extension", routeTemplate: "{controller}/{action}.{ext}/{id}", defaults: new { id = RouteParameter.Optional } ) ;

这是我的简单控制器

使用这个网址

我总是得到浏览器的默认值(chrome 中的 xml,IE11 中的 json)。

或者可能

我得到错误

我应该能够使用我的自定义格式化程序。但它没有发生。这是我的自定义格式化程序的构造函数。

再次根据文章,这应该有助于 API Content Negotiator 使用我的自定义格式化程序。我很感激任何帮助。

0 投票
1 回答
913 浏览

asp.net-mvc - 在 MVC 中,不使用 ActionResult 返回类型时如何指定 JSON 序列化?

使用 ASP.NET MVC 5,您可以跳过丑陋的“ActionResult”返回类型,而是指定一个“真实”类。但是,似乎 MVC 想要返回.ToString()我的对象​​的版本,Content而不是我想要的我的对象的 JSON 序列化版本——类似于 ASP.NET MVC WebApi2。

给定这个控制器......我如何在不改变方法的情况下获得 JSON 结果?

0 投票
0 回答
163 浏览

xml - ContentNegotiatingViewResolver 可以处理 .json 但不能处理 .xml

我正在使用 ContentNegotiatingViewResolver 使 .json 返回 json 格式数据, .xml 返回 xml 格式数据。ContentNegotiatingViewResolver 配置如下:

当我使用 id.json 时,它可以返回正确的数据。日志显示:org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - 使用 [org.springframework.http.converter.json 将 [****] 写为“application/json;charset=UTF-8”。映射Jackson2HttpMessageConverter@37771ee5]

但是当我使用 id.xml 时。它报告 406 错误 此请求标识的资源只能生成具有根据请求“接受”标头不可接受的特征的响应。日志显示:org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - 从处理程序 [***] 解决异常:org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示

有没有我想念的步骤?

0 投票
1 回答
93 浏览

http - HTTP 内容协商和 Range 标头

Range标头如何与Content Negotiation一起使用?让我解释一下,但首先让我们都同意以下几点:HTTP 是一种无状态协议。

当 HTTP 服务器能够发送单个资源的多个表示时,内容协商用于确定要发送的表示:客户端可能会指示其偏好(即英语和 GIF),然后服务器将遵守或 - 在以下情况下它不能——服务器会通过一些启发式评估来选择发送给客户端的表示。

到目前为止一切都很好......但是当你投入其中时会发生什么Range

想象以下场景:

John 在巴黎的一个机场,他的浏览器发送一个 HTTP 请求。出于某种原因,他的浏览器没有显示任何内容类型、语言或压缩方面的偏好。

由于它几乎没有经过,服务器通过一些启发式方法,决定发送 URI 的法语表示(IP 被识别为来自法国。)

在传输过程中,John 停止下载以赶上他的航班。约翰一到纽约就恢复下载。

同样,在客户端偏好信息很少的情况下,服务器这次决定发送 URI 的英文表示(IP 被识别为来自纽约。)

至此,该文件已损坏,因为它的一部分是法语,另一部分是英语。

推测:

  • 客户端可能会记住第一个响应中的内容类型和语言,以便将该信息发送回服务器以用于第二个请求(在 下Accept: text/html Accept-Language: fr)。但是,由于RFC2616RFC7233都对此进行了说明(甚至不是建议),我相信具有这种行为的 HTTP 客户端很少见……但我还没有对其进行测试。

笔记:

  • 在上面的场景中,我们可以很容易地让客户端发送首选项并让服务器无法遵守......并且仍然回退到其他启发式方法。问题仍然存在。
  • 作为另一个例子,这个问题也存在于另一个 SO 问题中:Sample http range request session

TL;博士

在上面,范围适用于所请求资源的哪种表示?!