Tag: URL 方案

同一资源的不同RESTful表示

我的应用程序在/foo有一个资源。 通常情况下,它是这样的HTTP响应负载: {"a": "some text", "b": "some text", "c": "some text", "d": "some text"} 客户端并不总是需要这个对象的全部四个成员。 什么是RESTfully语义的方式让客户告诉服务器在表示中需要什么? 如果它想要: {"a": "some text", "b": "some text", "d": "some text"} 它应该如何GET它? 一些可能性(如果我误解了REST,我正在寻找更正): GET /foo?sections=a,b,d 。 查询string(毕竟称为查询string)似乎意味着“查找与此条件匹配的资源并告诉我有关它们”,而不是“根据此自定义向我表示此资源”。 GET /foo/a+b+d我最喜欢的是REST语义不包含这个问题 ,因为它的简单性。 打破URI不透明,违反HATEOAS。 似乎打破资源(URI的唯一含义是识别一个资源)和表示之间的区别。 但这是值得商榷的,因为它与代表/widget/<id>资源的可视列表/widget/<id>一致,这是我从来没有遇到的问题。 松开我的约束,对GET /foo/a等做出响应,并让客户端对每个/foo组件的请求进行请求。 如果/foo有数百个组件,而客户端需要100个组件,那么开销就会增加,这可能会变成一场噩梦。 如果我想支持/foo的HTML表示,我必须使用Ajax,如果我只想要一个可以被抓取,由极简主义浏览器渲染的HTML页面,这是有问题的。 为了维护HATEOAS,它还需要指向其他表示中存在的那些“子资源”的链接,可能在/foo : {"a": {"url": "/foo/a", "content": "some text"}, …} GET /foo , Content-Type: […]

在HTTP URL的path部分中,斜杠(“/”)等同于编码的斜杠(“%2F”)

我有一个网站,不同的URL的path部分(而不是查询string)中的“/”和“%2F”。 根据RFC或现实世界,这是一件坏事吗? 我问,因为我一直使用我正在使用的Web框架(Ruby on Rails)以及下面的层(Passenger,Apache,例如,我必须为Apache启用“ALLOW_ENCODED_SLASHES”)时遇到一些小惊喜。 我现在倾向于彻底摆脱编码的斜杠,但是我不知道是否应该提交错误报告,在那里我看到涉及编码斜杠的奇怪行为。 至于为什么我首先有编码的斜线,基本上我有这样的路线: :controller/:foo/:bar 其中:foo类似于可以包含斜杠的path。 我认为最简单的事情就是只要URL转义foo所以斜杠被路由机制忽略。 现在我有疑问了,很明显,这个框架并不是真的支持这个,但根据RFC,这样做是错误的吗? 以下是我收集的一些信息: RFC 1738(URL): 当一个八位字节由一个字符表示并且被编码时,通常一个URL具有相同的解释。 但是,对于保留字符而言,这不是真的:对为特定scheme保留的字符进行编码可能会改变URL的语义。 RFC 2396(URI): 这些字符被称为“保留”,因为它们在URI组件中的使用仅限于其保留的用途。 如果URI组件的数据与保留目的冲突,那么冲突的数据必须在形成URI之前转义。 (在这里转义意味着除了编码保留字符之外的东西吗?) RFC 2616(HTTP / 1.1): 除“保留”和“不安全”集以外的字符(见RFC 2396 [42])等同于其“”HEX HEX“%”编码。 还有Rails的这个错误报告 ,他们似乎期望编码的斜线行为不同: 对,我期望不同的结果,因为他们指着不同的资源。 它正在寻找根目录中的文字文件“foo / bar”。 非转义版本正在寻找目录foo中的文件栏。 从RFC中可以清楚的看到,原始编码和未编码的字符是相同的,但是保留字符的故事是什么?

什么字符必须转义HTTP查询string?

