## HTTP 消息头
**`Accept :`** 告知服务器,客户端可以处理的类型,内容类型用MIME类表示,服务器端使用`Content-Type`应答头通知客户端它的选择。
~~~
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
# 精确类型,如 text/html
<MIME-type>/<MIME-subtype>
# 半精确类型, 如 image/*
<MIME-type>/*
# 任意类型
*/*
# 值代表优先顺序,用相对质量价值表示,又称作权重,默认值1;0 =< q <= 1
;q=
~~~
**`Accept-Charset :`** 告知服务器,客户端可以处理的字符集类型。服务器端使用`Content-Type`应答头通知客户端它的选择。浏览器通常不会设置此项值,因为每种内容类型的默认值通常都是正确的。
~~~
Accept-Charset: utf-8, iso-8859-1;q=0.5
# 字符集 如 utf-8 iso-8859-1 GBK GBK2312
<charset>
# 任意其他字符集
*
# 值代表优先顺序,用相对质量价值表示,又称作权重,默认值1;0 =< q <= 1
;q=
~~~
**`Accept-Language :`** 告知服务器,客户端可以理解的自然语言。服务器端使用`Content-Language`应答头通知客户端它的选择。
~~~
Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
# 语言集 en-US fr-CA
<language>
# 任意语言
*
# 值代表优先顺序,用相对质量价值表示,又称作权重,默认值1;0 =< q <= 1
;q=
~~~
**`Accept-Encoding :`** 告知服务器,客户端可以理解的内容编码方式。服务器端使用`Content-Encoding`应答头通知客户端它的选择。
~~~
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
# 表示采用Lempel-Ziv coding(LZ77) 压缩算法,以及32位CRC校验的编码方式。
gzip
# 采用Lempel-Ziv-Welch(LZW) 压缩算法。
compress
# 采用 zlib结构和deflate压缩算法。
deflate
# 表示采用 Brotli算法的编码方式。
br
# 用于指代自身。
identity
# 任意编码方式
*
# 值代表优先顺序,用相对质量价值表示,又称作权重,默认值1;0 =< q <= 1
;q=
~~~
**`Accept-Patch :`** 服务器使用此消息头通知浏览器请求的媒体类型(media-type)可以被服务器理解。
~~~
Accept-Patch: application/example, text/example
~~~
**`Accept-Range :`** 服务器使用此消息头通知浏览器自身支持范围请求,具体值用于定义范围请求的单位。当浏览器发现`Accept-Range`头时,可以尝试 **继续** 中断了的下载,而不是重新开始。
~~~
Accept-Ranges: bytes
# 范围请求的单位是 bytes (字节)。
bytes
# 不支持任何范围的请求
none
~~~
**`Age :`** 消息对象在缓存代理中存贮的时长,以秒为单位。.
~~~html
Age: 24
# 非负整数
<delta-seconds>
~~~
**`Allow:`** 用于枚举资源所支持的 HTTP 方法的集合。如果 `Allow` 首部字段的值为空,说明资源不接受使用任何 HTTP 方法的请求。
~~~html
Allow: GET, POST, HEAD
# 请求方法的集合。
<http-methods>
~~~
**`Authorization :`** 客户端发送的消息头中的凭证,主要用于服务器验证用户的代理身份。
~~~html
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
# 常见的是基本验证 Basic
<type>
# 生成的凭证,用冒号将用户名和密码进行拼接,将第一步生成的结果用 base64方式编码。
<credentials>
~~~
**`Cache-Control`** 被用于在http请求和响应中,通过指定指令来实现缓存机制。
~~~html
Cache-Control: no-cache, no-store, must-revalidate
# 所有内容都将被缓存(客户端和代理服务器都可缓存)
public
# 所有内容只有客户端可以缓存,Cache-Control的默认值
private
# 客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-cache
# 缓存内容将在xxx秒后失效
max-age=xxx (xxx is numeric)
# 同 max-age,覆盖 max-age、Expires,但仅适用于共享缓存,在私有缓存中被忽略。
s-maxage
# 缓存在考虑使用一个陈旧的资源时,必须先验证它的状态,已过期的缓存将不被使用。
must-revalidate
~~~
**`Clear-Site-Data : `** 服务器端响应头信息,表示清除当前请求网站有关的浏览器数据(cookie,存储,缓存)。
~~~html
Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"
# 表示服务端希望删除本URL原始响应的本地缓存数据
cache
# 表示服务端希望删除URL响应的所有cookie。
cookie
# 表示服务端希望删除URL原响应的所有DOM存储。这包括存储机制
storage
# 表示服务端希望浏览器重新加载本请求 Location.reload
executionContexts
# 表示服务端希望清除原请求响应的所有类型的数据。
*
~~~
**`Connection :`** 决定当前的事务完成后,是否会关闭网络连接。
~~~
Connection: keep-alive
# 表明客户端或服务器想要关闭该网络连接
close
# 表面服务器端会与客户端保持长连接
keep-alive
~~~
**`Keep-Alive : `** 意味着可以提供有效的HTTP会话,以避免客户端频繁的建立`TCP`链接。
~~~
Keep-Alive: timeout=5, max=1000
# 指定了一个空闲连接需要保持打开状态的最小时长(以秒为单位)。
timeout
# 在连接关闭之前,在此连接可以发送的请求的最大值。
max
~~~
**`Content-Length :`** 服务器端发送给客户端的消息主体的大小,即用十进制数字表示的八位字节的数目。
~~~
Content-Length: 1024
# 消息的长度,用十进制数字表示的八位字节的数目。
<length>
~~~
**`Content-Type :`** 用于指示资源的MIME类型 (media type)
~~~
Content-Type: text/html; charset=utf-8; boundary=something
# 资源或数据的MIME TYPE
media-type
# 字符编码
charset
# 用于封装消息的多个部分的边界。
boundary
<举例>
boundary=---------------------------974767299852498929531610575
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="description"
some text
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="myFile"; filename="foo.txt"
Content-Type: text/plain
(content of the uploaded file foo.txt)
---------------------------974767299852498929531610575
~~~
**`Cookie :`** 客户端发送给服务器端的一组消息头;
~~~html
Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;
# 一系列的名称/值对,以分号隔开。
<cookie-list>
~~~
**`Date :`** 一个通用首部,其中包含了报文创建的日期和时间。
~~~
Date: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周几 几号 几月 几年 时:分:秒 格林尼治标准时间。
~~~
**`ETag :`** 服务端返回的特定版本的标识符,保证每一个资源是唯一的。
~~~
ETag: W/"33A64dF551425fcc55e4d42a148795d9f25f89d4"
# 大小写敏感, 表示使用弱验证器
W/
# 实体标签唯一地表示所请求的资源。 它们是位于双引号之间的ASCII字符串
<etag\_value>
~~~
**`Location : `** 指定页面将要定向到的地址,在响应码为3xx的响应中才会有意义。
~~~html
Location: /index.html
# 相对地址(相对于要访问的URL)或绝对地址。
<url>
~~~
**`Host :`** 指明了服务器的域名,以及服务器监听的TCP端口号。
~~~html
Host: developer.cdn.mozilla.net
# 服务器的域名。
<host>
# 服务器监听的 TCP 端口号。
<port>
~~~
**`Origin :`** 指示了请求来自于哪个站点。主要是用来说明最初请求是从哪里发起的;
~~~html
Origin: https://developer.mozilla.org
# 请求所使用的协议,通常是HTTP或HTTPS协议。
<scheme>
# 域名或 IP 地址
<host>
# 正在监听的TCP 端口号。
<port>
~~~
**`Referer : `** 服务器请求的原始资源的URI,其用于所有类型的请求。
~~~html
Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript
# 当前页面被链接而至的前一页面的绝对路径或者相对路径。
<url>
~~~
**`Expires :`** 响应头包含过期时间, 在此时间之后,缓存过期。
~~~html
Expires: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周几 几号 几月 几年 时:分:秒 格林尼治标准时间。
~~~
**`Range :`** 告知服务器应该返回文件的哪一部分。
~~~html
Range: bytes=200-1000, 2000-6576, 19000-
# 范围所采用的单位,通常是字节,bytes
<unit>
# 一个整数,范围的起始值。
<range-start>
# 一个整数,范围的结束值。如果不存在,表示此范围一直延伸到文档结束。
<range-end>
~~~
**`Vary : `** HTTP响应头部信息,它决定了对于未来的一个请求头,应该用一个缓存的回复,还是向源服务器请求一个新的回复。(浏览器的User-Agent各不相同,缓存的内容也会有所差异。)
~~~html
Vary: User-Agent
# 所有的请求都被视为唯一并且非缓存的。
*
# 逗号分隔的一系列http头部名称,用于确定缓存是否可用。
<header-name>
~~~
**`User-Agent :`** 用来让服务端识别客户端的应用类型、操作系统、软件开发商以及版本号。[`User-Agent详解`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/User-Agent)
~~~
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0
User-Agent: <product> / <product-version> (<system-information>)<comment>
# 产品识别码。
<product>
# 产品版本号。
<product-version>
# 系统信息
<system-information>
# 零个或多个关于组成产品信息的注释。
<comment>
~~~
**`If-Match : `** 一个条件请求,在请求方法为 [`GET`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET "HTTP GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。")和[`HEAD`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD "HTTP HEAD 方法 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源.")的情况下,服务器仅在请求的资源满足此首部列出的 `ETag`值时才会返回资源。 **强比较算法**
~~~html
If-Match: "67ab4354ed217892dd"
# 唯一地表示一份资源的实体标签。标签是由 ASCII 字符组成的字符串,用双引号括起来。
<etag_value>
# 可以指代任意资源
*
~~~
**`If-None-Match : `** 一个条件请求,在请求方法为 [`GET`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET "HTTP GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。")和[`HEAD`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD "HTTP HEAD 方法 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源.")的情况下,服务器仅在请求的资源满足此首部列出的 `ETag`值时才会返回资源。 **弱比较算法**
~~~html
If-None-Match: "67ab4354ed217892dd"
# 唯一地表示一份资源的实体标签。标签是由 ASCII 字符组成的字符串,用双引号括起来。
<etag_value>
# 可以指代任意资源
*
~~~
**`If-Modified-Since : `** 服务器只在所请求的资源在给定的日期时间之后对内容进行过修改的情况下才会将资源返回。
~~~html
If-Modified-Since: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周几 几号 几月 几年 时:分:秒 格林尼治标准时间。
~~~
**`If-Range :`** 通常用于断点续传的下载过程中,用来自从上次中断后,确保下载的资源没有发生改变。
~~~html
If-Range: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周几 几号 几月 几年 时:分:秒 格林尼治标准时间。
~~~
- 版本控制之Git简介
- Git工作流程
- Git工作区、暂存区、版本库
- Git 指令汇总
- Git 忽略文件规则 .gitignore
- pull request
- HTTP简介
- HTTP - Keep-Alive
- HTTP缓存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息头
- TCP/IP
- TCP首部
- IP首部
- IP 协议
- TCP/IP漫画
- 前端开发规范
- 前端开发规范整理
- 前端未来规划
- HTML思维导图
- CSS思维导图
- 布局
- position,float,display的关系和优先级
- line-height、height、font-size
- 移动端适配
- JS 对象
- JS 原型模式 - 创建对象
- JS 预编译
- 探索JS引擎
- ES