HTTP相关
条评论浏览器请求一个网页的过程
- 浏览器中输入一个域名(URL,统一资源定位符)点击回车;
- 浏览器将域名发送给DNS服务器,DNS服务器将域名解析为IP地址;
- 客户端与服务器建立TCP连接;
- 客户端向服务器发送HTTP请求(请求报文分为三部分:请求行、首部、实体);
- 服务器响应http请求,浏览器得到html代码;
- 浏览器对页面进行渲染呈现给用户
HTTP1.0、HTTP1.1、HTTP2.0的区别
一、HTTP的历史
HTTP0.9 | HTTP1.0 | HTTP1.1 | HTTP2.0 |
---|---|---|---|
1991 | 1996 | 1999 | 2015 |
二、HTTP的基本优化
影响HTTP网络请求的两个主要因素:带宽、延迟
- 带宽:
- 基础设施建设
- 延迟:
- 浏览器阻塞:对于同一个域名,超过浏览器最大连接数限制的请求会被阻塞
- DNS查询:域名解析为IP的过程。可以利用DNS缓存结果来降低此因素造成的延迟
- 建立连接:HTTP是基于TCP的,TCP请求如果不能复用,则每次请求都需要三次握手和四次挥手
三、HTTP1.0和HTTP1.1的一些区别
- 缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- 错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- Host头处理:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
- 长连接:HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
四、HTTP2.0相对HTTP1.x的新特性
- header压缩:降低节省了报文头占用流量,相同的头部信息不会通过请求发送,延用之前请求携带的头部信息。
- 二进制协议:HTTP2.0采用二进制协议,区别于HTTP1.x的超文本协议。客户端/服务端发送/接收数据时,会将数据打散乱序发送,接收数据时接收一端再通过streamID标识来将数据合并。
- 多路复用:并发请求,而非有序并阻塞。
- 服务端推送:服务端可以将响应主动推送到客户端缓存中。例如我们加载index.html, 我们可能还需要index.js, index.css等文件。传统的请求只有当拿到index.html,解析html中对index.js/index.css的引入才会再请求资源加载,但是通过服务端数据,可以提前将资源推送给客户端,这样客户端要用到的时候直接调用即可,不用再发送请求。
五、HTTPS与HTTP的一些区别
- HTTP运行在TCP之上,所有传输内容都是明文;HTTPS是由SSL/TLS加HTTP构建的可进行加密传输、身份认证的网络协议,相对HTTP更安全
- HTTP运行在80端口,HTTPS运行在443端口
- HTTPS需要到CA申请证书