带你一步步解析 HTTP( 六 )


紧跟着路径后面的是 查询参数

带你一步步解析 HTTP

文章插图
 
?key1=value1&key2=value2 是提供给 Web 服务器的额外参数 。如果是 GET 请求,一般带有请求 URL 参数,如果是 POST 请求,则不会在路径后面直接加参数 。这些参数是用 & 符号分隔的键/值对列表 。key1 = value1 是第一对,key2 = value2 是第二对参数
紧跟着参数的是锚点
带你一步步解析 HTTP

文章插图
 
#SomewhereInTheDocument 是资源本身的某一部分的一个锚点 。锚点代表资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示 。例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间 。值得注意的是 # 号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器 。
HTTP 版本表示报文使用的 HTTP 协议版本 。
请求头部这部分内容只是大致介绍一下,内容较多,后面会再以一篇文章详述
在表述完了起始行之后我们再来看一下请求头部,现在我们向上找,找到http://www.someSchool.edu/someDepartment/home.index,来看一下它的请求头部
Host: www.someschool.eduConnection: closeUser-agent: Mozilla/5.0Accept-language: fr这个请求头信息比较少,首先 Host 表示的是对象所在的主机 。你也许认为这个 Host 是不需要的,因为 URL 不是已经指明了请求对象的路径了吗?这个首部行提供的信息是 Web 代理高速缓存所需要的 。Connection: close 表示的是浏览器需要告诉服务器使用的是非持久连接 。它要求服务器在发送完响应的对象后就关闭连接 。User-agent: 这是请求头用来告诉 Web 服务器,浏览器使用的类型是 Mozilla/5.0,即 Firefox 浏览器 。Accept-language 告诉 Web 服务器,浏览器想要得到对象的法语版本,前提是服务器需要支持法语类型,否则将会发送服务器的默认版本 。下面我们针对主要的实体字段进行介绍(具体的可以参考 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers MDN 官网学习)
HTTP 的请求标头分为四种: 通用标头、请求标头、响应标头 和 实体标头,依次来进行详解 。
通用标头通用标头主要有三个,分别是 Date、Cache-Control 和 Connection
Date
Date 是一个通用标头,它可以出现在请求标头和响应标头中,它的基本表示如下
Date: Wed, 21 Oct 2015 07:28:00 GMT 表示的是格林威治标准时间,这个时间要比北京时间慢八个小时
带你一步步解析 HTTP

文章插图
 
Cache-Control
Cache-Control 是一个通用标头,他可以出现在请求标头和响应标头中,Cache-Control 的种类比较多,虽然说这是一个通用标头,但是又一些特性是请求标头具有的,有一些是响应标头才有的 。主要大类有 可缓存性、阈值性、 重新验证并重新加载 和其他特性
可缓存性是唯一响应标头才具有的特性,我们会在响应标头中详述 。
阈值性,这个我翻译可能不准确,它的原英文是 Expiration,我是根据它的值来翻译的,你看到这些值可能会觉得我翻译的有点道理
  • max-age: 资源被认为仍然有效的最长时间,与 Expires 不同,这个请求是相对于 request标头的时间,而 Expires 是相对于响应标头 。(请求标头)
  • s-maxage: 重写了 max-age 和 Expires 请求头,仅仅适用于共享缓存,被私有缓存所忽略(这块不理解,看完响应头的 Cache-Control 再进行理解)(请求标头)
  • max-stale:表示客户端将接受的最大响应时间,以秒为单位 。(响应标头)
  • min-fresh: 表示客户端希望响应在指定的最小时间内有效 。(响应标头)
Connection
Connection 决定当前事务(一次三次握手和四次挥手)完成后,是否会关闭网络连接 。Connection 有两种,一种是持久性连接,即一次事务完成后不关闭网络连接
Connection: keep-alive另一种是非持久性连接,即一次事务完成后关闭网络连接
Connection: closeHTTP1.1 其他通用标头如下
带你一步步解析 HTTP

文章插图
 
实体标头实体标头是描述消息正文内容的 HTTP 标头 。实体标头用于 HTTP 请求和响应中 。头部Content-Length、 Content-Language、 Content-Encoding 是实体头 。