作者:变优秀的小白
Github:关注YX-XiaoBai
爱好:Americano More Ice !
QQ学习交流群(new): 811792998
目录
http和https协议
http协议是什么
http
全称为Hyper Text Transfer Protocol
。它是从web
服务器传输HTML
(超文本标记语言)到本地游览器的传输协议
存在问题:
- 请求信息明文传输,容易被窃听截取。
- 数据的完整性未校验,容易被篡改
- 没有验证对方身份,存在冒充危险
http原理
http
是一个基于tcp/ip
来传输数据的协议,传输数据类型包括html
、image
等
http
大多数用于B/S
架构。游览器(相当于http客户端
)–>通过URL
–>访问http服务端
,也就是发送请求过程
举个访问www.baidu.com
例子
1. DNS域名解析为服务器IP
2. 发起TCP请求,完成3次握手(建立连接)
3. 客户端发送HTTP请求
4. 服务器响应,返回HTTP响应
5. 客户端将响应的HTML和资源渲染到前端给用户
http特点
B/S
模式- 简单快速: 向服务端请求服务时,只需传送请求方法和路径
- 灵活: http允许传输任意类型的数据对象(
COntent-Type
) - 无连接: 限制每次连接只处理一个请求。弥补不足,出现了记录http状态的技术(
Cookie
和Session
) - 无状态: 事务处理没有记忆,后续处理需传递前面的信息
URL和URI区别
http
使用URI
来建立连接和传输数据
URI
: 统一资源标识符,Uniform Resource Identifier
- 作用: 用于标识一个具体资源是什么
URL
: 统一资源定位符,Uniform Resource Location
- 作用: 用于定义一个具体资源在哪里
http报文组成
一个http
报文由一个请求和响应报文构成
请求报文
- 请求行: 包括请求
Method
、Url
、Protocol/Version
- 请求头: 包括
Content-Type
、Cookie
等等 - 请求正文: 如
Body
响应报文
- 状态行: 包括响应
Protocol/Version
、Status
(如200/304/404/500等状态🐴) - 响应头: 与请求头类似
- 响应正文: 请求后响应的内容
post和get区别
GET | POST | |
---|---|---|
参数 | URL中 | Body中 |
请求作用 | 一般用于获取资源 | 一般用于更新资源,改变服务器数据 |
最大长度 | 因为在URL中,所以有最大长度。大多数游览器限制为8KB | 默认下没有最大长度,但大多数游览器都会有最大长度 |
参数缓存 | 在参数无修改情况下(会缓存),以减少工作时间 | 几乎不会缓存Post参数(行业标准) |
服务器 | 不应该更改服务器,以发出相同的请求 | 可更改服务器,post不缓存且没有最大长度限制 |
响应状态码
当客户端访问一个网页时,游览器会向web server
发出请求,网页所以在的服务器返回一个包含http
状态码的信息头以响应游览器请求
状态码类别
1XX(信息响应)
: 服务器收到请求,等待请求者操作2XX(成功响应)
: 客户端请求成功收到,服务器处理3XX(重定向)
: 客户端进一步操作完成请求4XX(客户端错误)
: 请求端出现报错无法完成请求5XX(服务器错误)
: 服务端处理请求发生错误
常见状态码
- 信息响应
100 Continue
: 临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它101 Switching Protocol
: 是响应客户端的Upgrade
标头发送的,并且指示服务器也正在切换的协议102 Processing
: 表示服务器已收到并正在处理该请求,但没有响应可用103 Early Hints
: 主要用于与Link
链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。
- 成功响应
200 OK
: 请求成功201 Created
: 该请求已成功,并因此创建了一个新的资源202 Accepted
: 请求已经接收到,但还未响应,没有结果204 No Content
: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
- 重定向
300 Multiple Choice
: 被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息301 Moved Permanently
: 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一302 Found
: 请求的资源现在临时从不同的 URI 响应请求303 See Other
: 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源304 Not Modified
: 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码308 Permanent Redirect
: 这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI
- 客户端错误
400 Bad Request
: 语义有误,当前请求无法被服务器理解(不可重复提交); 或者请求参数有误401 Unauthorized
: 当前请求需要用户验证(即没有身份验证,如token丢失等)403 Forbidden
: 服务器已经理解请求,但是拒绝执行它(不可重复提交)404 Not Found
: 请求失败,请求所希望得到的资源未被在服务器上发现405 Method Not Allowed
: 请求行中指定的请求方法不能被用于请求相应的资源406 Not Acceptable
: 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体407 Proxy Authentication Required
: 与401响应类似,只不过客户端必须在代理服务器上进行身份验证408 Request Timeout
: 请求超时409 Conflict
: 由于和被请求的资源的当前状态之间存在冲突,请求无法完成426 Upgrade Required
: 服务器拒绝使用当前协议执行请求,但可能在客户机升级到其他协议后愿意这样做429 Too Many Requests
: 用户在给定的时间内发送了太多请求(“限制请求速率”)431 Request Header Fields Too Large
: 服务器不愿意处理请求,因为它的 请求头字段太大
- 服务端错误
500 Internal Server Error
: 服务器遇到了不知道如何处理的情况。501 Not Implemented
: 此请求方法不被服务器支持且无法被处理。(GET和HEAD是要求服务器支持的,不可能出现此错误代码)502 Bad Gateway
: 此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应503 Service Unavailable
: 服务器没有准备好处理请求(常见是服务器维护或炸了)504 Gateway Timeout
: 当服务器作为网关,不能及时得到响应时返回此错误代码505 HTTP Version Not Supported
: 服务器不支持请求中所使用的HTTP协议版本506 Variant Also Negotiates
: 服务器有一个内部配置错误:对请求的透明内容协商导致循环引用508 Loop Detected (WebDAV)
: 服务器在处理请求时检测到无限循环510 Not Extended
: 客户端需要对请求进一步扩展,服务器才能实现它。
什么是https
https
(HyperText Transfer Protocol over Secure Socket Layer
)即http+ssl/tls
,后面的ssl
是用于验证服务器的身份,并为游览器和服务器之间通信加密
SSL又是啥?
SSL
(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL
协议位于TCP/IP
协议与各种应用层协议之间,为数据通讯提供安全支持TLS
(Transport Layer Security,传输层安全):其前身是SSL
,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有TLS 1.0、TLS 1.1、TLS 1.2
三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3
改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2
https传输数据流程(认证过程)
- 首先客户端通过URL访问服务器建立SSL连接。
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- 服务器利用自己的私钥解密出会话密钥。
- 服务器利用会话密钥加密与客户端之间的通信。
https缺点
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- 申请SSL证书需要钱,功能越强大的证书费用越高。
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
http和https请求的区别
http | https | |
---|---|---|
数据传输 | 不安全 | 安全,HTTPS使用了SSL/TLS协议进行了加密处理 |
连接方式不同,默认端口 | 80 | 443 |
浏览器对https证书进行认证的目的
- 检验证书是否是信任的有效证书。游览器内置了信任的根证书,确保证书是信任的机构颁发;确保证书在有效期内
- 对方是不是上述证书的合法持有者。验证对方是否持有证书私钥