'之后的所有内容都不是由浏览器发送的

时间:2013-06-18 15:09:33

标签: http browser proxy

我的浏览器设置了代理服务器(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
连接:保持活力

请注意请求行。我真的无法解释这个...

1 个答案:

答案 0 :(得分:0)

#字符在HTTP / HTTPS网址中保留,并标记了网址fragment组件的开头。 HTTP / HTTPS URL的这一部分永远不会发送到服务器。如果您希望将#字符和后续信息发送到服务器,则#必须URLEncoded为%23。