问题标签 [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 回答
805 浏览

apache - 使用 mod_rewrite / RewriteCond 规则进行内容协商

我有一个用例是在 Github 页面中托管一组文件(具有不同序列化格式的相同 RDF 内容,例如 RDF/XML、Turtle 和 JSON-LD),并使用w3id URL作为永久标识符。

此外,我想对该永久 URL 进行内容协商。如果我将文件托管在 Apache 服务器中,这将是微不足道的,但不幸的是 Github 页面不支持内容协商。所以我想看看我可以在多大程度上通过 URL 重写规则来做到这一点。

所以思路和下面类似。

目前我的规则如下所示。

虽然这适用于大多数情况,但它会在某些极端情况下中断。例如,如果有一个像下面这样的接受头

这将返回 application/rdf+xml (因为第一个规则匹配)尽管根据内容协商它应该返回turtle。有谁知道改进规则以处理这种极端情况的方法?

0 投票
2 回答
368 浏览

asp.net-web-api2 - Web API 2.2 总是返回 JSON 内容

我下面的简单 Action 方法总是返回 JSON,不管Accept标头设置为application/xml. 内容协商适用于我在同一控制器中的其他操作。

什么可能导致它不执行内容协商,而是总是返回 JSON?

0 投票
1 回答
180 浏览

rest - HTTP 内容协商是否适用于错误消息?

如果客户端发送应用程序/xml 的 Accept 标头,任何错误消息的正文(例如 500)也应该是 xml 吗?还是 Accept 标头仅适用于 200 级响应?

0 投票
2 回答
1729 浏览

http - 仅允许 Nancy 在接受标头为 html 时返回 json 或 Xml 和 406

我正在写一个 Nancy 端点,我想做一些我认为应该非常简单的事情。我想支持以 json 或 xml 格式返回内容,但是当请求 html 或任何其他类型时返回 406 Not supported。我可以轻松地仅强制使用 XML 或 JSON,我想我可以这样做,如果(接受为 html)返回 406,但我认为在内容协商支持中对此有一些支持。

任何人都可以解释一下吗?

0 投票
0 回答
1541 浏览

rest - 当部署为 WAR 时,与参数的 Springboot 内容协商无法解决

我正在尝试@RestController在 json 和 xml 之间格式化我的响应内容类型。它似乎适用于Accept标题或路径扩展名(.json, .xml)。我的应用程序被打包为一个 WAR 并部署到一个 tomcat 实例。但是我目前面临两个问题。

1) 即使我在ContentNegotiationConfigurer请求curl -X GET -H "Cache-Control: no-cache" http://localhost:8080/v1/api/version解析为 XML时将默认内容类型设置为 JSON

2)当我在请求中使用参数时,内容解析不正确。在访问curl -X GET -H "Cache-Control: no-cache" http://localhost:8080/v1/api/version?format=json时,我得到了 XML。

SpringBoot 应用程序

WebMvcConfigurerAdapter

休息控制器

代码@Github 示例

任何帮助表示赞赏,谢谢!

0 投票
0 回答
1769 浏览

spring - 带有文件扩展名的 Spring URI PathVariable 不起作用

在调用我的控制器方法之前,我无法弄清楚为什么以下请求中的文件扩展名 (.jpg) 被剥离:

我已将内容协商设置为不支持路径扩展:

我的控制器是这样的:

我还尝试将以下内容添加到PlatformWebAppConfig上面的类中,但没有成功:

我已经尝试调试该问题,并且我所看到ContentNegotiationManagerFactoryBean.afterPropertiesSet的肯定是将该favorPathExtension设置视为错误并且没有设置内容协商策略(如预期的那样)。

更新:

如果我将请求映射更改为

文件名将包含扩展名,但这并不能解释为什么设置所有这些配置器没有取得任何效果????

0 投票
1 回答
109 浏览

asp.net-web-api - 没有 DataContract 的 WEB API 中的内容协商

如何使 HttpResponseMessage 遵循 xml 架构而不是数据合同?

我试着做

但这并没有奏效。

此外,如果我这样做,Action 将始终提供 xml 并且不会进行内容协商。我尝试将 List 添加为参数,但 HttpResponseMessage 不期望一个列表,只是一个项目。

有没有办法在不使用 DataContract 的情况下允许内容协商?基本上现在 HttpResponseMessage 忽略了 xml 模式。

0 投票
1 回答
1246 浏览

php - 如何让 Zf2 Apigilty 接受客户端请求,但标头中没有设置 Accept

最近我把我的rest server升级到了Zf2 Apigility,内容协商设置如下,

问题是我的客户端(移动应用程序)已经部署,并且他们发送的 post 请求在 http 标头中没有 Accept 字段设置。所以我总是从服务器收到以下 406 错误,

因此,任何人都知道如何让服务器接受来自客户端的此类请求,而标头中没有 Accept?

0 投票
1 回答
181 浏览

servicestack - ServiceStack 媒体类型

我正在阅读 jsoiapi 文档

jsopi.org

有人可以帮助我理解这一点

服务器职责

服务器必须在响应文档中发送所有 JSON API 数据,其标题为 Content-Type: application/vnd.api+json ,不带任何媒体类型参数。

如果请求指定标头 Content-Type: application/vnd.api+json 和任何媒体类型参数,服务器必须以 415 Unsupported Media Type 状态码响应。

如果请求的 Accept 标头包含 JSON API 媒体类型并且该媒体类型的所有实例都使用媒体类型参数进行了修改,则服务器必须使用 406 Not Acceptable 状态代码进行响应。

注意:存在内容协商要求以允许本规范的未来版本使用媒体类型参数进行扩展协商和版本控制。

我如何在 Servicestack 中实现这一点,我是否必须对上述内容持保留态度?

服务器必须在响应文档中发送所有 JSON API 数据,其标题为 Content-Type: application/vnd.api+json ,不带任何媒体类型参数。

这可以通过在 EndPointHostConfig 中使用 DefaultContentType = MimeTypes.Json 在 AppHost 中完成

但是剩下的两个呢?

0 投票
1 回答
278 浏览

rest - 如果相同的 URL 可以提供不同的内容类型,应该包括接受?

如果相同的 URL 可以为相同的资源提供不同的内容类型,则 Vary 必须包含 Accept ? 或者浏览器缓存和代理是否将其理解为隐式?

例子:

这个回应

或者这个