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

apache - mod_rewrite 规则和内容协商

我对 mod_rewrite 比较陌生,但是有一个我想拥有“漂亮网址”的网站。类似于SO :)。

我试图有这样的事情:“ http://www.whatever.com/search/test ”被重写为“ http://www.whatever.com/search.php?q=test ”并且有一些限制成功。我相信内容谈判正在妨碍我……

对于初学者,这是我的测试 .htaccess 文件:

不幸的是,它确实重定向到了 search.php,但没有在 q 变量中传递我的参数。但是,这确实有效:

事实上,如果我一起删除所有规则,我会得到与文件的第一个版本相同的结果。所以我的结论是,即使没有任何 mod_rewrite 规则,apache 也很乐意将“foo”重定向到“foo.php”,因此必须是内容协商在处理它。(如果我将我的 foo.php 重命名为 foo.html,这进一步证实了这一点,如果我只是转到“foo”,它仍然会找到该文件)。

所以,问题是。如何正确使用 mod_rewrite 进行内容协商?我可以为特定文件禁用它吗?有没有办法确保我的 mod_rewrite 规则在内容协商发生之前发生?

如果相关,这里是我的 apache conf 的 mod_userdir 部分的 conf 文件(这个测试站点在我用户的 homedir/public_html 中):

0 投票
2 回答
392 浏览

browser - 如何从浏览器中下载具有非 HTML 内容类型的文件?

我正在尝试使用内容协商来提供 HTTP 服务器上资源的 HTML 和 RDF/XML 表示。在服务器端这有效,即

将检索正确的版本。我也可以用 JavaScript/Dojo 做同样的事情:

这将在弹出对话框中显示结果。我被卡住的地方是为用户提供了一种下载此版本的方法。我想在页面上有一个链接,可以在浏览器中将 RDF 显示为页面,或者直接打开保存对话框。如果不求助于查询参数或其他技巧,这是否可能?

0 投票
4 回答
2338 浏览

ruby-on-rails - Rails 中的 RESTful 内容协商

我希望在 Rails 应用程序中对某些资源实施内容协商。我正在使用 Mootools,并且可能能够将 XMLHTTPRequest 接受的内容类型调整为“application/json”。

有没有办法在我的控制器中获取这些信息并生成 JSON 响应而不是 XHTML?

我试图避免做类似的事情:

...因为它弄脏了我的 URL,强加了一定程度的冗余并且不那么灵活。

谢谢!

0 投票
1 回答
117 浏览

http - 内容协商中的规范与请求类型

所以我想知道对于返回的数据可能具有多个有效 MIME 类型的请求,应该如何处理 HTTP 内容协商。

例如,如果说我有一些具有以下可能 MIME 类型的任意数据:

鉴于可能有多种 MIME 类型,客户端应用程序从我的 Web 应用程序请求这种形式的数据应该合理地期望接收到这种类型的数据,而不管他们在请求 Accept 标头中使用哪种 MIME 类型。但是,对于哪种类型是该数据的规范类型,通常会有一些共识(即,一种是在 IETF 适当注册的 MIME 类型,而另一种是预注册或预标准化类型)。

所以我的问题是我应该在回复这些请求时将返回的 Content-Type 标头设置为规范类型还是请求的类型?哪个是更好的做法?

我应该始终返回规范类型,还是应该回显请求的类型以确保与尚未更新的较旧/编写不佳的应用程序兼容?目前我正在返回规范类型,因为这似乎是一种更好的方法,并且大多数人正在使用我正在使用的数据类型做些什么。

这有点主观,所以如果您认为它应该是社区 wiki 而不是问题,请告诉我,我会考虑更改它

0 投票
3 回答
758 浏览

ajax - 使用浏览器后退按钮时忽略内容协商

情况如下:

我有一个响应资源列表请求的 Web 应用程序,可以说:

这最初是由 Web 浏览器通过导航到该路径直接请求的。浏览器使用它的标准“Accept”标头,其中包括“text/html”,我的应用程序注意到这一点并返回项目列表的 HTML 内容。

返回的 HTML 中包含一些 JavaScript (jQuery),然后执行 ajax 请求来检索实际数据:

