首页 > 试题广场 >

HTTP协议中,表示请求的内容自上次请求后没有改变,服务端返

[单选题]
HTTP协议中,表示请求的内容自上次请求后没有改变,服务端返回的状态码是?
  • 301
  • 401
  • 304
  • 404
  • 301 Move Permanently 资源已经被永久改变了位置
  • 304 Not Modified 自上次未修改
  • 401 Unauthorized 未授权
  • 404 Not Found error
发表于 2017-03-15 21:07:23 回复(0)
当浏览器第一次加载资源的时候,返回一般为200,意思是成功获取资源,并会在浏览器的缓存中记录下max-age,第二次访问的时候:
如果只是用浏览器打开,那么浏览器会去判断这个资源在缓存里有没有,如果有的话,会去判断max-age,看看过期没有,如果没有过期,则直接读缓存,根本不会和服务器进行交互,换句话说,断网都能打开,就和本地跑一样!如果已经过期了,那就去服务器请求,等待服务器响应,这是很费时间的,服务器如果发现资源没有改变过,那么就会返回304,告诉浏览器,我没变过,你去读缓存吧,于是浏览器也不用从服务器拉数据了,然而,等待服务器响应也是一个很要命的问题,在网速发达的今天,等一个响应,有时比下载还慢。
如果是用浏览器刷新的,那么浏览器不会去判断max-age了,直接去服务器拿,如果服务器判断资源没变过,则还是会返回304,和上面是一样的,所以刷新一下,其实很可怕,等于把所有的资源都要去服务器请求一边,问问服务器我过期了没有。
综上,尽量减少网页的资源数量!尽量合并JS CSS 图片!响应速度将会猛增!
发表于 2018-02-07 10:32:31 回复(1)
304 Not Modified如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。该响应必须包含以下的头信息:
  • Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么***服务器以及客户端可以自行将Date字段添加到接收到的响应头中去(正如RFC 2068中规定的一样),缓存机制将会正常工作。
  • ETag和/或Content-Location,假如同样的请求本应返回200响应
  • Expires, Cache-Control,和/或Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。
假如本响应请求使用了强缓存验证,那么本次响应不应该包含其他实体头;否则(例如,某个带条件的GET请求使用了弱缓存验证),本次响应禁止包含其他实体头;这避免了缓存了的实体内容和更新了的实体头信息之间的不一致。假如某个304响应指明了当前某个实体没有缓存,那么缓存系统必须忽视这个响应,并且重复发送不包含限制条件的请求。
假如接收到一个要求更新某个缓存条目的304响应,那么缓存系统必须更新整个条目以反映所有在响应中被更新的字段的值。

详见Wiki:https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
发表于 2016-12-27 00:25:05 回复(0)
首先会看浏览器缓存过期没,没有就返回状态码200。如果过期了,就发送一个请求到服务器,看内容有没有更新,如果没有更新,那么即使浏览器缓存设置的时间过期了,那么也可以继续用,返回状态码304。
发表于 2018-06-24 00:37:06 回复(0)
  • 301 Move Permanently 资源已经被永久改变了位置
  • 304 Not Modified 自上次未修改
  • 401 Unauthorized 未授权
  • 404 Not Found error
发表于 2017-04-06 10:15:59 回复(0)