ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HTTP备忘录

HTTP备忘录 目录HTTP请求头到底长什么样复习如何“模拟过长”触发 -1Cookie为什么需要它解决无状态问题Cookie的几个关键“保质期”与“安全锁”必知HTTP请求头到底长什么样复习HTTP请求头是纯文本由三部分组成每一行都以\r\n结尾头部结束的标志就是额外的\r\n。标准结构示例GET /index.html?page1 HTTP/1.1\r\n // 请求行 (Method URI Version) Host: www.example.com\r\n // 必选头 User-Agent: curl/7.68.0\r\n // 可选头 Accept: */*\r\n // 可选头 Content-Length: 15\r\n // 如果有Body必须有这个 \r\n // 空行标志着“头”结束 Body内容... (例如 usernameadmin) // 请求体此代码未处理关键点复习请求行必须包含空格分隔的三个部分方法、路径、HTTP版本。头部字段格式为Key: Value大小写不敏感Host除外。终止标志只有遇到连续的\r\n\r\n才算头完整。注意代码中用memcmp(buf i - 3, \r\n\r\n, 4)当i3时检查buf[0]~buf[3]这是正确的偏移算法。如何“模拟过长”触发-1假设你的代码中MAX_REQUEST_SIZE 1024。要触发return -1核心条件是在长度达到MAX_REQUEST_SIZE之前缓冲区里没有出现\r\n\r\n。模拟方法两种场景场景A恶意/畸形请求发一个超长单行故意不加回车换行。GET / HTTP/1.1\r\nX-Header: AAAAAAAAA...重复填充到1024个字节但不发最后的\r\n\r\n因为没有结束标志循环扫描完len1024后header_end仍为NULL直接返回-1。场景B正常但巨大的合法请求发一个真正的超大请求头把\r\n\r\n放在1024 字节之后。GET / HTTP/1.1\r\n X-Custom-1: value\r\n ...重复填充各种Cookie或自定义头总字节数达到1023\r\n X-Custom-Last: value注意这里还没有结束标志此时长度正好 1024没有结束符返回-1。即使你紧接着再发一个\r\n包过来这个函数已经返回-1并关闭连接了。CookieCookie是服务器下发给浏览器、浏览器自动保存并在后续请求中主动带回去的一小段键值对文本例如user_id123或sessionabc。为什么需要它解决无状态问题HTTP协议本身是“脸盲”的——你连续发两次请求比如先登录再下单服务器默认不知道这两次请求是同一个人操作的。Cookie就像一张临时会员卡办卡下发你第一次登录成功服务器在响应头里写Set-Cookie: session_idxyz浏览器把这张“卡”存起来。刷卡携带下一次你点餐发请求时浏览器自动把这张卡Cookie塞进请求头里带给服务器。认人识别服务器看到Cookie: session_idxyz就知道是刚才那个会员直接处理你的下单请求。Cookie的几个关键“保质期”与“安全锁”必知会话级Session Cookie浏览器关闭即删除不设Expires。常用于登录态比如银行网银。持久级Persistent Cookie设定Max-Age或Expires存在硬盘上下次开机还能用如“记住我”功能。安全限制HttpOnly禁止JavaScript读取防XSS偷窃登录Cookie必须加这个。Secure只允许通过HTTPS加密传输。SameSite防跨站请求伪造CSRF攻击。
返回列表