dosmlp

Results 8 comments of dosmlp

好像进了黑名单了,现在不管手动刷还是脚本刷,都会被清零

https://github.com/Momo707577045/media-source-extract/issues/102#issue-2163531501

@qicosmos 我怎么感觉这个反代有问题啊,比如下面的代码,127.0.0.1:9580是一个Everything的http服务 ``` #include #include "cinatra.hpp" using namespace cinatra; using namespace std; int main() { coro_http_server proxy_rr(4, 8091); proxy_rr.set_http_proxy_handler( "/([^]+)", {"127.0.0.1:9580"}, coro_io::load_blance_algorithm::RR, {}); proxy_rr.async_start(); while (1) { Sleep(1); } return...

调试了半天源码发现了两个问题 第一:http client中处理了chunked,也就是说body中已经不是chunked格式了,但是标头中依然存在Transfer-Encoding: chunked, 这样反向代理后,浏览器访问反代服务器,收到这种奇怪的数据导致产生错误 第二:某些http1.0协议中标头并没有content-length字段,我看源码中如果没有该字段是直接把body_len_设为了0,这样就接收不到body数据了 ![image](https://github.com/user-attachments/assets/9470f55c-ca3f-48f2-b82b-b1cb55b10c21)

1、首先说一下http1.0中content-length的问题,虽然是个古老协议,但万一有人踩坑了好知道怎么回事。 参考连接:https://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#BodyLength 查看7.2.2的描述,服务端的响应可能不存在content-length,这时候客户端需要读取到服务端关闭连接以确定body的长度 cinatra的http client对于服务端响应中不存在content-length的处理是直接认为body_len_=0,这样就读取不到body了 2、chunked问题 假如服务端有这样一个响应 ``` Content-Type: text/html Date: Fri, 22 Nov 2024 07:40:43 GMT Transfer-Encoding: chunked 800 {0x800个字节的内容} 741 {0x741个字节的内容} 0 ``` 但是cinatra的http client处理后变成了 ``` Content-Type: text/html...

这个代码应该可以说明问题,http client因为反向代理返回的数据错误一直在试图用chunked解析,然后就卡住了 ``` #include #include "cinatra.hpp" using namespace cinatra; using namespace std; int main() { cinatra::coro_http_server server(1, 9001); server.set_http_handler( "/test_chunked", [](coro_http_request &req, coro_http_response &resp) -> async_simple::coro::Lazy { resp.set_format_type(format_type::chunked); bool ok;...

如果要做一个功能完善的反代,request和response的标头都要处理,甚至body还会修改,比如增加压缩。 要实现这些,透明代理显然不行,还是改进现有反代吧