2019-02-08 HTTP协议初识

2019-02-09  本文已影响0人  翻斗乐园胡图图

最近面试被问了一个HTTP控制缓存的问题和一个Http状态码的问题,没答上来。空闲时间看了一些关于HTTP的内容,记录一下。

什么是HTTP

HTTP请求(Request)与相应(Response)

请求(Request)

HTTP请求.png

一次请求可以分为4个部分

HTTP有多种请求方式,最常见的是GET和POST以及HEAD

GET

POST

HEAD

响应(Response)

HTTP响应.jpg

一次响应可以分为4个部分

HTTP状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

HTTP请求过程

http请求过程.png

HTTP控制缓存

通过响应来控制缓存,在响应头中主要有cache-control、pragma、expires三个响应头,主要通过cache-control来控制缓存。cache-control是HTTP1.1中的响应头,其参数为相对的秒值,即过多少秒缓存失效,因此建议使用该响应头来控制缓存失效时间,其后可以跟的内容有no-cache、no-store、max-age、must-revalidate

Cache-Control的主要参数

注意:cache-control: no-cache控制缓存,客户端是会缓存资源的,只是在于原始服务器进行再验证之前不会想客户端提供资源,也就是资源新鲜度永远过期,这样比直接访问服务器节省了资源在网络中的传输成本,相比开启缓存增加了再验证的成本,性能失效介于两者之间;要想客户端缓存不从响应中拷贝资源副本,则应该使用cache-control: no-store,使用该响应头内容也可以让缓存立即删除已经拷贝的副本;而must-revalidate是服务器希望缓存能严格遵守过期信息,一般情况下类似no-cache,但在缓存与原始服务器进行新鲜度验证的时候,原始服务器不可用,这将会导致这一段时间中访问该资源会504 gateway timeout,因此建议使用no-cache

附上HTTP响应头参数

参数来源

上一篇下一篇

猜你喜欢

热点阅读