概述建立WEB的技术,以及HTTP的产生和发展。
使用HTTP协议访问网络
当在浏览器地址栏输入URL时候,就会显示对应的web网页了。这其实是当我们输入URL之后,请求的信息被送到对应的服务器,服务器返回的内容就呈现在我们的设备上了。通过发送请求获取服务器资源的浏览器都可被称为客户端(client)。
web使用HTTP协议(HyperText Transfer Protocol超文本传输(转换)协议)作为规范,并且建立在HTTP协议上通信。
网络基础TCP/IP
通常使用的网络建立在TCP/IP协议族的基础上面,HTTP属于其内部的一个子集。计算机之间要相互通信,肯定要基于相同的规则,如何探测目标,哪一边先发起通信,以及用什么语言沟通,如何结束通信这些都需要事先确定,我们将这种规则确定为协议。
协议中包含电缆规格选取,寻找异地用户方法,双方建立通信顺序等,这些与互联网相关联的协议集合起来称之为TCP/IP。
TCP/IP协议中一个很重要的方面就是分层,按层次分别分为以下四层:应用层,传输层,网络层和数据链路层。
分层存在许多好处,比如那个地方需要改变设计,不需要将整体重新替换,而只需要将变动的层改变即可。各层之间定义好接口,内部的内容就可以自由改变了。
协议层各层的作用如下:
应用层
应用层决定了向用户提供应用服务时通信的活动;
TCP/IP协议族内预存了各类通用的应用服务。比如FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name System,域名系统)服务就是其中两类。另外,HTTP协议也处于该层。
传输层
传输层对上层应用层,提供处于网络中的两台计算机之间的数据传输。
传输层存在两个性质不同的协议,分别是TCP(Transmission Control Protocol,传输控制协议)协议和UDP(User Data Protocol,用户传输报协议)协议。
网络层
网络层用来处理网络上流动的数据包。数据包是网络传输的最小数据单位。规定通过怎样的路径将数据传给对方。在众多线路中选择一条传输路线。
数据链路层
处理连接网络的硬件部分。包括控制操作系统,硬件设备驱动,网络适配器和光纤等物理可见部分。硬件上的范畴均在链路层的作用范围内。
HTTP协议的主要特点
简单快速:URI固定
灵活:头部数据类型,完成不同数据类型的传输
无连接:连接一次就断开
无状态:不能区分两次连接者的状态
HTTP报文
请求报文包括请求行,请求头,空行和请求体
响应报文包括状态行,响应头,空行和响应体
请求行包含HTTP方法,请求页面地址,HTTP协议版本
请求头告诉服务端需要哪些内容,为一些key、value值
空行告诉服务端下面是请求体,用来分隔请求头和请求体。
HTTP方法:GET POST PUT DELETE HEAD
post和get区别
GET浏览器回退无害,POST再次提交请求
GET产生的URL可以被收藏,POST不可以
GET请求会被浏览器主动缓存,POST不会
GET只能进行url编码,POST支持多种编码方式
GET请求参数保存在浏览器历史记录,POST不会保留参数
GET请求在url传送的参数长度有限制,POST没有限制
对参数的数据类型
GET只接受ASCII字符,POST没有限制
GET比POST更不安全,因为参数直接暴露在URL上,不能传递敏感信息
GET参数通过URL传递,POST放在request body中
HTTP状态码
1xx:指示信息-表示请求已接收,继续处理
2xx:成功-表示请求已被成功接收
200 OK客户端请求成功
206 客户端发送了一个带有range头的GET请求,服务器完成了它。
3xx:重定向-要完成请求需要进行更进一步的操作
301Moved Permanently:锁清秋的页面已经转移到新的url。
302 Found:请求的页面已经临时转移至新的url。
304 Not Modified:客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
4xx:客户端错误-请求有语法错误或者请求无法实现
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用。
403Forbidden:对被请求的页面的访问被禁止。
404请求资源不存在
5xx:服务器错误,服务器不能实现合法的请求
500 Internal Server Error:服务器发生不可预期的错误,原来缓冲的文档还可以继续使用。
503 Server Unavailable:请求未完成,服务器临时过载或者当机,一段时间后可能恢复正常。
HTTP持久连接(只支持1.1版本)
HTTP协议采用请求-应答模式,当使用普通模式,非Keep-Alive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后断开连接(为无连接的协议)
当使用Keep-Alive模式时,Keep-Alive功能使得客户端到服务端的连接持续有效,当出现对服务器的后续请求时,Keep-Alive功能避免了重新建立连接。
管线化
使用持久连接的情况下,某个连接上的消息类似于请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
管线化就是将请求打包一次传过去,响应页打包一次传回来。
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
管线化的特点
- 管线化机制通过持久连接完成,只有HTTP/1.1支持此技术
- 只有GET和HEAD请求可以进行管线化,而POST有所限制
- 初次创建连接时候不应启动管线机制,因为服务器不一定支持HTTP/1.1的协议。
- 管线化不会影响响应到来的顺序,如上面的例子,响应返回的顺序还是不变的
- HTTP/1.1要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可。
- 由于上面提到的服务器端问题,开启管线化可能不会带来大幅度性能提升,而且很多服务端和代理程序对管线化的支持并不好,因此现代浏览器默认并未开启管线化支持。
2018 年 1月 4日