开发内网穿透时遇到了个问题

前言

127.0.0.1:9503(为了测试使用的本地服务) 穿透到本地的 127.0.0.1:10080

问题:

  • 请求登录接口返回了cookie,重定向首页请求时,没有带着cookie。

问题详情

  • 1登陆返回的cookie

开发内网穿透时遇到了个问题

  • 2请求首页时没有带着cookie

开发内网穿透时遇到了个问题

疑惑

为什么浏览器没有带着返回的cookie请求首页,取到的还是请求登录接口前的cookie

Make everything simple instead of making difficulties as simple as possible
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

这个不一定,如果你http协议没解析得好,也会出现同样的错误。我之前开发过一个内网穿透 ezant ,遇到过类似的问题。gitee eznat,欢迎start~

2年前 评论
jcc123 (楼主) 2年前
jcc123

打印出 源kookie,发现使用第三方的http客户端会对302和HttpOnly 做过滤,适配下cookie应该就行了

HTTP/1.1 302 Found
Location: /
Set-Cookie: gogs_awesome=wpjscc; Path=/; Max-Age=604800; HttpOnly
Set-Cookie: gogs_incredible=4405ba47f2a3d526a60d380d5ef0bb03f274345fdc990d3a9b7196f51655bb5529be; Path=/; Max-Age=604800; HttpOnly
Set-Cookie: _csrf=; Path=/; Max-Age=0
Set-Cookie: redirect_to=; Path=/; Max-Age=0
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Date: Mon, 30 Aug 2021 08:35:32 GMT
Content-Length: 0
2年前 评论
徵羽宫 2年前
jcc123 (作者) (楼主) 2年前
jcc123

@九九一十八 请教个问题

http 请求报文通过 tcp 发送给源服务器,发生了很奇怪的事情。

返回的body里会带着 4子节长度个16进制前缀。

file

2年前 评论
guoliang1994 2年前
jcc123 (作者) (楼主) 2年前

@jcc123 这是大概的接收数据包逻辑

            preg_match("/Content-Length:\s*\d*/i", $connection->data, $paramsLength);
            $headerEnd = \strpos($connection->data, "\r\n\r\n");
            $headerLength = strlen(substr($connection->data, 0, $headerEnd));
            if (!empty($paramsLength)) {
                $connection->totalContentLength = (int)str_replace("Content-Length: ", '', $paramsLength[0]);
                echo "总的数据包长度:{ $connection->totalContentLength }";
                $connection->receveContentLength += strlen($data);
                echo "接收到的数据包长度: " . ($connection->receveContentLength - $headerLength - 4);
                if ($connection->totalContentLength > $connection->receveContentLength) {
                    echo "\r\n数据包不完整,继续接受数据";
                    return;
                }
            }
            $data = $connection->data;
            preg_match("/Host:\s.*/i", serialize($connection->data), $match);
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!