请求头中
Cache-Control : no-cache表示浏览器不想读缓存,并不是说没有缓存。
//不理会缓存协商,全部重新获取.此时请求中的Cache-Control值为no-cache
请求头里就有这个no-cache,也就是跳过强缓存和协商缓存阶段,直接请求服务器返回200。
Response Header:
如果请求头部分没有If-None-Match:V(ETag)和If-Modified-Since:V(Last-Modified)的值,直接向web服务发送请求响应200!
错误码406谈起:
406 Not Acceptable 状态码表示客户端错误,表示请求的资源的内容特性无法满足请求头中的条件,
因而无法生成响应实体。 译自HTTP协议规范RFC文档 !得知,如果请求头的 Accept 不符合事先约定的契约,就会返回406错误。报错的是 API 服务,返回的是 application/json 格式的数据, 然而请求中的 Accept 说明它并不支持这种格式,所以会报出406错误。我们仔细检查了常见浏览器发送的请求,发现全部都包含 Accept: */* ;。看来,这些引发406的请求并不是普通用户发出来的。那么,究竟是谁发出了这些请求呢?
排查:
大概有两种可能:1、原始请求头部的Accept 字段就是错的;
2、原始请求头部的 Accept 字段是对的,但是在经过 CDN 节点的时候被 CDN 篡改了。由于以前遇到过 CDN 篡改头部的问题,我们初步判断是 CDN 的问题。
接下来,我们将北京联通的节点暂时回源,验证是不是 CDN 篡改了头部,同时也拿到了最终的用户 IP。 上网搜索这个IP详细的信息,上面赫然写着某搜索引擎的爬虫。原来,406并不是来自于普通用户,而是搜索引擎的爬虫。
Accept:header中用它来告知客户端可以处理的内容类型,这种内容类型用MIME类型来表示
内容类型 示例中,application的是类型,json是子类型。它说明,客户端只能够接收application/json这种类型的响应。如果服务端不能返回这种类型的响应,服务端应当返回406错误。text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型。
因子权重(q)
q是一个0-1之间的数值, q的默认值是1, q=0代表不可接受,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容
请求头
Accept: 浏览器可接受的MIME类型。
eg
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Content-Length:表示请求消息正文的长度
Connection:keep-alive
Keep-Alive: timeout=5, max=100
timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接
断点续传
Range:bytes=1-100
响应头
HTTP/1.1 206 OK
Accept-Range:bytes
Content-Lenght:2222
Content-Range:bytes 0-100/2350