前言
温故而知新!
不管对于前端还是后端,http协议是我们开发过程中经常会用到的一种技术,理解它可以更深层的帮助我们解决遇到的一些问题,同时也是面试中经常会被提到的知识点,所以是很有必要去了解它。
http
http是超文本传输协议,首先看一下它自身的一些特点和缺点
特点
-
无连接:每一次请求都要连接一次,请求结束就会断掉,不会保持连接(新版本可以在一次连接中发送多个请求)
-
无状态:每一次请求都是独立的,请求结束不会记录连接的任何信息,减少了网络的开销(这个是优点也是缺点)
-
灵活:通过http协议中头部Content-Type字段,可以传输任意类型的数据对象(文本,图片,文件,音视频等)
-
简单快速:发送请求访问某个资源时,只需传送请求方法和URL就可以了,使用简单,正是由于它的简单,使得http服务器的程序规模小,因而通讯速度很快。
缺点
-
无状态:请求时本身不会携带记录任何连接信息,没有记忆,这样就无法区分多个发起者的身份是否是同一个客户端,意味着如果后续处理需要前面的信息,则它必须重传,这样就导致每次连接传送的数据量增多,增大网络开销。
-
不安全:
明文传输信息可能被窃不安全,缺少身份认证也可能遭遇伪装,还有缺少报文完整性验证可能遭到篡改。 -
明文传输:报文(header部分)使用的是明文,直接将信息暴露给了外界, 其中
WIFI陷阱是复用明文传输的特点,诱导你连上热点,然后疯狂抓取你的流量,从而拿到你的敏感信息。 -
对头阻塞:开启长连接,只建立一个TCP连接,同一时刻只能处理一个请求,那么当请求耗时过长时,其他请求就只能阻塞状态(最新的版本貌似已经有优化了)
http报文
http报文分为:请求报文 和 响应报文
请求报文由4部分组成
-
请求行:包含http方法,请求地址,http协议以及版本
-
请求头:包括一些key:value的键值对字段,用来传输浏览器自带或自定义的头部信息,供服务器读取使用
-
空行:用来区分首部和实体,因为请求头都是key:value的格式,当解析遇到空行时,服务端就知道下一个不再是请求头了,就该当做请求体来解析
-
请求体:发送http请求时携带的实体参数
响应报文也由4部分组成
-
状态行:包含http协议以及版本,数字状态码以及英文状态码名称
-
响应头:包括一些key:value的键值对字段,其中一些字段来告诉浏览器应该怎么处理响应的结果
-
空行:同样也是用来区分头部和实体
-
响应体:服务器端返回的数据
http请求方法
一共有9种方法,分别在不同的版本中
-
http1.0:get,head,post
-
http1.1:put,delete,options,patch,trace,connect
| 方法 | 说明 |
|---|---|
| get | 获取资源 |
| head | 获得报文首部 |
| post | 传输资源,通常会造成对服务器资源的修改 |
| put | 更新资源 |
| pathc | 对put的补充,对已知资源部分更新 |
| delete | 删除资源 |
| options | 预检请求方法,列出请求资源支持的请求方法,用来跨域请求 |
| trace | 追踪请求/响应路径,用于测试或诊断 |
| conncet | 将连接改为管道方式用于代理服务器 |
https
https是超文本传输安全协议,即http + SSL/TLS, 可以理解为在http的基础上加了一层安全套接字协议
https优点
- 内容加密,中间无法查看原始内容
- 身份认证,保证用户访问正确,如访问百度,即使DNS被劫持到第三方站点,也会提醒用户没有访问百度服务,可能会被劫持
- 数据完整性,防止内容被第三方冒充或篡改
- 虽然不是绝对的安全,但是是现行框架下最安全的解决方案了,大大增加了中间人的攻击成本
https缺点
- 需要费用,功能越强大的证书费用越高
- 证书需要绑定IP, 不能再同一个ip上绑定多个域名
- htpts双方需要加解密,会耗费更多的服务器资源
- https握手更耗时
http和https区别
- http是明文传输,不安全的,https是加密传输,安全有保障
- http是无状态的,https是有状态的
- http默认端口是80,https默认端口是443
- http不需要认证证书(免费),https需要认证证书(收费,也有免费)
- 连接方式不同,http只需要三次握手进行连接,https中TLS1.2版本要7次,TLS1.3版本要6次
- http在OSI网络模型中是在应用层,而https的TLS是在传输层