目录
1. 简述HTTP协议
(1)HTTP是超文本传输协议,主要用于万维网服务器传输超文本到本地浏览器。
(2)特点:
- 基于 C/S 客户端-服务端模式,请求响应方法迅速;
- 允许传输任意类型的数据;
- 无连接,限制每次通信只处理一个请求;
- 无状态,对事务处理没有记忆功能;
2. HTTP是如何处理无状态问题
(1)浏览器的Cookie;
(2)Session会话保存;
3. Cookie与Session的区别
(1)Cookie数据保存在客户端;Session数据保存在服务器。
(2)Cookie安全性较Session低。Cookie可以被分析进行Cookie欺骗,但是Session在一定时间内会保存在服务器中,增加了服务器的负担。
(3)Cookie可以设置过期时间或者永久保存;Session在网页关闭时就销毁。
(4)单个cookie保存的数据不能超过4k,且大部分浏览器限制一个站点只能有20个cookie;Session没有数量的限制,并且能够保存更加复杂的数据。
4. HTTP短连接与长连接的区别
HTTP是建立在TCP连接的基础上,短连接与长连接的区别在于TCP连接的持久性。
- 短连接中每次TCP连接只能处理一次请求,在进行一次新的请求时需要重新建立TCP连接,效率较低;
- 长连接中TCP连接具有持久性,每次TCP连接都能长时间处理多个请求而不释放,当在一定时间内(保活计时器)没有请求才会释放连接,效率较高;
5. HTTP1.0与HTTP1.1的区别
(1)HTTP1.0只支持短连接,HTTP1.1支持长连接(默认)。HTTP是建立在TCP上的,TCP的连接建立需要进行三次握手,释放需要进行四次挥手,重复建立释放会花费很多时间。
(2)HTTP1.1引入了Cookie技术,用于记忆事务保存状态。
(3)HTTP1.1较1.0节省带宽。HTTP1.0发送整个信息;HTTP1.1只发送请求时只发送header,由服务器判别是否有权限访问后再发送body信息。
(4)HTTP1.1有Host域,可以使用web server建立虚拟站点,共享同一个ip和端口。
6. HTTP1.1与HTTP2.0的区别
(1)多路复用。多个请求共享同一个TCP连接,HTTP1.1同一时刻只能处理同一请求,而HTTP2.0同一时刻可以并发处理多个请求。HTTP1.1中客户端在同一段时间内对同一域名的请求次数有限制,超过这个限制会出现阻塞现象。HTTP2.0支持多重的请求响应消息,请求数量限制比1.1高几个数量级。
(2)首部压缩。HTTP2.0通过HPack压缩header后再进行传输,提高了数据的传输速率。
(3)引入二进制分帧层。HTTP1.1的解析是基于文本的,效率低,健壮性差;HTTP2.0将传输的信息分割为消息和帧,并采取二进制编码,效率更高。
(4)服务器推送。客户端的一个请求会收到服务器的多个响应,这些响应会加入到客户端的缓存中,当客户端有相应请求时,可以直接从缓存中获取,而无需向服务器发送请求。
(5)引入了请求优先级及流量控制。
7. HTTP状态码
(1)分类:
- 1xx:信息。服务器收到请求,需要请求者继续执行操作;
- 2xx:成功。操作被成功接收并处理;
- 3xx:重定向。需要进一步操作完成请求;
- 4xx:客户端错误。请求的语法错误或者无法完成请求;
- 5xx:服务端错误。服务器处理请求中出现错误;
(2)常见状态码:
- 200:请求成功;
- 301:资源已被永久转移成URL;
- 404:请求资源不存在;
- 500:内部服务器错误;
8. HTTP与HTTPS的区别
(1)URL不同。HTTP的url开头为http://;HTTPS的url开头是https://。
(2)HTTP是明文传输,容易被攻击和窃取,安全性低;HTTPS是基于TLS/SSL进行加密,安全性高。
(3)HTTPS有CA证书;HTTP没有。
(4)HTTP默认端口为80;HTTPS默认端口为443.
(HTTPS为HyperText Transport Protocol Secure,较HTTP最大的区别是安全性,通过密钥交换算法、签名算法、对称加密算法以及摘要算法进行加密)
9. HTTP请求常见方法
10. GET与POST的区别
(1)GET是直接添加在URL之后的,容易被攻击窃取;POST是添加在请求体中,对用户而言是不可见的,因此比较安全。
(2)GET请求有长度限制,一般不大于32K;POST没有长度限制。
(3)GET反复回退/前进是无害的;POST会再次请求。
(4)GET请求会被缓存;POST默认不会被缓存,除非手动设置。
(5)GET请求值产生一个TCP连接包,将header和data 一起发送给服务器,返回状态码200;POST产生两个TCP连接包,先将header发送给服务器,返回状态码100,再发送data,返回状态码200。
11. 域名格式
这里示例为百度:www.baidu.com
- 根域名(root domain / RD):一般为.,但是一般URL会省略,即www.baidu.com.。
- 顶级域名(top-level domain / TLD):.com,还有.cn、.net等。
- 二级域名(second-level domain / SLD):.baidu。
- 主机名(host):www
12. DNS的解析过程
(1)从浏览器缓存中查找是否有被解析过该域名对应的IP地址,有则直接返回该IP地址,没有则进行下一步;
(2)从本机的C盘hosts中查找是否有该域名的IP地址映射,若没有则进行下一步;
(3)根据TCP/IP设置的参数查询本地DNS服务器,进行区域解析是否有映射,若没有则进行下一步;
(4)根据本地DNS服务器(LDNS)是否设置转发模式分两种情况:
- 若设置了转发模式,则将请求转发给上一级DNS服务器,一级一级向上转发,直到该域名可以解析;
- 若没有设置转发模式,则将请求直接发送给13组根DNS服务器,然后根域名服务器将顶级域名服务器的地址返回给本地域名服务器,本地域名服务器重新发送请求给顶级域名服务器进行解析,一级一级向下重发请求直到解析成功;
(5)本地DNS服务器获取到IP地址后,添加到缓存中,并回传给浏览器;
(6)浏览器接收到IP地址后,根据TTL将域名与IP地址的映射添加到本地缓存中;
13. 打开一个网页数据的传输过程
- 根据URL进行DNS域名解析
- 根据解析得到的IP地址建立TCP连接;
- 向目的IP地址发送HTTP请求;
- 服务器处理请求;
- 服务器返回响应结果;
- 关闭TCP连接;
- 浏览器解析HTML;
- 浏览器布局渲染;
以上内容均是个人理解总结,若有错误欢迎指出!