了解web及网络基础
与互联网相关联的网络协议总称为TCP|IP
TCP|IP的分层管理
应用层:决定向用户提供应用服务时的通信服务(ftp,dns,http)
传输层:对应用层提供处于网络连接中的两台计算机的数据传输(tcp,udp)
网络层:处理网络中流通的数据包。数据包是网络传输中的最小数据单位。该层规定通过怎样的路径到达目标计算机,并将数据包传送给目标计算机
链路层:用来处理连接网络的硬件部分
URI和URL:URI使用字符串标识某一互联网资源,URL表示资源的地址,URL是URI的子集
简单的HTTP协议
请求报文
请求报文由请求方法、请求url、协议版本以及可选的请求首部字段和内容实体构成
响应报文由协议版本、状态码、原因短语以及可选的响应首部字段和内容实体构成
http是不保存状态的协议,即不对请求和响应之间的通信状态进行保存
告知服务器意图的HTTP方法
1. GET获取资源
2. POST传输实体主体,GET方法也可用来传输实体的主体,但一般不使用。
3. PUT传输文件,因为PUT方法本身不带验证机制,任何人都可以上传文件,因此一般的网站不使用该方法
4. HEAD获取报文首部,HEAD与GET方法一样,但是不返回报文的主体部分,用于确认URI的有效性以及资源更新的日期时间
5. DELETE删除文件,与PUT方法相反,但是因为自身不带有验证机制,所以一般网站不开放使用
6. OPTIONS询问支持的方法,查询针对请求url指定资源支持的方法
7. TRACE追踪路径,让Web服务器端将请求通信原样返回给客户端,通常用来测试请求是否在代理服务器被修改或者请求是否被正常发送
8. CONNECT要求在与代理服务器通信时建立隧道
持久连接,http1.1引入了持久连接
持久连接的好处:1、减少了tcp连接的重复建立和断开,减轻了服务器端的负载2、由于减少了建立和断开tcp连接的实践,所以http请求和响应能够尽早结束,更快的显示web页面
管线化,持久化连接使得多数请求以管线化的方式发送成为可能。从前在响应未被返回前不能发送新的请求,现在不用等待响应也能发送下一个请求
使用cookie的状态管理,Cookie会根据服务端返回的响应中的一个叫做Set-Cookie的首部字段,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端回自动在请求报文中加入Cookie字段
HTTP报文内的HTTP信息
编码提升传输速率
1、压缩传输的内容编码
2、分割发送分块传输编码,在传输大量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面
发送多种数据的多部份对象集合
multipart/form-data
在Web表单上传时使用
multipart/byteranges
在响应报文中包含多个范围的内容时使用,状态码206
获取部分内容的范围请求
使用首部字段range来表示请求的范围
Range:bytes=5001-9000
Range:bytes=5001-6000,6001-9000
针对范围请求,会返回状态码为206的报文,对于多重范围的范围请求会在响应报文中的Content-Type字段标明multipart/byteranges
如果服务端无法响应范围请求则会返回全部内容,状态码为200
内容协商,包含在请求报文中的某些首部字段是内容协商判断的基准
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
返回结果的HTTP状态码
状态码的任务是当向服务端发送请求时,描述返回的请求的结果
状态码中的第一位指定响应的类别,后两位无分类
| 类别 | 原因短语 | |
|---|---|---|
| 1xx | 信息性状态码 | 请求正在处理 |
| 2xx | 成功状态码 | 请求正常处理完毕 |
| 3xx | 重定向状态码 | 需要进行附加操作以完成请求 |
| 4xx | 客户端错误状态码 | 服务端无法处理请求 |
| 5xx | 服务端错误状态码 | 服务端处理请求出错 |
2xx
200 OK客户端发来的请求被正常处理了
204 No Content请求被正常处理,但在返回的报文中不需要包含实体的主体部分。一般在客户端向服务端发送请求,但服务端不需要向客户端返回新的内容时使用。
206 Partial Content客户端进行了范围请求,服务端成功执行了这部分请求
3xx
301 Moved Permanently永久重定向。当前请求的资源被分配了新的URI,如果收藏了旧的URI,应该使用Location首部字段提示的URI重新保存。
302 Found临时性重定向。如果收藏了旧的URI,并不会更新URI
303 See Other应使用GET方法访问新的URI,除此之外与302相同
304 Not Modified客户端发送附带条件的请求时,当请求未满足条件,会返回304,并且响应报文不会包含任何响应的主体部分
307 Temporary Redirect与302状态码有着相同的含义,302在执行中会把POST请求改为GET请求,而307在执行中回遵照浏览器标准
4xx
400 Bad Request表示发送的请求中,存在语法错误
401 Unauthorized该状态码表示发送的请求需要有通过HTTP认证的认证信息。返回的401中,需要包含适用于被请求资源的WWWAuthenticate首部用于质询用户信息。当浏览器第一次接受到401响应会弹出认证用的对话窗口
403 Forbidden表明对请求资源的访问被服务器拒绝了
404 Not Found表明服务器无法找到请求的资源,也可在服务器拒绝请求但不想给出理由时使用
5xx
500 Internal Server Error表示服务器在执行请求时发生了错误
503 Service Unavailable该状态码表明服务器正在维护或者超负荷运行,暂时无法处理请求。如果可以得知需要的时间,可以写入Retry After首部字段再返回给客户端
与HTTP协作的Web服务器
单台虚拟主机实现多个域名。HTTP/1.1允许一台服务器搭建多个Web站点,当浏览器使用主机和域名访问这些Web站点时,域名通过DNS服务映射到IP地址,所以对不同Web站点的访问会到达同一台服务器,这就需要在请求中的Host字段中添加主机名和域名,来区分这些请求
通信数据转发程序
代理
代理的基本行为是将客户端的请求转发给服务端,将服务端的响应转发给客户端。在每次转发时,会在请求或响应中附加Via首部以标记经过的主机信息
代理可以按两种基准分类,一是是否使用缓存、二是是否修改报文
使用代理的理由,利用缓存技术减少网络中的流量,实现针对特定网站的访问控制
网关
网关和代理类似,并且网关能使通信线路上的服务器提供非HTTP协议服务
利用网关能提高通信的安全性,可以在在网关和客户端之间的通信线路上加密
隧道
隧道可按要求建立一条与服务器的通信链路,并将对这条通信链路进行加密。
隧道的目的是,客户端与服务器进行安全的通信
对于客户端来说不用在意隧道的存在
隧道将请求保持原样中转给服务器
保存资源的缓存,缓存可以存在在代理服务器上也可以存在在代理服务器上。但是即使是对相同资源的请求也不能保证对请求的响应都是同一份,这涉及到资源的时效性问题。
HTTP首部
http报文首部字段为客户端和服务端处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息是无需查看的。
http报文首部字段分为通用首部字段、请求首部字段、响应首部字段和实体首部字段
通用首部字段
Cache-Control通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制
Cache-Control的指令
public,在服务器返回的响应使用该指令,明确表示允许其他用户获得该缓存
private,同public,但含义是只对特定用户作为对象,代理服务器只会对该特定用户提供缓存,对其他用户则不会
no-cache,请求和响应都可使用该指令,但只有响应中使用的该指令可以指定具体的值。在请求中,表示客户端不接受缓存,中间的缓存服务器必须把请求转发给源服务器。在响应中,使用该指令表示禁止缓存服务器对该响应进行缓存。如果在响应中对该指令指定具体的值,表示客户端不能对该响应进行缓存,否则就可以
no-store暗示请求或响应中包含机密信息,缓存不能再本地保存请求或响应任一部分
Connection主要来管理持久连接和管理代理服务器不再转发特定首部字段
Connection的指令
Connection:不再转发的首部字段名 //使用该指令则控制代理服务器不再转发该首部字段,但这个首部字段需要是hop-by-hop首部
另外则是管理持久连接。在http/1.1中默认使用持久连接,如果想要断开持久连接,使用Connection:close
在http/1.1以前的版本中如果想使用持久连接,在请求中添加Conenction:Keep-Alive,在响应中会加上Keep-Alive和Connection首部字段
Date表明创建HTTP报文的日期和时间
Pragma是http/1.1之前的历史遗留字段,使用形式唯一,只能在客户端发送的请求中使用,含义是客户端不接受缓存
Pragma:no-cache
因为不能确保中间的服务器http版本一致,那么如果想要表示不接受缓存,一般要同时包含Cache-Control:no-cache和pragma:no-cache
Pragma字段被设计为通用首部字段,允许实现者定义新的指令,来满足特定的需求(这可能是为什么通用首部字段目前通常用在请求中的原因🤔
Trailer该首部字段会事先说明在报文主体后有哪些首部字段,可应用在分块传输编码时
Transfer-Encoding首部字段规定传输报文主体时采用的编码方式
Upgrade用于检测http协议及其他协议是否可以使用更高版本代替。Upgrade首部字段产生作用的对象仅限于客户端及邻接服务器,因此在使用Upgrade时,需要配合Connection首部字段一起使用
Via能够追踪客户端和服务器之间的请求和响应报文的传输路径,同时还能够避免回环的产生,经常和TRACE方法一起使用
Warning通常会告知一些与缓存相关的问题警告
请求首部字段
请求首部字段是客户端往服务器发送请求报文中所使用的字段,用以补充客户端信息、附加信息、请求内容的优先级等信息
Accept告知服务器用户代理能够处理的媒体类型及媒体类型的优先级
Accept-Charset告知服务器用户代理支持的字符集。可用于内容协商机制的服务器驱动协商
Accept-Encoding告知服务器用户代理支持的内容编码的方式及优先级,内容编码的方式指压缩报文实体的方式
Accept-Language告知服务器用户代理想要的自然语言集
Authorization用来告知服务器用户代理的认证信息
Expect告知服务器期望收到的某种行为,目前只定义了Expect:100-continue,表示客户端等待收到100 continue的响应
From告知服务器使用用户代理的用户的电子邮件地址
Host在同一台服务器上部署多个网站时使用
形如If-xxx的字段都是条件请求,只有在条件判断为真时,服务器才会执行请求
If-Match告知服务器匹配资源的实体标记值(Etag),这时服务器无法使用弱ETag值。只有在匹配为真时,才会执行请求,否则返回412。另外也可使用*来作为字段值,这样服务器就会忽略ETag值,只查看是否有这个资源
If-Modified-Since用于确认客户端或者代理的资源的有效性,如果在这个日期之后有更新则处理请求否则返回304
If-None-Match与If-Match相反,只有在ETag值不同时才处理请求
If-Range只有在If-Range字段值和ETag值或者时间一致时才作范围请求处理否则返回全部资源
If-Unmodified-Since和If-Modified相反,只有在指定时间之后未发生改变才处理请求,否则返回412
Max-Forwards以十进制整数形式指定可经过的服务器的最大数量。一个请求可能会经过多台服务器,当其中一台服务器出现状况时导致请求转发失败时,就无法收到任何响应,使用Max-Forwards可以对以上问题产生的原因进行调查
Range获取部分资源的范围请求
Referer告知服务器请求的原始资源的URI
TE用于告诉服务器客户端能够处理的传输编码方式以及优先级
User-Agent用于告诉服务器创建请求的浏览器及用户代理名称等信息
响应首部字段
是服务器向客户端发送的响应中所使用的字段,用于补充响应的服务器信息、附加信息以及对客户端的要求
Accept-Ranges用于告知客户端服务器能否处理范围信息,能处理则字段值为bytes,不能处理为none
Age告知客户端,响应已经创建多长时间。如果响应由代理服务器创建,则时间为代理服务器向源服务器请求认证并得到认证的时间。代理服务器创建的响应必须带上Age字段
ETag能告知客户端实体标识。是一种可将资源以字符串形式作唯一性标识的方式,服务器会为每一份资源分配ETag值。在下载过程中出现中断、再连接,都会使用ETag值来指定资源;中英文资源的URI相同,使用ETag值来区分。ETag有强弱之分,强ETag指无论资源发生多细微的变化都会导致ETag改变,弱ETag只提示资源是否相同,只有在资源发生根本性变化才会导致ETag值改变
Location客户端应重定向到指定URI,基本配合3xx出现
Proxy-Authenticate用于客户端与代理之间的认证
Retry-After告诉客户端多久之后再发送请求,主要配合503 或者3xx一起使用
Server http服务器的应用程序信息
Vary缓存控制。对于某次请求,服务器返回带有Vary的响应,当再有对相同资源的请求时,只有Vary指定的首部的字段值相同才能返回缓存
WWW-Authenticate告诉客户端访问所请资源的认证方案,401响应中肯定有该首部
实体首部字段
是包含在请求报文和响应报文中与实体相关的字段,用于补充实体的更新时间等与实体相关的内容
Allow告诉客户端指定资源所支持的http方法。405响应中包含该首部
Content-Encoding告知客户端对实体主体部分采用的内容编码方式
Content-Language告知客户端实体主体使用的自然语言
Content-Length表明实体主体部分的大小,单位字节。使用内容编码传输时,不能使用该字段
Content-Location告知与报文主体部分相对应的URI
Content-MD5客户端能够检测报文在传输过程中是否能够保持完整
Content-Range告知客户端,响应的实体中哪个部分符合范围请求
Content-Type告知客户端实体主体中的媒体的类型
Expires资源的失效日期,当Cache-Control有指定max-age时,会优先处理max-age
Last-Modified资源的最终修改时间
确保Web安全的HTTPS
http协议本身的缺点,通信信息可能被窃听、伪装、篡改
http+加密+认证+完整性保护=https
https并非是一种新的应用层协议只是http通信接口部分使用SSL和TLS协议代替