파일을 다운로드 할 웹 서비스가 있습니다. 들어오는 요청이있을 때마다, 다운로드하도록 요청 된 파일의 체크섬과 타임 스탬프와 서버의 파일을 확인합니다. 동일한 경우에는 다시 다운로드하지 않아도됩니다.HTTP 요청 헤더의 체크섬 포함
서버 측의 코드는 다음과 같습니다
클라이언트 측에string checksum; //calculate this using methods in System.Security.Cryptography
string timestamp = File.GetLastAccessTimeUtc(filename).ToString();
string incCheckSum = WebOperationContext.Current.IncomingRequest.Header["If-None-Match"];
string incTimestamp = WebOperationContext.Current.IncomingRequest.Header["If-Modified-Since"];
if(checksum == incCheckSum && timestamp == incTimeStamp)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotModified;
return null;
}
WebOperationContext.Current.OutgoingResponse.Headers["Last-Modified"] = timestamp;
WebOperationContext.Current.OutgoingResponse.Headers["ETag"] = checksum;
return FileStream("Filename",FileMode.Open, FileAccess.Read,FileShare.Read);
:
이HttpWebRequest request = (HttpWebRequest)WebRequest.create("http://somewebsite.com");
request.Header["If-None-Match"] = //get checksum file on the disk
request.Header["If-Modified-Since"] = "Last Modified Time" // I get an exception here:
예외는 말한다는
"헤더는 적절한를 사용하여 수정해야합니다 속성 "
은 그 때 나는
request.IfModifiedSince = //Last Access UTC time of the file
지금,이 변화는 문제를 야기 할. 요청이 서버에 도착할 때마다 마지막 액세스 시간은 항상 다른 형식이며 일치하지 않습니다. 따라서 파일의 마지막 수정 시간이 2010 년 8 월 13 일 5:27:12 PM 일 경우 서버 측에서 [ "If-Modified-Since"] 값이 "Fri, 13 Aug 2010 17:27:12"이됩니다. GMT "
어떻게 해결할 수 있습니까?
내가 피들러를 사용하고 다음 "요청 헤더"를 추가
If-Modified-Since= last access time
If-None-Match= checksum
이 잘 작동합니다.
나는 클라이언트 측의 변경 사항을 완전히 이해하지 못했습니다. request.IfModifiedSince.ToUniversalTime(). ToString ("yyyy-MM-dd HH : mm : ss") = File .GetLastAccessUtc (filename) – Adam
서버와 클라이언트에 관해 완전히 이해하기 위해 질문을 다시 읽어야했지만 지금 내 대답이 해결 된 것 같습니다. 이제 서버는 파일 날짜와 헤더 날짜를 동일한 형식으로 요청과 비교합니다. –