什么是http 和 https
http
超文本传输协议(Hyper Text Transfer Protocol)是一个简单的请求-响应协议,它通常运行在TCP之上。它制定了客服端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个MIME的格式,
https
以安全为目标的HTTP通道,简单讲是HTTP安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因为加密的详细内通需要SSL
HTTPS协议主要作用可以分为两种,
- 一种是一个信息安全通道,来保证数据传输的安全
- 另一种就是确认网站的真实性
HTTP的特点和缺点
特点:无连接、无状态、灵活、简单快速
- 无连接:每次请求都要连接一次,请求结束后就会断掉,不会保持连接
- 无状态:每次请求都是独立的,请求结果不会记录联机的任何信息,减少了网络开销(是优点又是缺点)
- 灵活:通过http协议中头部的
Content-Type标记,可以传输任何数据类型的数据对象(文本、图片、视频等) - 简单快速:发送请求访问某个资源时。只需要传送请求方法URL就可以,使用简单,正由于http简单,是的http服务器的程序规模小,因为通信速度非常快
缺点: 无状态、不安全、明文传输、队头阻塞
- 无状态: 请求不会记录任何连接信息,没有记忆,就无法区分多个请求发起者身份是不是同一个客服端,意味着后续处理前面的消息,则它必须重传,这样可能导致每次连接传送的数据量增大
- 不安全:明文传输可能被窃听不安全,缺少身份验证也可能遭遇伪装,还有缺少豹纹完整性验证可能遭到篡改。
- 明文传输:报文(header部分)使用的是明文,直接将信息暴露给了外界,WIFI陷阱就是复用明文传输的特点,诱导你连上热点,然后疯狂抓取你的流量,从而拿到你的敏感信息。
- 队头阻塞:开启长连接,只建立一个TCP连接,同一时刻只能处理一个请求,那么当请求耗时过长,其他请求就只能阻塞状态。
HTTP报文组成部分
http报文:请求报文 + 响应报文
请求报文:请求行、请求头、空行、请求体
响应报文:状态行、响应头、空行、响应体
- 请求行:包含http方法,请求地址,http协议以及版本。
- 请求头/响应头:key: value来告诉服务端我要那些内容,要注意什么类型等
- 空行:用来区分首部和实体,因为请求头都是key: value的格式,当解析遇到空行是,服务端就知道下一个不再是请求头部分,就该当作请求体来解析了。
- 请求体:请求的参数
- 状态行:包含http协议及版本、数字状态码、状态码英文名称
- 响应体:服务端返回的数据
HTTP请求方法(9种)
HTTP1.0: GET、POST、HEAD
HTTP1.1: PUT、PATCH、DELETE、OPTIONS、TRACE、CONNECT
| 方法 | 描述 |
|---|---|
| GET | 获取资源 |
| POST | 传输资源,通常会造成服务器资源的修改 |
| HEAD | 获取报文首部 |
| PUT | 更新资源 |
| PATCH | 对PUT的补充,对已知资源部分更新 |
| DELETE | 删除资源 |
| OPTIONS | 列出请求资源支持的请求方法,用来跨域请求 |
| TRACE | 追踪请求/响应路径,用于测试或诊断 |
| CONNECT | 将连接改为管道方式用于代理服务器 |
常见HTTP状态码
1xx:指示信息--- 表示请求已接受,继续处理
2xx:成功 --- 表示请求已被成功接收
3xx:重定向 --- 表示要完成请求必须进行一步操作
4xx:客服端错误 --- 表示请求有语法错误或请求无法实现
5xx:服务端错误 --- 表示服务端为能实现合法的请求
常见状态码
| 状态码 | 描述 |
|---|---|
| 200 | 请求成功 |
| 206 | 已完成指定范围的请求(带Range头的GET请求),场景如video,audio播放文件较大,文件分片时 |
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 304 | 请求资源未修改,可以使用缓存的资源,不用在服务器取 |
| 400 | 请求语法错误 |
| 401 | 没有访问权限 |
| 403 | 服务器拒绝执行请求,场景不允许直接访问,只能通过服务器访问时 |
| 404 | 请求资源不存在 |
| 500 | 服务器内部错误,无法完成请求 |
| 503 | 请求未完成,因服务器过载、宕机或维护等 |
http和https的区别
- https 协议需要用到CA证书,一般免费证书很少,需要交费
- http协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都是经过加密的
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题