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

php - 带有内容协商的 Laravel 4 RESTful Api

我正在使用 laravel 的 RESTFul API,我想在我的项目中使用内容协商,但我不知道如何实现。我的控制器按 api 版本分隔,我想区分 api 版本并根据版本使用正确的控制器。

我的 API 路由器是:

我应该创建一个 api.type 过滤器以在我的路由组中使用,还是应该在路由组 clousure 或每个控制器中执行此操作?

0 投票
4 回答
394 浏览

php - 锂含量协商显示所有数据 - 如何过滤掉它?

我在索引操作app/controllers/UsersController.php中做了一个简单的操作。Users::find('all');

该路径/users/index呈现用户数据的普通 HTML 输出。该路径/users/index.json呈现 HTML 输出的 JSON 等价物,这很好,除了它还公开了密码(它是散列的,但仍然......)。

我看到了两种避免这种情况的选择:

  1. fields在我的查找器中明确指定。
  2. 过滤Media::render()和取消设置任何敏感数据。

从长远来看,我觉得#2 可能更容易维护。有什么意见吗?是否有第三种更好的替代方案?

这就是我实现#2的方式:

任何意见,将不胜感激。

0 投票
1 回答
932 浏览

asp.net-web-api - Web API 中文件下载的内容协商

我有一个 Web API REST 服务方法,它返回 pdf 文件。代码如下:

我怀疑 API 中的其他方法,我对响应的媒体类型使用了内容协商。我还需要在这里使用内容协商吗?这里需要还是不需要?

0 投票
2 回答
1219 浏览

http - Which CDN solutions support caching with content negotiation?

I'm serving a set of resources through content negotiation. Concretely, any URL can be represented in different formats, depending on the client's Accept header.

An example of this can be seen at Facebook:

  • curl -H "Accept: application/json" http://graph.facebook.com/daft-punk
    results in JSON
  • curl -H "Accept: text/turtle" http://graph.facebook.com/daft-punk
    results in Turtle

I'm looking for a CDN that caches content based on URL and the client's Accept header.

Example of what goes wrong

CloudFlare doesn't support this: if one client asks for HTML, then all subsequent requests to that URL receive the HTML representation, regardless of their preferences. Others have similar issues.

For example, if I would place CloudFlare over graph.facebook.com(and configure it to cache “extensionless” resources, which it does not by default), then it would behave incorrectly:

  1. I ask for http://graph.facebook.com/daft-punk in JSON through curl;
    in response, CloudFlare asks the JSON original from the server, caches it, and serves it.
  2. I ask for http://graph.facebook.com/daft-punk through my browser (thus in HTML);
    in response CloudFlare sends the cached JSON (!) representation, even though the original server would have sent the HTML version.

What would be needed instead

The correct behavior would be that CloudFlare asks the server again, since the second client had a different Accept header. After this, requests with similar Accept headers can be served from cache.

Which CDN solutions support content-negotiation, and also cache negotiated content?
So note that only respecting Accept is not enough; negotiated responses should be cached too.



PS1: It's easy to make your own caching servers support it. For instance, for nginx:

Note how the client's Accept header is part of the key that indexes the cache. I want that on CDN.


PS2: It is not an option to use different URLs for different representations. My application is in the Linked Data domain, where URLs play an important role for identification.

0 投票
2 回答
322 浏览

java - Spring 3.2.x:在 406 Not Acceptable 的情况下跳过控制器方法

所以,让我们有这个简单的控制器:

...以及以下上下文片段:

这基本上意味着我希望能够返回结果 bean 的 json 表示,否则返回 406。

如果我发送 GET 请求accept=application/json,一切正常,在 http 响应中返回一个 json 表示,状态为 200 Ok。

如果我发送 GET 请求accept=application/xml,则返回 406。

我在第二种情况下的问题是,即使最终返回 406,该getSomething()方法仍然被调用(我可以在日志中看到)。虽然这对 GET 方法来说没什么大不了的,但它可能会导致 POST 方法的混乱(资源被更改,但返回 406)。

有没有一种简单的方法来告诉 SpringMVC在调用控制器方法之前accept检查标头并返回 406 ?还是我必须开发一个自定义的 http SpringMVC 拦截器?

0 投票
1 回答
130 浏览

javascript - 内容协商 - 在 Firefox 中显示图像

我有一个缩影画廊。单击其中一个后,将在新选项卡中打开等效的全尺寸。假设我有很多版本的 image .jpg,.gif and .png。如何修改我的文件以显示正确的(浏览器最想要的)文件?

我的Firefox的偏好是:

和我的 .php 文件:

0 投票
1 回答
33 浏览

php - 内容协商值可以乱序发送吗?

我正在从Accept-Language标题中确定用户的语言/区域设置,并且想知道它们是否会被乱序传递。我编写了一个 php 排序函数来确保它们按降序排列,但如果没有必要,我想删除它。

正确顺序示例:

Accept-Language: fr-ca, fr; q=0.8, en-ca; q=0.6, en-us; q=0.4, en; q=0.2

错误顺序示例:

Accept-Language: fr-ca, en; q=0.2, en-ca; q=0.6, en-us; q=0.4, fr; q=0.8

0 投票
0 回答
1109 浏览

json - 带有路径扩展的 Spring Content-Negotiation(通过扩展设置 Accept-Header?!)

我想通过两种不同的@Controller 方法获得相同的 URL 路径句柄,这部分有效。这是我所拥有的:

WebMvc 配置:

控制器:

当前行为:

好的:

GET /test/profile(带Accept=*/*)调用getProfile()

GET /test/profile(带Accept=application/json)调用getProfile()

GET /test/profile.json(带Accept=*/*)调用getProfile()

GET /test/profile.json(带Accept=text/vcard)返回406 NOT ACCEPTABLE

GET /test/profile(带Accept=text/vcard)调用getProfileVCard()

GET /test/profile.vcf(带Accept=text/vcard)调用getProfileVCard()

错误的一个:

GET /test/profile.vcf(with Accept=*/*) 调用getProfile()和返回406 NOT ACCEPTABLE

为什么会调用错误的方法?我以为我favorPathExtension(true)在我的配置中进行了设置,以便在设置某些路径扩展时让 Spring 覆盖 Accept-Header?

编辑:

我现在也在favorPathExtension(true).ignoreAcceptHeader(true).favorParameter(true)我的配置中进行了设置,但它仍然不起作用,profile?format=vcf甚至profile.vcf?format=vcf不起作用

0 投票
1 回答
12175 浏览

c# - 返回 HTML 的内容协商

在阅读这篇关于如何使用. IHttpActionResult_ IHttpActionResult_ApiControllerAccept

给定具有与此类似的签名的控制器操作:

如果请求指定了Accept: text/html,则IHttpActionResult应该使用它来返回 HTML。那可能吗?此外,我们将不胜感激有关此内容协商管道如何适用于 json 或 xml(具有内置支持)的一些见解。

0 投票
2 回答
362 浏览

owin - NancyFx conneg 从 IResponseProcessor 返回 406,文本/html 内容类型除外

我在Microsoft.Owin.Host.IIS (Helios) 上运行 Nancy。

我正在尝试连接 conneg viaIResponseProcessor以响应 的Accept标头text/plain,但它只会返回 406。

我尝试了多种内容类型,但没有任何效果....除了,奇怪的是,text/html(在清除基础之后ViewProcessor)。

然后,在模块中:

更新:我已经编辑了上面的代码以显示和的正确IResponseProcessor组合Negotiator

Github 源码