记 GET 请求的错误

记 GET 请求的错误

GET 请求一直以来都是把参数放在 url 的. 但是今天发现不行了, 放在 url 会出以下错误:

get : http://192.168.xxx.xxx/xxx
options:  {
  host: '192.168.xxx.xxx',
  port: '80',
  path: '/xxx',
  method: 'get',
  headers: { 'Content-Type': 'application/json;charset=utf-8' }
}

Error: socket hang up
    at connResetException (node:internal/errors:691:14)
    at Socket.socketOnEnd (node:_http_client:466:23)
    at Socket.emit (node:events:538:35)
    at endReadableNT (node:internal/streams/readable:1345:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'ECONNRESET'
}

试了一下, 浏览器, postman, 或者经过 nginx 代理都是可以正常获取结果的.

发请求的程序, 如果采用类似 post 一样, 把参数放在 body 也是可以正常获取结果的.

为什么会这样? 难道现在服务端现在要求把 GET 请求的参数放在 body? 一些工具做了兼容? 实际上 url 中的参数在发送的时候会放在 body?

不能委曲求全, 还是要把参数放在 url中. 后来发现问题所在了. 因为客户端是 Node.js 写的, 习惯性的加上默认值:

body = body || {};

这样, body 就不是空的, 是 “{}” 就不行了. 这就是真正的原因. 默认 GET 又是不传 Content-Length 的.

如果不想改变这样的规矩(项目中). 那就要传一个正确的 ‘Content-Length’:

headers: {
  ...
  'Content-Length': 2
}

这样问题就解决了.

通常如果遇到请求发送的问题, 而检查后发现基本没有什么问题, 可以从以下几个方面来排查:

  • Content-Length, 如果服务端是 C, 那就一定要传, 因为不传, 遇到结束符号, 就认为结束了, 可能获取不到全部的参数
  • url 中是否有非法字符, 要不要 decodeURIComponent
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值