http状态码&&缓存

em…其实这算是一个很基础的东西,但是越来越发现,用得还是挺多的。

2XX

  • 2XX:一般表示的都是成功响应,并返回请求内容
  • 200:在浏览器第一次请求某个url时,如果成功,服务器端返回的状态是200,返回内容是你所请求的资源,同时有一个Last-modified的属性标记此文件在服务器端最后被修改的时间;
  • 200:在浏览器第二次或者以后请求第一次的url的时成功返回200(From Cache),但是此时没有跟server做交互,取得本地的缓存。

3XX

  • 3XX:一般表示重定向,需要进一步的操作。
  • 301:表示永久性转移。
  • 302:暂时的重定向,eg:在查询字符串来实现浏览器端和服务器端数据的对应时,如果服务器端发现查询字符串不带session_id参数,就会将用户跳转到一个带有id参数的地址上,这个时候会返回302和Location报头,重新发起新的请求。
  • 304:客户端在第二次请求之前请求过的一个url时,浏览器会先向服务器传送if-modified-since报头,询问第一次啊返回的时间之后,此文件是否被修改过,此时间会和服务器端的时间做对比,如果没有发生变化,就直接返回304 not Modified状态码,之后停止。减少数据传送量,节省带宽。

4XX

  • 4XX:表示客户端发送的请求有错误,比如语法错误或者请求无法实现(没有发现文件,查询不到url等。)
  • 403:Forbidden拒绝访问,表示资源不可用。服务器理解客户的请求,但是拒绝处理它。通常由于服务器上的文件或者目录权限所致的访问错误。
  • 404:表示网页程序没有相关结果后返回的一种状态(Not Found)。

5XX

  • 5XX:表示服务器处理时发生了错误,未能实现合法请求。
  • 500:内部服务器错误说明,IIS服务器无法解析ASP代码,如果访问静态空间不成功,则说明解析还没生效。如果访问静态页面成功,非静态空间不成功,可以检查是否改变过计算机名称,站点所在的目录是否自定义了安全属性,安装了域控制器是否调整了域策略。(我也没碰到过,但是有听说。)
  • 503:表示服务器出错的一种返回状态。

注意:关于缓存

  • 上面有提到Last-Modified,但他也不是万能的

1.文件的时间戳改动但内容不一定改动。
2.时间戳只能精确到秒级别,更新频繁的内容将无法生效。

  • 为此,在Http1.1加入了Etag来标记。

1.Etag由服务器端生成,服务器端可以决定它的生成规则。根据文件生成散列值,在条件请求将不会受到时间戳的改动造成带宽浪费。
2.虽然解决了时间戳的问题,但是他依然会发起一个http请求,使得客户端花一定的时间来等待响应。如何不用请求,让浏览器知晓能否使用本地版本?也就是服务器端在响应内容时,让浏览器明确的将内容缓存起来。

  • Expires:在http1.0中引入,在服务器端设置expires告知浏览器要缓存文件内容。

1.它是一个GMT格式的时间字符串,浏览器在接到这个过期值后,只要本地还存在这个缓存文件,在到期之前,他都不会发起请求。
2.依旧不能满足,服务器端和客户端之间的时间不一致问题。

  • Cache-Control:比Expires形式更丰富。

1.可以设置max-age的值,能够避免浏览器端与服务器端时间不同步带来的不一致问题,用倒计时的方式计算过期时间。它还能设置public,private,no-cache等更精确的控制缓存选项。
2.max-age优先级比Expires更高。

  • 清除缓存

1.我们缓存了那么多,如果服务器端更新,我们,无法通知客户端更新。这就使得我们在使用缓存时为其设定版本号,浏览器是根据url进行缓存的,内容一旦更新,就让浏览器发起新的url请求,使得新内容能够被客户端更新。
2.两种方式,(1)根据版本号(但是有可能版本号改变,内容没有改变);(2)路径中跟随该文件内容设定hash值(效率更高,精确度更高。)

猜你喜欢

转载自blog.csdn.net/qq_39083004/article/details/79865755