大家好,这是一个更文挑战。(写错的各位看官包容) 这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
1. HTTP的定义: http是超文本传输协议,也就是HyperText Transfer Protocol
2. http的默认端口号是80
3. http是无状态协议
4. http是基于TCP/IP通信协议来传递数据
-
tcp/ip协议被分为4层
-
应用层: 常用应用层的协议有
1. dns 2. ftp 3. http
-
传输层: 常用传输层的协议有
1. tcp 2. udp
-
网络层: 常用网络层协议
1. ip(internet protocol:网际协议) 2. ip相关的概念 2.1 IP 地址指明了节点被分配到的地址 2.2 MAC 地址是指网卡所属的固定地址 2.3 IP 地址可以和 MAC 地址进行配对 2.4 IP 地址可变换,但 MAC地址基本上不会更改 2.5 ARP地解析协议:使用arp协议凭借mac地址进行通信,根据通信方的 IP 地址就可以反查出对应的 MAC 地址
-
数据链路层
-
5. http请求的简化过程,大概可以分为以下7步:
- 建立tcp请求
- web浏览器给web service发送请求命令
- web浏览器发送请求头信息
- web服务器应答
- web服务器发送应答头信息
- web 服务器像浏览器发送数据
- web服务器关闭一个tcp链接
6. http请求和响应格式
-
请求格式:
-
响应格式
7. http状态码
-
101:主要用于websocket,也可以用于http2的升级
-
200:成功
-
301:永久重定向
-
302:临时跳转,但是存在二义性,会有302劫持,302针对原请求是post的不可以自动重定向,但是服务器和浏览器的实现是运行重定向。
-
为消除二义性出现了下面2个状态码
-
303:无论原请求是get还是post,都可以自动进行重定向
-
307:只有原请求是get或者head方法才进行重定向
-
-
-
304:浏览器的缓存相关的状态码,下面就顺便说下浏览器的缓存:
-
浏览器的缓存大致分为2种,强制缓存和协商缓存
-
强制缓存(浏览器优先读取):常用的相关的请求头有2个:expires一个特定的时间,比较旧, cache-control具体的时间,比较新,优先级高
-
协商缓存
-
前端带上 etag或者last-modofied
- etag:是为了应对资源修改时间可能很频繁的情况出现的,是基于资源的内容计算出来的值,因此优先级也较高。
- last-modified:设置标准是资源的上次修改时间
-
后端带上if-not-matched或者if-modified-since,
- 若没有更新就返回304,否则返回200
-
-
协商缓存和强制缓存的区别:协商缓存与强制缓存的区别在于强制缓存不需要访问服务器,返回结果是200,协商缓存需要访问服务器,如果命中缓存的话,返回结果是304。
-
-
-
400:错误请求,服务器不理解请求的语法
-
401: 未授权,请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应
-
403:服务器拒绝请求
-
404:未找到
-
405:请求方式不对
-
500:服务器遇到错误,无法完成请求
-
502:错误网关,服务器作为网关或代理,从上游服务器收到无效响应
-
503:服务不可用
8. http头部字段
-
http通用头部字段
-
cache-control
- no-store:不缓存
- no-cache:不缓存过期资源
- max-age:在这个范围内,直接从缓存取(有该属性,http1.1会忽略掉expires)
- min-fresh: 要求缓存服务器返回至少还未过指定时间的缓存资源
- only-if-cached: 该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码 504 Gateway Timeout
- no-transform: 无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型
- must-revalidate: (会忽略请求的 max-stale)代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效,若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条 504(Gateway Timeout)状态码
-
connection
- 控制不再转发给代理的首部字段
- 管理持久连接
-
date
- 创建 HTTP 报文的日期和时间。
-
Pragma
- HTTP/1.1 之前版本的历史遗留字段,仅作为与 HTTP/1.0的向后兼容而定义。只用在客户端发送的请求中,有该字段一般会加Cache-Control: no-cache
-
trailer
- 事先说明在报文主体后记录了哪些首部字段,该首部字段可应用在http/1.1版本分块传输编码时
-
Transfer-Encoding
- 传输报文主体时采用的编码方式,HTTP/1.1 的传输编码方式仅对分块传输编码有效
-
Upgrade
- 检测 HTTP 协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议,Upgrade 首部字段产生作用。 Upgrade 对象仅限于客户端和邻接服务器之间。因此,使用首部字段 Upgrade 时,还需要额外指定Connection:Upgrade
-
Via
- 追踪客户端与服务器之间的请求和响应报文的传输路径,经常会和 TRACE 方法一起使用
-
Warning
- 会告知用户一些与缓存相关的问题的警告,格式:Warning: [警告码][警告的主机:端口号]“[警告内容]”([日期时间])
请求头
-
Accept
- 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,例如:Accept: text/html,application/xhtml+xml,application/xml;q=0.
-
Accept-Charset
- 可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字段 Accept 相同的是可用权重 q 值来表示相对优先级。例: Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
-
Accept-Encoding
- 用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种内容编码 例:Accept-Encoding: gzip, defla
-
Accept-Langua
- 告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集
-
Authorization
- 用来告知服务器,用户代理的认证信息(证书值)
-
Expect
- 来告知服务器,期望出现的某种特定行为,因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码 417 Expectation Failed
-
From
- 用来告知服务器使用用户代理的用户的电子邮件地址
-
Host
- 告知服务器,请求的资源所处的互联网主机名和端口号(必须被包含在请求内的首部字段)
-
If-Match
- 条件请求,为真时候才会执行请求),若和Etag的值一样则返回200,不一样返回412,若if-Match的值为*号,服务器会忽略
-
If-None-Match
- 只有在 If-None-Match 的字段值与 ETag 值不一致时,可处理该请求。与 If-Match 首部字段的作用相反,在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可获取最新的资源。因此,这与使用首部字段 If-Modified-Since 时有些类似
-
If-Modified-Since
- 告知服务器若 If-Modified-Since 字段值早于资源的更新时间,则希望能处理该请求,If-Modified-Since,属附带条件之一,它会告知服务器若 IfModified-Since 字段值早于资源的更新时间,则希望能处理该请求。而在指定 If-Modified-Since 字段值的日期时间之后,如果请求的资源都没有过更新,则返回状态码 304 Not Modified 的响应
-
If-Unmodified-Since
- 和 If-Modified-Since 的作用相反,是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了更新,则以状态码 412 Precondition Failed 作为响返回
-
Range
- 获取部分资源的范围请求,包含首部字段 Range 即可告知服务器资源的指定范围,带 Range 首部字段请求的服务器,会在处理请求之后返回状态码为 206 Partial Content 的响应。无法处理该范围请求时,则会返回状态码 200 OK 的响应及全部资源
-
If-Range
- 该字段的值若是和etag值或更新的日期时间匹配一致,那么就作为范围请求处理,若不一致,则忽略范围请求,返回全部资源。如果服务器的资源有更新的情况下,若不使用该首部字段,则需要处理2次
-
Max-Forwards
- 通过 TRACE 方法或 OPTIONS 方法,发送包含首部字段 MaxForwards 的请求时,该字段以十进制整数形式指定可经过的服务器最大数目
-
Proxy-Authorization
- 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization 的请求,以告知服务器认证所需要的信息
-
Referer
- 告知服务器请求的原始资源的 URI
-
TE
- 告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段 Accept-Encoding 的功能很相像,但是用于传输编码
-
User-Agent
- 会将创建请求的浏览器和用户代理名称等信息传达给服务器
响应头
-
Accept-Ranges
- 用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源( bytes和none)
-
Age
- 能告知客户端,源服务器在多久前创建了响应,单位秒
-
ETag
- 首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag值,强Etag和弱Etag,强Etag不论实体发生多么细微的变化都会改变其值,弱Etag只用于提示资源是否相同,只有资源发生了根本改变,产生差异时才会改变Etag的值,这时,会在字段值最开始处附加W/
-
Location
- 将响应接收方引导至某个与请求 URI 位置不同的资源, 基本上,该字段会配合 3xx :Redirection 的响应,提供重定向的URI
-
Proxy-Authenticate
- 代理服务器所要求的认证信息发送给客户端
-
Server
- 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息
-
Retry-After
- 告知客户端应该在多久之后再次发送请求。主要配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使用
-
Vary
- 当代理服务器接收到带有 Vary 首部字段指定获取资源的请求时,如果使用的 Accept-Language 字段的值相同,那么就直接从缓存返回响应。反之,则需要先从源服务器端获取资源后才能作为响应返回
-
WWW-Authenticate
- 告知客户端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中,肯定带有首部字段 WWW-Authenticate