相关疑难解决方法(0)

是斜杠("/")等效于HTTP URL的路径部分中的编码斜杠("%2F")

我有一个网站,以不同的方式处理URL的路径部分(而不是查询字符串)中的"/"和"%2F".根据RFC或现实世界,这是一件坏事吗?

我问,因为我正在使用我正在使用的Web框架(Ruby on Rails)以及下面的图层(Passenger,Apache,例如,我必须为Apache启用"ALLOW_ENCODED_SLASHES").我现在倾向于完全摆脱编码的斜杠,但我想知道我是否应该提交错误报告,我看到涉及编码斜线的奇怪行为.

至于为什么我首先有编码的斜杠,基本上我有这样的路线:

:controller/:foo/:bar
Run Code Online (Sandbox Code Playgroud)

其中:foo就像一个可以包含斜杠的路径.我认为最简单的做法就是只进行URL转义,foo以便路由机制忽略斜杠.现在我有疑虑,而且很明显框架并不真正支持这一点,但根据RFC,这样做是错误的吗?

以下是我收集的一些信息:

RFC 1738(URL):

当八位字节由一个字符表示并且在编码时,URL通常具有相同的解释.但是,保留字符不是这样:编码为特定方案保留的字符可能会更改URL的语义.

RFC 2396(URI):

这些字符称为"保留",因为它们在URI组件中的使用仅限于其保留的用途.如果URI组件的数据与保留的目的冲突,则必须在形成URI之前转义冲突的数据.

(这里的转义是否意味着除了编码保留字符之外的东西?)

RFC 2616(HTTP/1.1):

除"保留"和"不安全"集合之外的字符(参见RFC 2396 [42])等同于它们的"%"HEX HEX"编码.

还有针对Rails的错误报告,他们似乎希望编码的斜杠行为不同:

是的,我期望得到不同的结果,因为他们指的是不同的资源.

它正在根目录中查找文字文件'foo/bar'.非转义版本正在查找目录foo中的文件栏.

从RFC中可以清楚地看出,原始与编码相当于未保留的字符,但保留字符的故事是什么?

url encoding http

61
推荐指数
3
解决办法
9万
查看次数

如何使用包含斜杠字符的参数定义Laravel路径

我想定义一个带有参数的路由,该参数将包含斜杠/字符,因此参数example.com/view/abc/02在哪里abc/02.

如何防止Laravel读取斜杠作为下一个路径参数的分隔符?因为我现在得到了404 not found error.

php laravel

45
推荐指数
4
解决办法
3万
查看次数

带有Spring RequestMapping路径参数的编码斜杠(%2F)提供HTTP 400

这不是重复引用的问题,因为它是特定于Spring的.无论谁添加了(事实发生3年后!)都没有费心去阅读问题或评论帖子,看看真正的答案是什么.接受的答案并不是答案,但答案的作者从未回过头来编辑它,就像我问的那样.

鉴于下面的restful方法,Spring 3.1给出了400错误,"客户端发送的请求在语法上是不正确的()".当token参数包含URL编码的斜杠(%2F)时,例如" https://somewhere.com/ws/stuff/lookup/resourceId/287559/token/R4o6lI%2FbBx43/userName/jim "没有%2F一切正常精细.第三方已经在调用此服务(当然!)因此我至少在短期内无法更改发送的内容.有关如何在服务器端解决此问题的任何想法?

这个问题在https://jira.springsource.org/browse/SPR-8662中得到了很好的描述,尽管这个问题与UriTemplate有关,我没有使用它,我可以说.

