了解web及网络基础
web 使用一种名为HTTP (超文本传输协议)的协议作为规范,完成从客户端到服务器端的一系列运作流程,web 是建立在HTTP 协议上通信的。
RFC :制定HTTP 协议技术标准的文档。
网络基础 TCP/IP
通常使用的网络包括互联网,是在TCP/IP 协议族的基础上运行的,而HTTP 属于它内部的一个子集。
TCP/IP协议族
计算机与网络设备相互通信,双方需要基于相同的方法。不同硬件、操作系统之间的通信,所有的这一切都需要一种规则,而这种规则就被称为协议。
TCP/IP的分层管理
TCP/IP 协议族按层次分别有应用层、传输层、网络层和数据链路层
-
应用层 决定了向用户提供应用服务时通信的活动。 TCP/IP 协议族内预存了各类通用的应用服务。比如,FIP (文件传输协议)、DNS (域名系统)就是其中两类。HTTP协议就是处于该层。 -
传输层 对上层应用层提供处于网络连接中的两台计算机之间的数据传输。 在传输层上有两个性质不同的协议:TCP (传输控制协议)、UDP (用户数据报协议)。 -
网络层(网络互连层) 用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。 该层的作用是在众多的选型内选择一条传输路线。 -
链路层 用来处理连接网络的硬件部分。 作用范围:控制操作系统、硬件的设备驱动、NIC (网络适配器即网卡)、光纤等物理可见部分(包括连接器等一切传输媒介),硬件上的范畴均在链路层的作用范围内。
TCP/IP通信传输流
利用TCP/IP 协议族进行通信时,通过分层顺序与对方进行通信。发送端从应用层往下走,接收端从链路层往上走,从应用层传输到应用层,才算真正接收到由客户端发过来的HTTP 请求。
发送层每经过一层就会被打上一个该层所属的首部信息,同理,接收端每经过一层会把对应的首部取消,这种把数据信息包装起来的做法称为封装。
与HTTP关系密切的协议:IP、TCP、DNS
负责传输的IP 协议
-
IP 协议位于网络层。不可将IP 与IP地址 搞混,这里的IP 是一种协议的名称。 -
IP协议的作用是把各种数据包传送给对方,其中需要满足的两个条件:IP 地址、MAC 地址。 -
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡【工作在链路层的网络组件,是局域网中连接计算机和传输介质(网线)的接口】所属的固定地址。IP 地址可与MAC 地址配对,IP 地址可变换,MAC 地址基本不会更改。 -
IP 间的通信依赖MAC 地址。使用ARP 协议凭借MAC 地址进行通信,ARP 协议是一种用以解析地址的协议,根据通信方的IP 地址可以反查出对应的MAC 地址。 -
无论哪台计算机、哪台网络设备,都无法全面掌握互联网中的细节。
确保可靠性的TCP 协议
-
TCP 协议位于传输层,提供可靠的字节流服务,可以确认数据最终是否送达到对方。 -
字节流服务:为了传输方便,将大块数据分割为以报文段为单位的数据包进行管理。 -
为了确保数据准确送达,TCP 协议采用了三次握手策略TCP -> SYN -> ACK 。若握手阶段中某个阶段莫名中断,则TCP 协议会再次以相同的顺序发送相同的数据包。
TCP 协议还有其它手段来保证通信的可靠性,三次握手只是其中之一。
负责域名解析的DNS服务
DNS 服务是和HTTP 协议一样位于应用层的协议,它提供域名到IP 之间的解析服务。DNS 通过域名查找IP地址,或逆向从IP 地址反差域名的服务。
各种协议与HTTP协议的关系
TCP 协议、IP 协议、DNS 服务在使用HTTP 协议的通信过程中发挥的作用
URI和URL
URI(统一资源标识符)
-
URI 是由某个协议方案【协议方案是指访问资源所使用的协议类型名称】标志的资源的定位标识符。 -
协议方案包括http、ftp、mailto、telnet、file 等等,标准的URI 协议方案有30种左右。 -
URI 用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),则URL 是URI 的子集。
URL(统一资源定位符)
简单的HTTP协议
HTTP协议用于客户端和服务端之间的通信
- 与TCP/IP协议族内的其他众多协议作用相同。
- 其中,发起请求访问的为客户端,提供资源响应的一端为服务器端。HTTP协议能准确区分哪些是客户端,哪些是服务器端。
通过请求和响应的交换达成通信
看客户端发送给某个HTTP 服务器端的请求报文:
GET 表示请求访问服务器的类型,称为方法。最后的字符串/index.html 指明了请求访问的资源对象,也叫请求URI 。最后的HTTP/1.1 ,即HTTP 的版本号,用来提供客户端使用的HTTP 协议功能。HOST 写明网络域名或IP 地址。
这段请求内容的意思为:请求访问某台HTTP 服务器上的/index.html 页面资源。 其中请求首部字段和响应首部字段均为可选项。
HTTP是不保存状态的协议
- 即无状态协议。
- 自身不具备保存之间发过的请求和响应的功能
- 有些网站需要保存用户的状态,即引入了
cookie 技术。
请求URI定位资源
URI 能访问互联网的任意位置- 如果不是访问特定资源而是对服务器本身发起请求,可以用
* 来代替请求URI 。
OPTION *HTTP/1.1
告知服务器意图的HTTP方法
GET
GET 方法是用来请求访问已被URI 识别的资源。- 主要目的是获取响应的主体内容,获取
URI 的页面资源
POST
POST 方法是来传输实体的主体。- 获取的为返回
URI 接受数据的处理结果
PUT
- 用来传输文件,与
FIP 协议的文件上传相同,无验证机制。 - 要求请求报文的主体中包含文件内容,然后保存到请求
URI 指定的位置。
HEAD
- 获得报文首部
- 与
GET 方法相同,只是不返回报文主体部分。
DELETE
OPTION
- 用来查询针对请求
URI 指定的资源支持的方法
TRACE
- 追踪路径,让
web 服务器端将之前的请求通信环回给客户端的方法 - 不常用,容易引发
XST (跨站追踪)。
CONNET
- 该方法要求与代理服务器通信时建立隧道,将通信内容加密后,实现用隧道协议进行
TCP 通信。 - 加密方法:
SSL 协议(安全套接层)、TLS 协议(传输层安全)
CINNECT 代理服务器名:端口号 HTTP版本 //格式
持久连接节省通信量
- 在
HTML 初始版本中,每进行一次HTML 通信,则TCP 连接断开一次,因此提出持久连接。 - 持久连接:只要任意一端没有准确提出断开连接,则保持
TCP 连接状态。 - 持久连接特点:减轻了服务器端的负载,提高
web 页面的显示速度。 - 管线化技术,同时发送多个请求。
- 请求数越多,持久连接与管线化技术时间差越明显,且前者大于后者。
HTTP报文内的HTTP信息
HTTP报文
用于HTTP 协议交互的信息称为HTTP 报文,有请求报文和响应报文两种。HTTP 报文大致分为报文首部和报文主体(可选项)两块。
- 也可通过编码来提升传输速率,有效处理大量的访问请求,但是编码会消耗更多的
CPU 。 HTTP 报文的主体用于传输请求或响应的实体主体,只有在编码中报文主体不等于实体主体。
压缩传输的内容编码
分割发送的分块传输编码
- 在
HTTP 通信中,请求的编码未传输完成,浏览器无法显示请求页面。因此,在传输大数据时,把数据分割成多块,使浏览器逐步显示页面。 - 编码传输是把实体主体分割成多块,且每块用十六进制来标记大小。
HTTP 中的传输编码机制只作用域分块传输编码
发送多种数据的多部分对象集合
MIME (多用途因特网邮件扩展)机制允许邮件可以处理文本、图片等不同类型的数据。- 在
MIME 扩展中会使用多部分对象集合的方法,来容纳多份不同类型的数据。
获取部分内容的范围请求
Range:bytee=5001~10000
内容协商返回最合适的内容
- 同一个
web 网站可能存在多份相同内容的页面,比如英文版和中文版的web 页面。 - 当浏览器的默认语言为中文时,则会显示对应的中文版的
web 页面,这样的机制称为内容协商。 - 三种类型:服务器驱动协商、客户端驱动协商、透明协商。
返回结果的HTTP状态码
状态码告知从服务器端返回的结果。数中的第一位指定响应类别,后两位无分类。 状态码响应也可能发生错误,如web应用程序内部错误,状态码也可能返回200。
200 OK
表示从客户端发来的请求在服务器端被正常处理,且随状态码返回的信息也会与方法【get、head 等】有关。
204 No Centent
- 表示服务器接受的请求已成功处理,但在返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体。
206 Partical Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求。
301 Moved Permanently
永久性重定向,表示请求的资源已被分配了新的URI ,以后应使用资源现在所指的URI 。
302 Found
临时性重定向。该状态码表示请求的资源已被分配到了新的URI ,希望用户本次能使用新的URI 访问。比如:用户把URI 保存成为了书签,但不会像301 出现时那样去更新书签,而是仍旧返回302 对应的URI 。
303 See Other
- 表示由于请求对应的资源存在着另一个
URI ,应使用GET 方法定向获取请求的资源。 - 与
302 区别在于303 明确客户端应采用GET 方法获取资源,不论第一次请求是什么方法。
304 Not Modified
- 表示客户端发送附带条件的请求,服务器端允许请求访问资源,但未满足条件。
- 与重定向无关。
- 返回时不包含任何响应的主体部分。
307 Tempoprary Redirect
临时重定向。与302 含义相同,只是方法遵照浏览器标准,不会从POST 编为GET 。
400 Bad Request
表示请求报文中存在语法错误,不能被服务器理解。当错误发生时,需修改请求的内容后再次发送。
401 Unauthorized
请求未经授权,表示发送的请求需要有通过HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。若之前已进行过1次请求,则表示用户认证失败。
403 Forbidden
- 表明服务器收到请求,但是对请求资源的访问被服务器拒绝。
- 服务器端没有必要给出拒绝的详细理由,但是想做说明的话可以在实体的主体部分对原因进行描述。
- 发生
403 可能的原因:未获得文件系统的访问授权、访问权限出现问题(从未授权的发送源IP 地址试图访问)
404 Not Found
表示服务器上无法找到请求的资源,也可在服务器端拒绝请求不想说明理由时使用。
500 Internrt Server Error
表明服务器端在执行请求时发生了错误。
503 Service Unavailiable
表示服务器暂处于超负载或正在停机维护,现在无法处理请求。写入Retry-After 首部字段再返回给客户端可以事先得知解除以上状况的时间。
|