【问题标题】:Get absolute-form request target of HTTP request using WAI使用 WAI 获取 HTTP 请求的绝对形式请求目标
【发布时间】:2020-01-16 11:55:58
【问题描述】:

Request 类型为请求方法和请求版本提供访问器,但不为两者之间的位提供访问器。

如果我有以下要求:

GET http://www.example.org/index.html HTTP/1.1

我想要介于两者之间的http://www.example.org/index.html

RFC7230 Section 5.3.2 在向代理发出请求时允许这样做。 5.4 节说如果请求在absolute-form 中,则Host 标头应该被具有URI 中主机的代理覆盖。这对我来说似乎已经足够好了,我不知道如果客户端行为不正确并发送与 absolute-form URI 不同的 Host 标头,WAI 是否会正确处理此问题。

或者,如果这是不可能的:我想问一下 Haskell 中是否有比 WAI 更底层的 HTTP 库?

【问题讨论】:

    标签: haskell http-proxy haskell-wai


    【解决方案1】:

    rawPathInfo 访问器方法将提供此功能。详情请见https://hackage.haskell.org/package/wai-3.2.2.1/docs/Network-Wai.html#v:rawPathInfo

    如果您也想要查询字符串,可以通过 rawQueryString 访问器获得。

    至于主机,HTTP 请求通常看起来不像您的示例(HTTP/1.1 客户端只有在连接到代理而不是连接到目标 Web 服务器时才会看起来像这样)。相反,它们通常看起来像这样:

    GET /index.html HTTP/1.1
    Host: www.example.org
    

    如果你也想要http://www.example.org,那么你必须自己根据主机和协议信息重建它。

    【讨论】:

    • rawPathInfo 只返回 URI 的路径部分。不是查询,也不是路径之前的部分
    • 我更新了我的问题。我最初的问题不是很清楚。
    • @Philippe 所以你是说客户端正在发送一个绝对 URI,而 rawPathInfo 并没有显示它?
    • 是的,我正在使用带有 -x 标志的 curl。
    • 如果是这样就很奇怪了。路径只是 URI 的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多