charles设置反向代理,http请求访问https服务报错解决:提问帖

前几天在学习charles代理工具,反向代理功能使用时,碰到的一个问题,来跟大家讨论讨论。

问题介绍:

charles设置社区地址www.ceshiren.com反向代理到本地端口,访问报错。报错截图如下:

我的踩坑经历:
首先确定是否是charles反向代理参数设置错误问题:

未发现错误。
然后考虑是否是证书问题,发现已安装charles证书并设置信任

然后群里天马大佬给了思路,我才考虑到400是请求参数错误
于是开始尝试请求方式:

最后发现代理百度和社区的情况是不同的。
设置百度和社区的代理本地端口分别为8081和8082:
然后谷歌浏览器访问:
local:8081 失败
local:8082 失败
127.0.0.1:8081 成功
127.0.0.1:8082 失败
https://localhost:8081 成功
https://localhost:8082 成功
https://127.0.0.1:8081 成功
https://127.0.0.1:8082 成功

接下来思路就是考虑到是不是不同服务端nginx处理http和https请求的区别问题
找到一篇解答了疑惑的帖子
https://www.shuzhiduo.com/A/LPdoebRjJ3/

总结:
这种场景多出现在服务端Nginx既处理HTTP请求又处理HTTPS请求的情况。
此时设置反向代理发送http请求访问代理的网址会出现400报错,请求报文错误。

解决办法:
访问时使用https访问
服务端可以将nginx配置文件内的“ssl on; ” 注释掉或者修改成 “ssl off;”

疑问:

这块还是没有理解http请求https请求会报错的具体原因是什么,希望大佬们帮忙详细解答下原因。

附上常见http状态码:

  • 200 - 服务器成功返回网页
  • 201 - 服务器成功创建了新的资源
  • 400 - 请求报文/参数错误
  • 404 - 请求的网页不存在
  • 502 - 错误网关,无效响应
  • 503 - 服务不可用