这个问题涉及URL的查询string部分中的字符,它出现在? 标记字符。 根据维基百科 ,某些字符保持不变 ,其他字符被编码(通常使用%转义序列)。 我一直在试图追踪到实际的规格,所以我理解维基百科页面中的每一个重点的理由。 矛盾例1: HTML规范说将空间编码为+然后将其余部分推迟到RFC1738 。 但是,这个RFC表示~是不安全的,而且“不安全的字符必须始终在URL中进行编码”。 这似乎与维基百科矛盾。 实际上,IE8在它生成的查询string中编码~ ,而FF3保持原样。 矛盾例2: 维基百科指出,所有未提及的字符都必须进行编码。 ! 没有在维基百科中提及。 但RFC1738指出! 是一个“特殊”字符和“可以使用未编码”。 这似乎与维基百科相矛盾,说它必须被编码。 实际上,IE8编码! 在它生成的查询string中,而FF3保持原样。 我明白,这个道德可能会被编码在维基百科和规范之间的疑问字符。 也许甚至会编码一切不是[A-ZA-Z0-9]的东西。 我只想知道这方面的实际标准。 结论 维基百科上描述的algorithm精确地对那些不是RFC3986非保留字符的字符进行编码。 也就是说,它编码除了字母数字和-._~以外的所有字符。 作为特殊情况,空间被编码为+而不是每个RFC3986的%20 。 某些应用程序使用较旧的RFC。 为了比较, RFC2396未保留的字符是字母数字和!'()*-._~ 。 为了比较, HTML5工作草案algorithm对除字母数字和*-._之外的所有字符进行编码。 编码空间的特殊情况仍然是+ 。 值得注意的区别是*不是编码,而是编码。 (从技术上讲, *处理与RFC3986兼容,即使*因为处于query生产允许的sub-delims而被reserved )。

在web.config转换中replaceIIS重写规则

我有一些IIS重写规则,我想根据环境而有所不同。 开发重写规则在web.config文件中,然后在web.test.config文件的末尾有: <appSettings> …Some app settings tranforms here </appSettings> <system.webserver> <rewrite xdt:Transform="Replace"> <rules> … rules here </rules> </rewrite> </system.webserver> </configuration> 当我部署testing时,我的应用程序设置正在变换,但是由IIS重写规则不是。 我希望整个<rewrite>部分将被replace为转换文件中的一个(按照http://msdn.microsoft.com/en-us/library/dd465326.aspx ),但是没有任何更改。 我已经试过把xdt:Transform="Replace" xdt:Locator="Match(name)">放在个别规则上: <rule name="Test rule" stopProcessing="true" xdt:Transform="Replace" xdt:Locator="Match(name)"> 但是这也没有什么区别。 甚至有可能取代web.config中的重写规则,如果是这样,我错过了什么?

MVC3 Url.Action查询string生成

我想在JavaScript环境(在cshtml文件中)生成一个MVC 3行动的url。 <script type="text/javascript"> … var src = "@Url.Action("GetProductImage", new { productId = Model.Product.Id, pos = 1, size = 0 })"; $(document.createElement("img")).attr("src", src); … </script> 现在这工作得很好,我的问题是查询string正在逃脱。 代替: "/Products/GetProductImage?productId=1&pos=0&size=0" 它会产生: "/Products/GetProductImage?productId=1&amp;pos=0&amp;size=0" 所以我的行动不会被调用。 现在我知道我可以创build自己的Url帮助器函数,但是我想知道是否可以使用这个或者其他一些内置的帮助器来获取非转义的URL? 在此先感谢,G.

点斜线对PHP的作用是什么?

A.这是做什么的? require ("./file.php"); B.与此相比? require ("file.php"); (它不是一个目录..这将是) require ("../file.php");

什么字符在URL中有效?

可能重复: 哪些字符使url无效? 我试图删除一个大string的非URL部分。 我发现的大多数正则expression式都像[A-Za-z0-9-_.!~*'()] ,但是url还可以包含更多的东西。 像http://127.0.0.1:8080/test?v=123#this例如 那么有效的URL最新的字符是什么? 编辑: 他们似乎是: A-Za-z0-9 -._〜:/?#[] @!$&'()* +,; =和%后跟hex值

Python urlparse – 提取没有子域名的域名

需要一种方法来提取一个没有使用Python urlparse的url中的子域名的域名。 例如,我想从诸如"http://www.google.com"的完整url中提取"google.com" "http://www.google.com" 。 最接近的,我似乎来与urlparse是netloc属性,但包括子域名,在这个例子中是www.google.com 。 我知道可以编写一些自定义string操作来将www.google.com变成google.com,但是我想避免在这个任务中进行string转换或正则expression式。 (原因是我对URL形成规则不够熟悉,以至于我可以考虑编写自定义parsing函数时所需的每个边界案例。) 或者,如果urlparse不能做我所需要的,有没有人知道任何其他的Pythonurlparsing库呢?

在Ruby on Rails的控制器中获取URL的锚部分

有没有办法获得控制器中的URL的锚部分? 例如:如果我键入http://www.foo.com/bar#anchor123我可以得到stringanchor123在我的控制器?

如何在Groovy中编码URL?

Groovy中是否有一种URLEncode? 我无法find任何string→stringURL编码工具。 例如: dehydrogenase (NADP+) → dehydrogenase%20(NADP%2b) (而不是%20也是可以接受的,因为有些实现这样做)