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

前言

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
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 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年前 评论

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