Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当HTTP网页的类型为html/text时,如何判断该网页何时发生了更改?_C#_Http_Http Headers_Last Modified - Fatal编程技术网

C# 当HTTP网页的类型为html/text时,如何判断该网页何时发生了更改?

C# 当HTTP网页的类型为html/text时,如何判断该网页何时发生了更改?,c#,http,http-headers,last-modified,C#,Http,Http Headers,Last Modified,我正试图找出一种算法来判断网络上的非二进制文件是否发生了变化。我本来打算: LastModified datetime from header,如果不存在,则回退到 从标题开始的ContentLength 然而,我发现,对于许多网站来说,HTML页面的LastModified实际上只是使用当前日期时间,因此这种方法不起作用(即,会导致页面总是在变化),我认为 那么什么是好的算法呢?怎么样 IF response.ContentType.StartsWith("text/html") <

我正试图找出一种算法来判断网络上的非二进制文件是否发生了变化。我本来打算:

  • LastModified datetime from header,如果不存在,则回退到
  • 从标题开始的ContentLength
然而,我发现,对于许多网站来说,HTML页面的LastModified实际上只是使用当前日期时间,因此这种方法不起作用(即,会导致页面总是在变化),我认为

那么什么是好的算法呢?怎么样

IF response.ContentType.StartsWith("text/html")  <== or should this just be "text"
  THEN: 
    Check based on comparing text content before & after
  ELSE: 
    IF LastModified dates are OK 
      Compare based on LastModified dates
    ELSE 
      Compare based on ContentLength

IF response.ContentType.StartsWith(“text/html”)发送请求时,指定是否自http头修改。然后由服务器使用新的html或304进行回复-内容未更改。

ETag响应头是一个很好的指示器(如果存在)。将请求与If None匹配(或仅使用HEAD请求)一起使用以查看。

这适用于文本(如网站首页)和二进制文件吗?大多数网站/web服务器通常也遵循这一点吗?是的,大多数网站使用header,因为在内容未更改的情况下,典型的浏览器使用缓存中的信息。这大大降低了服务器负载。