关于判断一个请求的head头是否发送完毕\r\n\r\n的问题

zhuxiaoyu

在workerman中,监听一个http地址,源码Protocols/Http.php中有判断请求的headr头是否发送完毕的方法
 

[attach]1462[/attach]
 
但是如果我指定一个head头的值为\r\n\r\n,然后却判断不出来,还是在head头发送完毕的\r\n\r\n中将strpos($recv_buffer, "\r\n\r\n")判断成了true
 
nginx和socket模拟head头的值为\r\n\r\n都不行
 

[attach]1463[/attach]
 
 
请求方法

[attach]1464[/attach]
 
 
 
workerman中的模拟方式类似,只不过将fread函数的大小调成了5,
 
这个AA的head头值的\r\n\r\n难道和head头结束标志\r\n\r\n不是一个东西么
 
 
费解

5286 2 0
2个回答

zhuxiaoyu

我知道了  \r\n\r\n长度是4
 
模拟的\r\n\r\n的长度是8
 
workerman中如果有body体的话,最后也是+4
 
两个不是一个东西

  • 暂无评论
blogdaren

不同的工具发送“特殊字符”时是有区别的:
1、对于 curl -H  "AA:\r\n\r\n", curl并不能识别 \r\n\r\n为真正的4个字节的回车符加换行符,换句话只能识别为8个字节的普通字符。
2、如果想用curl 发送回车或换行字符,可以使用: curl -H $'AA:\r\n\r\n'
3、对于PHP模拟socket发送,fwrite("\r\n\r\n") 发送的就是4个字节的回车符加换行符

  • 暂无评论
年代过于久远,无法发表回答
🔝