Dexador(usocket,fast-http)报"INVALID-VERSION"错误,本地请求失败求助
解决Dexador本地请求报错"INVALID-VERSION: invalid HTTP version"的问题
问题背景
原本正常的Dexador HTTP GET请求现在抛出INVALID-VERSION: invalid HTTP version错误,核心调用代码如下:
(dex:get url)
调用栈信息:
0: (FAST-HTTP.PARSER:PARSE-RESPONSE #<unavailable argument> #<unavailable argument> #<unavailable argument> :START #<unavailable argument> :END #<unavailable argument> :HEAD-REQUEST #<unavailable argumen.. 1: ((LAMBDA (FAST-HTTP::DATA &KEY :START :END) :IN FAST-HTTP:MAKE-PARSER) #(123 34 100 97 116 97 ...) :START #<unavailable argument> :END #<unavailable argument>) 2: (DEXADOR.BACKEND.USOCKET::READ-RESPONSE #<SB-SYS:FD-STREAM for "socket 127.0.0.1:47894, peer: 127.0.0.1:8000" {10068825A3}> T NIL T) 3: (DEXADOR.BACKEND.USOCKET:REQUEST #<unavailable argument> :METHOD :GET))
关键现象:
- 目标JSON接口用curl或drakma可正常访问
- Dexador访问外部网络接口无异常,仅本地请求触发错误
- 排查发现fast-http的
parse-response方法中,parse-http-version被调用两次:第一次参数为major=1、minor=1,第二次为NIL,进而触发版本无效错误
排查与解决思路
1. 校验本地服务的响应格式
curl和drakma的HTTP解析容错性可能比fast-http更强,本地服务可能返回了不符合标准HTTP协议的响应。比如:
- 响应头结束后存在多余的空白行
- 响应内容开头有额外的无效字符
- 响应被分割成了异常的数据包结构
可以通过抓包工具(如tcpdump)对比本地请求与外部请求的响应字节流,重点检查响应起始部分的格式是否合规。
2. 显式指定HTTP版本
尝试在Dexador请求中强制指定HTTP版本,避免解析器自动识别时出现异常:
(dex:get url :version :1.1)
3. 排查fast-http版本兼容性
当前使用的fast-http版本可能存在本地请求解析的bug,尝试升级或降级fast-http包,验证是否能解决重复调用parse-http-version的问题。
4. 检查本地网络干扰
本地代理、防火墙或调试工具可能篡改了响应数据,导致解析器异常。可以暂时关闭这类工具,重新发起请求测试。
内容的提问来源于stack exchange,提问作者Ehvince
相关产品推荐
相关产品推荐

