是这样的服务器的布置是Apache,在服务器上有个更新包(1.cab)用于下载。
比如日期是19 Nov 2012 ;//这个是正常的日期。
正常下载后取回的响应头是这样的:
HTTP/1.1 206 Partial Content
Date: Sun, 25 Nov 2012 03:29:27 GMT
Server: Apache/2.2.4 (Win32) //这个是
Last-Modified: Mon, 19 Nov 2012 06:19:38 GMT//正常的日期
ETag: "c1f60-1a9a11-1a2315e8"
Accept-Ranges: bytes
Content-Length: 1595921
Content-Range: bytes 147456-1743376/1743377
Content-Type: text/plain但是有个电脑下载取回的回应头是这样的,这直接导致他下载的内容是一个月以前的更新包,但是那个服务器上根本就没有这个更新包。
HTTP/1.1 206 Partial Content
Server: nginx //这个也不一样好像是通过代理什么的,我也不是很清楚,我觉得问题很可能就跟这个有关 
Date: Wed, 21 Nov 2012 10:11:10 GMT
Content-Type: application/octet-stream
Content-Length: 20736
Last-Modified: Thu, 11 Oct 2012 00:42:48 GMT//这个想不通啊,这个是很久以前的更新 包,根本就不存在。除非在nginx上面。那我该怎么办??
Connection: keep-alive
Content-Range: bytes 1772544-1793279/1793280

解决方案 »

  1.   

    图可以去那里看http://tieba.baidu.com/p/2008122156
      

  2.   

    大概的代码是这样的//一下部分是自定义实现部分
    //下载指定的html文件
    //参数:const char *url 需要下载文件的url
    // char *sFileBuffer 接受返回的数据(数据的内存由调用者生成和释放)
    char * CHTTPDownFile::GetHttpFile(const char *url, int &nBufLength, const int nBufferLength) 
    {
    char *error=NULL;
    error=new char[MAX_PATH];
    char * sFileBuffer = NULL;
    sFileBuffer = new char[DEFUALT_HTTP_FILE_BUFFER_LEN]; //默认分配10*512kb
    memset(sFileBuffer, 0, DEFUALT_HTTP_FILE_BUFFER_LEN);
    int nCurUseBufferLength=nBufferLength;
    if(url == NULL || sFileBuffer == NULL || nBufferLength <= 0)
    return error;
    int iRecSum = 0; //一共下载了多少
    try
    {
    DWORD dwServiceType = AFX_INET_SERVICE_HTTP; 
    CString szServer, szObject; 
    INTERNET_PORT nPort = 0; 
    if(!AfxParseURL(url, dwServiceType, szServer, szObject, nPort))
    return error;
    CInternetSession mysession; 
    CHttpConnection* pConnection=NULL; 
    CHttpFile* pHttpFile=NULL; pConnection = mysession.GetHttpConnection(szServer,
    INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_DONT_CACHE, 
    nPort, NULL, NULL); DWORD dwFlag= INTERNET_FLAG_EXISTING_CONNECT |
    INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_COOKIES;
    pHttpFile = pConnection->OpenRequest("GET", szObject, 
    NULL, 0, NULL, NULL
    ,dwFlag);
    char szTempFile[MAX_PATH]={0};
    strcpy(szTempFile,m_sCurrentLocalPath);
    strcat(szTempFile,".td");
    long dwLength=0;
    FILE *fp=NULL;
    fp=fopen(szTempFile,"rb");
    char StartPos[20]="0";
    if(fp!=NULL)
    {
    fseek(fp,0,SEEK_END); //定位到文件末 
    dwLength = ftell(fp); //文件长度
    itoa(dwLength,StartPos,10);
    fseek(fp,0,SEEK_SET); //定位到文件tou
    fread(sFileBuffer,dwLength,1,fp);
    fclose(fp);
    fp=NULL;
    }
    iRecSum=dwLength;
    CString sTempHeader;
    sTempHeader.Format("GET %s HTTP/1.1\r\n",url);
    pHttpFile->AddRequestHeaders(sTempHeader);
    pHttpFile->AddRequestHeaders("Accept: */*\r\n");
    pHttpFile->AddRequestHeaders("Pragma: no-cache\r\n");
    pHttpFile->AddRequestHeaders("Cache-Control: no-cache\r\n");
    CString strFilePath,strHttpAddr(url);
    int pos=strHttpAddr.Find( "/", 9 );
    strFilePath = strHttpAddr.Mid(0,pos);
    sTempHeader.Format("Referer: %s\r\n",strFilePath);
    pHttpFile->AddRequestHeaders(sTempHeader);
    pHttpFile->AddRequestHeaders("User-Agent:Mozilla/4.0(compatible; MSIE 5.0; Windows NT;)\r\n");
    sTempHeader.Format("Range:bytes=%s-\r\n\r\n",StartPos);
    pHttpFile->AddRequestHeaders(sTempHeader);
    if(pHttpFile->SendRequest(NULL))
    {
    DWORD dwHttpStatus;
    if (!pHttpFile->QueryInfoStatusCode(dwHttpStatus))
    dwHttpStatus = 200;
    if(dwHttpStatus >= 400)
    {
    m_nDownloadStatus = FILE_DOWNLOAD_NO_FILE;
    return error;
    }
    CString strhttpFileLength;
    pHttpFile->QueryInfo (HTTP_QUERY_CONTENT_LENGTH, strhttpFileLength);
    m_nTotal=atoi(strhttpFileLength)+dwLength;
    int nRead = 1024;
    int iMaxRecvLen = 1024;
    char pBuffer[1024] = {0};
    while (nRead == 1024 && !m_bStopHtmlDownd)
    {
    memset(pBuffer, 0, 1024);
    nRead = pHttpFile->Read(pBuffer, iMaxRecvLen);
    memcpy(sFileBuffer+iRecSum, pBuffer, nRead);
    WriteToTempFile(szTempFile,(byte *)pBuffer,nRead);
    iRecSum += nRead;
    m_hasDown=iRecSum;
    }
    nBufLength=iRecSum;
    if(pHttpFile!=NULL)
    pHttpFile->Close();
    if(pConnection!=NULL)
    pConnection->Close();
    mysession.Close();
    if(m_bStopHtmlDownd)
    {
    m_nDownloadStatus = FILE_DOWNLOAD_USER_STOP; //用户主动中断下载
    nBufLength=-1;
    return error;

    }
    return sFileBuffer;
    }