【问题标题】:How to customize response Error 400 Bad Request如何自定义响应错误 400 错误请求
【发布时间】:2014-09-28 05:04:08
【问题描述】:

我有一个由码头提供的网络服务。 如何过滤带有非法字符的 URL?

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

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

但是,我无法过滤某些 URL,例如“%adsasd”,它似乎是由码头处理的。

curl -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

【问题讨论】:

    标签: java web-services url jetty jetty-9


    【解决方案1】:

    Jetty 的错误响应

    HTTP/1.1 400 Bad Request
    

    表示 Jetty 确实将其检测为错误的 URL 并拒绝了它。

    至于如何自定义这个,确实很棘手,主要是因为它在处理这个特定请求时发生的时间有多早。

    这种错误 (400 Bad Request) 发生在解析原始传入 http 请求的过程中,甚至在服务器容器还没有尝试确定要与什么上下文对话之前。

    没有办法在特定的 webapp 上下文中使用自定义错误处理程序来处理这种基本的 http 错误。因为服务器还没有弄清楚要与什么上下文对话。

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

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

    【讨论】:

    • 是的,但是我可以处理错误的 URL 并使用自定义信息拒绝吗?例如:返回一个 json 字符串 {"error":"you need check your URL"} 等。
    • 我想通过我的过滤器而不是码头容器拒绝错误的 URL。但是,现在码头拒绝了错误 URL 的请求,没有发送到我的应用程序。
    • 正如答案所指出的那样,由于这从根本上来说很糟糕,所以码头无法知道将其发送到哪个上下文(即您的 webapp),它永远不会被发送到应用程序在您的服务器上,它太坏而无法处理。这是一个早期的协议错误。有效的 HTTP 客户端应根据 HTTP 响应代码而不是正文内容来处理此错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-08-19
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多