我的浏览器设置了代理服务器(Firefox 21,IE10)。奇怪的是每当有& #3 9; (请忽略空格)请求URL中,浏览器不会发送它以及之后的任何内容。
最初我认为这是代理服务器的问题,所以我编写了一个简单的套接字服务器,并尝试查看浏览器发送的内容(见下文)。当我通过代码调试时,它证明浏览器确实没有发送'以及之后的一切。以前有人见过这个吗?为什么会这样?
nFd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(nFd < 0) break;
sockaddr_in addr = {0};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(7995);
int nAddrLen = sizeof(addr);
if(0 != ::bind(nFd, (const sockaddr*)&addr, nAddrLen))
break;
if(0 != listen(nFd, 64))
break;
nClientFd = accept(nFd, (sockaddr*)&addr, &nAddrLen);
if(nClientFd < 0) break;
char buf[16384] = {0};
int nBytesRead = recv(nClientFd, buf, 16384, 0);
if(nBytesRead <= 0) break;
cout << buf << endl;
以下是我在地址栏中输入的请求(忽略&amp;#3 9中的空格;只有那里的空格才会显示在此页面上:
www.test.com/go& #3 9;加餐
以下是我通过套接字收到的请求:
获取http://www.test.com/go& HTTP / 1.1
主持人:www.test.com
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:20.0)Gecko / 20100101 Firefox / 20.0
接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受语言:en-US,en; q = 0.5
Accept-Encoding:gzip,deflate
连接:保持活力
请注意请求行。我真的无法解释这个...
答案 0 :(得分:0)
#
字符在HTTP / HTTPS网址中保留,并标记了网址fragment
组件的开头。 HTTP / HTTPS URL的这一部分永远不会发送到服务器。如果您希望将#字符和后续信息发送到服务器,则#必须URLEncoded为%23。