了解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(统一资源定位符)
-
包括绝对
URL
和相对URL
-
绝对
URL
的格式
其中协议方案名不区分大小写,也可以使用data:
或者javascript:
这类指定数据或脚本程序的方案名。
登录信息指定用户名和密码,为可选性。
服务器地址可以是DNS
可解析的名称,也可以是IPv4、IPv6
地址。
服务器端口号为可选项,若忽略则为默认端口号。
片段标识符也为可选项,通常可标记处已获取资源的子资源(文档内的某个位置)。
简单的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
- 删除指定资源,与
PUT
相反,无验证机制。
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
首部字段再返回给客户端可以事先得知解除以上状况的时间。
其中最常见的为
200
客户端请求成功
302
重定向
400
客户端请求有语法错误,不能被服务器理解
401
请求未经授权
403
服务器收到请求,但是拒绝提供服务
404
请求资源不存在
500
服务器内部错误
503
服务器当前不能处理客户端请求,一段时间后可恢复正常