@RequestMapping("/ws/stuff/**")
@Controller
public class StuffController {
  @RequestMapping(value = "/ws/stuff/lookup/resourceId/{resourceId}/token/{token}/userName/{userName}", method = RequestMethod.GET)
   public @ResponseBody
   String provisionResource(@PathVariable("resourceId") String resourceId, @PathVariable("token") String token, @PathVariable("userName") String userName, ModelMap modelMap,
         HttpServletRequest request, HttpServletResponse response) {
      return handle(resourceId, userName, request, token, modelMap);
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:这是在Glassfish 3.1.2上,最初是Grizzly/Glassfish不接受斜线,但是

-Dcom.sun.grizzly.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

修好了.

asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true

似乎没有帮助.

rest spring glassfish glassfish-3 spring-3

33
推荐指数
7
解决办法
4万
查看次数

如果%2F是JBOSS中GET URL的一部分,则会收到HTTP 400错误

每当有一个%2F十六进制代码的URL /发布到我的JBOSS服务器时,我收到一个错误:

HTTP 400 Bad Request error message. 
Run Code Online (Sandbox Code Playgroud)

这是URL:

http://localhost:8080/application/**abc%2Fhi**?msg=hello"
Run Code Online (Sandbox Code Playgroud)

如果我%2F从URL中删除链接工作正常.

%2F必须是URL的一部分,不能是请求参数.

jboss http

25
推荐指数
1
解决办法
2万
查看次数

URL中的%2F中断并且不引用所需的.php文件

我需要将/作为变量作为URL的一部分传递.

我的结构如下:www.domain.com/listings/page-1/city-Burnaby+South/type-Townhome/bedroom-2/bathroom-2

在这种情况下,它最终归结为listing.php,除此之外的所有内容都成为我的PHP脚本使用$ _SERVER ['REQUEST_URI'] var解析的参数.

但是,当生成URL时,当其中一个变量变为"公寓/公寓"并且/通过urlencode()在PHP中变为%2F时,整个事情会窒息并且我得到"未找到"错误.

如何通过/不破坏URL?我错过了什么?我认为这些urlencode()字符(%2F,%20等)的重点是逃避这些问题.

php apache url

19
推荐指数
1
解决办法
1万
查看次数

将urlencoded URL作为参数传递给CakePHP上的控制器/操作

我在CakePHP上相当新,因为有一些基本的东西,我曾经用Zend Framework做的,我用Cake打败了.

我正在开发一个项目,我必须将命名参数传递给控制器​​/动作.设置路由并传递参数非常简单,我的问题是当参数是urlencoded网址时.

例如:http://www.cakephp.com/controller/action/http%3A%2F%2Fwww.google.com无论控制器和操作设置如何,都会抛出404,但是传递/ controller/action/http: //www.google.com以某种方式工作,唯一的问题是它将http标识为命名参数.换句话说,如果我做/controller/action?url=http://www.google.com它会工作.

我用于此的工作是将值作为base64编码的字符串传递,但它带来了一些限制.例如,如果它是API,则无法保证使用API​​的系统可以将base64编码为字符串.

无论如何,最好的解决方案仍然是将url编码的字符串传递给命名参数.问题是,为什么CakePHP不接受urlencoded字符串作为参数,为什么它会抛出404?

在此先感谢所有人.

string cakephp param urlencode

4
推荐指数
1
解决办法
4049
查看次数

Spring @RequestMapping处理特殊字符

我有一个这样的REST API:

  @RequestMapping(value = "/services/produce/{_id}", method = RequestMethod.PATCH, 
  consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
  public String patchObject(@RequestBody PatchObjectRequest obj, 
      @PathVariable("_id") String id) {
  // some code
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是可能给出的id是以下形式:

US%2FCA%2FSF%2FPlastic
Run Code Online (Sandbox Code Playgroud)

这是"US/CA/SF/Plastic"的URL编码.

我的问题是,当一个%字符放入URL时,@ RequestMapping不会将它映射到此方法,它将返回404.有没有办法接受在其中包含%字符的ID作为URL的一部分?

java rest url spring urlencode

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

url ×3

http ×2

php ×2

rest ×2

spring ×2

urlencode ×2

apache ×1

cakephp ×1

encoding ×1

glassfish ×1

glassfish-3 ×1

java ×1

jboss ×1

laravel ×1

param ×1

spring-3 ×1

string ×1