HTTP常见的请求头和响应头?
- 请求头:
- Accept:告诉服务器,客户端支持的数据类型。
- Accept-Charset:告诉服务器,客户端采用的编码
- Host:客户端通过这个头告诉服务器,想访问的主机名
- User-Agent:客户端通过这个头告诉服务器,客户端的软件环境。
- Cookie:客户端通过这个头告诉服务器,可以向服务器带数据。
- 与浏览器缓存相关的头:
- 协商缓存:
- If-Modified-Since:浏览器通过这个头,携带浏览器第一次访问时服务器返回响应头Last-Modified 的值,去协商是否使用缓存。
- If-None-Match:浏览器通过这个头,携带浏览器第一次访问时服务器返回响应头ETag 的值,去服务器的ETag值做校验,看是否使用缓存。
- 响应头:
- Location:这个头配合 302 状态码使用,告诉用户端找谁。
- Content-Type:服务器通过这个头,回送数据的类型
- Server:服务器通过这个头,告诉浏览器服务器的类型
- 与浏览器缓存相关的头:
- **强缓存:**强缓存判断是否缓存的依据来自于是否超出某个时间或者某个时间段,而不关心服务器端文件是否已经更新。
- Expires:服务器通过这个头,告诉浏览器把回送的数据缓存多长时间【http协议1.0的产物】,受限于本地时间,如果修改了本地时间,可能会造成缓存失效
例:Expires:Thu, 02 Apr 2030 05:14:08 GMT - Cache-Control:服务器通过这个头,告诉浏览器具体的缓存时间,缓存时间内不需再向服务器发送请求,【http1.1的产物,优先级高于Expires】
例:Cache-Control:max-age=120
- **协商缓存:**协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程
- Last-Modified:浏览器第一次访问时,服务器会返回 【与If-Modified-Since一起使用】 例: Last-Modified: Fri, 22 Jul 2016 01:47:00 GMT
- 浏览器下次请求时 携带 If-Modified-Since 这个header , 该值为 Last-Modified
- 服务器接收请求后,对比结果,若资源未发生改变,则返回304, 返回304时响应体为空;否则返回200并将新资源返回给浏览器
缺点:只能精确到秒,容易发生单秒内多次修改,检测不到
- ETag:浏览器第一次访问时,服务器会通过某种哈希算法计算出该资源的一个唯一标识(Hash值),并将这个唯一标识,通过ETag响应头的值返回给浏览器。只要该资源文件有改动,ETag的值就会重新生成【与 If-None-Match 一起使用】
对比 Last-Modified VS ETag
1,精度不一样 - Etag 高
2,性能上 - Last-Modifi 高
3,优先级 - Etag 高
http 的请求头和响应头还有很多,我这里只列举了其中的一部分,又加上了一些自己总结的跟缓存相关的头,如有不对之处,望各路大佬积极指正。