在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不是一个东西么
费解
我知道了 \r\n\r\n长度是4
模拟的\r\n\r\n的长度是8
workerman中如果有body体的话,最后也是+4
两个不是一个东西
不同的工具发送“特殊字符”时是有区别的:
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个字节的回车符加换行符