此篇为了整理我在前端面试中被面试官常问到的HTTP相关的知识点
1. 计算机网络体系结构:
2. HTTP协议特点
特点:无连接、无状态、灵活、简单快速
- 无连接:每次请求都要连接一次,请求结束就断掉,不会保持连接。
- 无状态:每次请求都是独立的,请求结束不会记录连接的任何信息,减少了网络开销,
这是优点也是缺点 。 - 灵活:通过http协议中头部的Content-Type标记,可以传输任意数据类型的数据对象(文本、图片、视频等等),非常灵活。
- 简单快速:发送请求访问某个资源时,只需传送请求方法和URL就可以了,使用简单,正由于http协议简单,使得http服务器的程序规模小,因而通信速度很快
缺点:无状态、不安全、明文传输、队头阻塞
- 无状态:请求不会记录任何连接信息,没有记忆,就无法区分多个请求发起者身份是不是同一个客户端的,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大
- 不安全:明文传输可能被窃听不安全,缺少身份认证也可能遭遇伪装,还有缺少报文完整性验证可能遭到篡改
- 明文传输:报文(header部分)使用的是明文,直接将信息暴露给了外界,WIFI陷阱就是复用明文传输的特点,诱导你连上热点,然后疯狂抓取你的流量,从而拿到你的敏感信息
- 队头阻塞:开启长连接时,只建立一个TCP连接,同一时刻只能处理一个请求,那么当请求耗时过长时,其他请求就只能阻塞状态
3. GET 和 POST 的区别
- GET在浏览器回退时是无害的,而POST会再次发起请求
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置
- GET请求参数会被保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求在URL中传递的参数有长度限制(浏览器限制大小不同),而POST没有限制
- GET参数通过URL传递,POST放在Request body中
- GET产生的URL地址可以被收藏,而POST不可以
- GET没有POST安全,因为GET请求参数直接暴露在URL上,所以不能用来传递敏感信息
- GET请求只能进行URL编码,而POST支持多种编码方式
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
- GET产生一个TCP数据包,POST产生两个数据包(Firefox只发一次)。GET浏览器把 http header和data一起发出去,响应成功200,POST先发送header,响应100 continue,再发送data,响应成功200
4. HTTPS优缺点
优点:
- 内容加密,中间无法查看原始内容
- 身份认证,保证用户访问正确。如访问百度,即使DNS被劫持到第三方站点,也会提醒用户没有访问百度服务,可能被劫持
- 数据完整性,防止内容被第三方冒充或篡改
- 并非绝对安全,但是现下最安全的解决文案,大大增加了中间人的攻击成本
缺点:
- 收费,功能越强大的证书费用越贵
- 证书需要绑定IP,不能在同一个IP上绑定多个域名
- https双方加解密,耗费更多服务器资源
- https握手更耗时,降低一定用户访问速度
5. HTTP 和 HTTPS 的区别
- HTTP是明文传输,不安全,HTTPS是加密传输,安全
- HTTP端口是80,HTTPS端口是443
- HTTP不用认证证书免费,HTTPS需要认证证书要钱
- 连接方式不同,HTTP三次握手,HTTPS中TLS1.2版本7次,TLS1.3版本6次
- HTTP在OSI网络模型中是在
应用层 ,而HTTPS的TLS是在传输层 - HTTP是无状态的,HTTPS是有状态的
|