1. HTTP协议头含有哪些重要的部分,HTTP状态码
通用头部
Connection:允许客户端和服务器指定与请求/响应连接有关的选项;
Date:提供日期和时间标志,说明报文是什么时间创建的;
MIME-Version:给出了发送端使用的MIME版本;
Trailer:如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖鞋 (trailer)部分的首部集合;
Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式;
Update:给出了发送端可能想要"升级"使用的新版本或协议;
Via:显示了报文经过的中间节点(代理、网关);
Cache-Control:用于随报文传送缓存指示;
HTTP状态码
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于支持服务器错误
2. 从输入URL到页面加载完成的过程中都发生了什么事情?
大致可分为以下这些过程:
1、输入地址;
2、浏览器查找域名的 IP 地址,这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...;
3、浏览器向 web 服务器发送一个 HTTP 请求;
4、服务器的永久重定向响应(从 http://example.com 到 http://www.example.com);
5、浏览器跟踪重定向地址;
6、服务器处理请求;
7、服务器返回一个 HTTP 响应;
8、浏览器显示 HTML;
9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等);
10、浏览器发送异步请求;
3. 性能优化为什么要减少 HTTP 访问次数?
每一个HTTP请求都有一系列过程,并且绝大多数的时间消耗在了建立连接跟等待的时间,所以需要减少HTTP访问次数,增加效率。
4. Http请求的原理
用户通过客户端向服务端发起一个请求,创建一个TCP连接,指定端口号,默认是80,然后连接到服务器工作。在那个端口监听浏览器请求。一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回一个响应状态,比如"HTTP/1.0 404 OK",同时会返回特定的数据内容,如请求的资源,错误代码,其它状态信息等等。
5. https有几次握手和挥手,https的原理。
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
- 客户端发起HTTPS请求
- 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。
- 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。
- 客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。
- 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
- 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
- 传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
- 客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。
6. http有几次挥手和握手?TLS的中文名?TLS在哪一网络层?
HTTP是一个基于TCP的协议,而TCP是一种传输层协议.
建立TCP连接时会发生:三次握手(three-way handshake)
firefox > nginx [SYN]
nginx > firefox [SYN, ACK]
firefox > nginx [ACK]
关闭TCP连接时会发生:四次挥手(four-way handshake)
firefox > nginx [FIN]
nginx > firefox [ACK]
nginx > firefox [FIN]
firefox > nginx [ACK]
TLS为安全传输层协议,属于传输层的网络协议