HTTP状态码被分为了五大类:
100~199:信息提示 原因短语:Continue
含义:说明收到了请求的初始部分,请客户端继续,发送了这个状态码之后,
服务端在收到请求之后必须进行响应。客户端需要发送一个携带了值为100
Continue的Expect请求首部,服务端收到后,将回送一个状态码为100的响应,
并期待客户端发送请求实体到服务端处理。
200~299:成功 原因短语:OK
含义:请求没问题,实体的主体部分包含了所请求的资源
300~399:重定向 原因短语:Multiple Choices
含义:客户端请求一个实际指向多个资源的URL时会返回这个状态码
400~499:客户端错误 原因短语:Bad Request
含义:告知客户端它发送了一个错误的请求
500~599:服务器错误 原因短语:Internal Server Error
含义:服务器出错
http 304(和重定向没有关系)
该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,
直接返回304(服务器端资源未改变,可以直接使用客户端未过期的缓存)。
304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3xx类别中,但是和重定向没有关系。
ETag和If-None-Match
ETag是上一次加载资源时,服务器返回的response header,是对该资源的一种唯一标识,只要资源有变化,ETag就会重新生成。
浏览器在下一次加载资源向服务器发送请求时,会将上一次返回的ETag值放到request header里的If-None-Match里,
服务器接受到If-None-Match的值后,会拿来跟该资源文件的ETag值做比较,如果相同,则表示资源文件没有发生改变,
服务器就会返回HTTP/304 Not Modified响应,但没有响应体.客户端收到304响应后,就会从缓存中读取对应的资源,如果不相同,
则表示资源发生了改变,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源。
Last-Modified和If-Modified-Since
Last-Modified是该资源文件最后一次更改时间,服务器会在response header里返回,同时浏览器会将这个值保存起来,
在下一次发送请求时,放到request header里的If-Modified-Since里,服务器在接收到后也会做比对,如果相同则返回304,
如果不同则返回200 ok。
涉及内容:
Cache-Control ## 响应头表示了资源是否可以被缓存,以及缓存的有效期。
ETag ## 响应头标识了资源的版本,此后浏览器可据此进行缓存以及询问服务器。
Last-Modified ## 响应头标识了资源的修改时间,此后浏览器可据此进行缓存以及询问服务器。
Expires/Cache-Control Header是控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只是Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则。
Last-Modified/If-Modified-Since和ETag/If-None-Match是浏览器发送请求到服务器后判断文件是否 已经修改过,如果没有修改过就只发送一个304回给浏览器,告诉浏览器直接从自己本地的缓存取数据;如果修改过那就整个数据重新发给浏览器。
Expires: Thu, 10 Dec 2015 23:21:37 GMT
不过 Expires 有缺点,比如说,服务端和客户端的时间设置可能不同,这就会使缓存的失效可能并不能精确的按服务器的预期进行。
Cache-Control: max-age=3600
这里声明的是一个相对的秒数,表示从现在起,3600秒内缓存都是有效的,这样就避免了服务端和客户端时间不一致的问题。
但是 Cache-Control 是 HTTP1.1 才有的,不适用与 HTTP1.0,而 Expires 既适用于 HTTP1.0,也适用于 HTTP1.1,所以说在大多数情况下同时发送这两个头会是一个更好的选择,当客户端两种头都能解析的时候,会优先使用 Cache-Control。
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)根据什么能被缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
http status 403
403
You don’t have permission to access [directory] on this server
403错误是网站访问过程中,常见的错误提示。资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache [1] 设置了访问权限不当。