只有这一次,“Accept”标头被显式设置为“application/json”。同样,我的应用程序注意到了这一点,并且 JSON 被正确地返回到请求中,数据被插入到页面中,一切都很顺利。

问题来了:用户导航到另一个页面,然后按下 BACK 按钮。然后提示他们保存文件。这原来是项目列表的JSON数据。

到目前为止,我已经确认 Google Chrome 和 Firefox 3.5 都会发生这种情况。

这里有两种可能的答案:

  1. 我该如何解决这个问题。是否有一些 Cache-Control 标头或其他巫术的神奇组合导致浏览器在这里做正确的事情?

  2. 如果您认为我在这里做错了什么,我该怎么办?我正在寻求正确性,但也尽量不牺牲灵活性。

如果有帮助,该应用程序是一个 JAX-RS Web 应用程序,使用 Restlet 2.0m4。如果有帮助,我可以提供示例请求/响应标头,但我相信这个问题是完全可重现的。

0 投票
1 回答
5423 浏览

xml - 是否有关于如何将 Spring 3.0 内容协商用于 RESTful 服务的示例?

我正在阅读有关如何使用 Spring MVC 创建 REST 样式服务的Spring 3.0 文档博客文章(后续),但我找不到任何有关如何使用 ContentNegotiatingViewResolver 的工作示例。我有一个像这样的测试控制器

并尝试使用这样的东西

尝试根据 URL 中的扩展名解析视图(我想支持 html、.xml 和 .json)。.html 视图有效(也显示了正确的 JSP 视图),但我尝试让 JSON 和 XML 启动并运行似乎没有任何效果(设置 defaultViews 属性只是我尝试过的事情之一)。似乎也没有那么多阅读材料。有没有人有经验或例子?

0 投票
2 回答
4850 浏览

php - 如何根据浏览器语言重定向用户

  1. 我想根据浏览器语言重定向用户,我想出了如何在这里做到这一点,它工作正常,这里是代码(PHP):

    /li>
  2. 问题是我只想从其他网站或第一次访问我的网站时重定向用户。这意味着我不希望用户阅读我网站的某些页面,当他们返回索引时,他们被重定向到其他页面。而且我的网站也有一个链接,比如:英文或中文,当用户从中文页面点击英文时,他们会转到index.php并被重定向回中文页面,这使得用户无法访问英文页面. 如何在 PHP 或 JavaScript 中解决这个问题?

0 投票
1 回答
672 浏览

apache - Tomcat 上的内容协商

我试图让我的 Tomcat 使用漂亮的 URL,类似于 Apache 的 MultiViews 选项。我尝试使用 AJP 将 Tomcat 代理到 Apache,但 .htaccess 文件仍然被忽略。我对 Tomcat 有哪些选择?

0 投票
2 回答
710 浏览

c# - 是否有 C# 或 .NET 类来处理 HTTP 内容协商?

是否有 C# 或 .NET 类来处理与用户代理的 HTTP 内容协商?

我希望能够提供可接受的内容类型列表,并与浏览器协商以找到最佳匹配。

0 投票
1 回答
69 浏览

computer-science - 在 HTTP 上下文之外如何调用“内容协商”的概念?

“内容协商”有哪些不同的术语(当不谈论 HTTP 时)?

例如:一些(远程或本地)服务、组件、模块正在协商使用哪种协议和/或交换哪种内容类型。

服务提供者

  • 关于内容:
    • 我很擅长的是提供苹果。
    • 我也可以提供香蕉,但需要更多时间。
    • 我也可以提供橙子,但它们的质量并不总是可以的。
  • 关于协议:
    • 我可以用塑料袋把水果拿给你。
    • 或者,我可以把它扔向你的方向。它更快,但有些水果可能会丢失。

服务消费者

  • 我需要一些水果。
  • 香蕉可以,但苹果会很棒!
  • 我现在需要它们!
  • 有些人可能会迷路。

现在,在使用了一些协商协议之后,提供者和用户决定对他们来说最佳的解决方案是:“提供者消费者扔一些苹果”。

我希望你喜欢我的例子;)

那么,什么更适合我正在寻找的术语?