2014-09-28 137 views
1

我有一个由jetty提供的web服务。 如何过滤非法字符的URL?如何自定义响应错误400错误请求

当请求URL具有非法字符时,我无法控制某些返回信息。

实际上,我想在URL无效时返回一些特定的信息。例如: :我在我的应用程序中添加了一个过滤器来验证URL,如果非法,那么我将返回定义的信息。

但是,我不能过滤一些URL,如“%adsasd”,它似乎是由码头处理。

卷曲-v -X PUT -u用户:密码 'http://myip.com:8080/%adsasd'

* Trying 127.0.0.1... 
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0) 
* Server auth using Basic with user 'user' 
> PUT /%adsasd HTTP/1.1 
> Authorization: Basic YWRtaW46MTIzNDU2 
> User-Agent: curl/7.35.0 
> Accept: */* 
> Host:127.0.0.1:8080 
> < HTTP/1.1 400 Bad Request 
    < Content-Length: 0 
* Server Jetty(9.0.6.v20130930) is not blacklisted 
    < Server: Jetty(9.0.6.v20130930) < 
* Connection #0 to host 127.0.0.1 left intact 

回答

0

从码头错误响应

HTTP/1.1 400 Bad Request 

表示码头并检测为坏网址并拒绝。

至于如何定制这个,那真是棘手,主要是由于如何在它在发生此特定请求的处理早。

这种错误(400 Bad Request)原始的解析过程中发生传入的http请求,在服务器容器甚至试图找出要与之通话的上下文之前。

在特定的webapp上下文中没有办法定制错误处理程序来处理这种基本的http错误。由于服务器尚未弄清甚至可以与之交谈的环境。

服务器端(即使在全局级别)也无法自定义此错误消息。

如果你想要这样的功能,please file a feature request

+0

是的,但我可以处理不良的网址和拒绝与自定义信息?例如:返回一个json字符串,{“错误”:“你需要检查你的URL”}等 – CHmoonKa 2014-09-29 06:17:40

+0

我想拒绝我的网址过滤器不是码头的容器。但是,现在具有被码头拒绝的错误URL的请求,没有发送到我的应用程序。 – CHmoonKa 2014-09-29 06:50:18

+0

正如答案所指出的那样,由于这是非常糟糕的,因此码头无法知道发送到哪个上下文(即web应用),它永远不会发送到服务器上的应用程序,它太破碎了待处理。这是一个早期的协议错误。有效的HTTP客户端应该基于HTTP响应代码处理此错误,而不是正文内容。 – 2014-10-01 18:04:52