HTTP协议
URI和URL
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源
URL,就是输入的网页地址,是uniform resource locator,统一资源定位符,它是一种具体的URI,URL表示互联网中资源的地点,能够被直接访问
urlencode和urldecode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现,必须先对这些字符进行转义
将这些特殊字符进行转义为其他字符叫做urlencode(编码)
将转义后的字符转回原来的字符叫做urldecode(解码)
HTTP协议
http是基于请求与响应的应用层协议,http数据传输都是明文传输
HTTP请求
请求报文:
请求方法
请求方法用来告知服务器客户端的意图,常见的有GET和POST方法
GET | POST |
---|---|
直接获取对应资源的信息 | 将数据提交给服务器 |
通过URL传参 | 通过正文传参 |
没有请求正文 | 请求报头比GET多了一个Content-Length来标识正文的长度,保证读完报文 |
发起请求后数据会显示到URL中,更不安全 |
相对而言 更私密,通过正文传参,并不会显示出来 |
GET提交的数据大小有限制 | 而正文传输数据大小无限制 |
其他方法:
客户端http版本
常见的有1.0,1.1
HTTP响应
响应报文:
状态码
状态码描述返回的请求结果
响应类别有以下五种:
常见状态码:
状态码 | 状态码描述 | 说明 |
---|---|---|
200 | OK | 服务器正常处理了客户端的请求 |
206 | Partial Content | 服务器成功执行了客户端的范围请求 |
301 | Moved Permanently | 资源永久重定向 |
302 | Found | 临时重定向 |
307 | Temporary Redirect | 临时重定向 |
400 | Bad Request | 请求报文存在语法错误 |
403 | Forbidden | 请求资源的访问被服务器拒绝 |
404 | Not Found | 无法找到请求的资源 |
500 | Internal Server Error | 服务器在执行请求时发生了错误 |
503 | Service Unavailable | 服务器暂时处于停机维护或者超负载运行 |
重定向状态码:
临时重定向与永久重定向的区别是:
影响客户端标签,决定客户端是否需要更新目标地址
如果是临时的每次都会先去原来的地址,如果是永久重定向那么会直接去重定向后的新地址,更新书签
307与302都是临时重定向,区别在于当响应返回时,307不会将POST方法改为GET方法再次请求
HTTP中常见Header
Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
User-Agent: 声明用户的操作系统和浏览器版本信息
referer: 当前页面是从哪个页面跳转过来的
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
HTTP的特点
①无状态
HTTP是无状态的, 这意味着服务器
不会在两个请求之间保留任何数据
不保存状态维护成本降低了,也更节约时间、空间,但是每次客户发起连接时由于不会保存之前的认证信息,都要重新认证登录,用户体验差,所以为了保持状态引入了Cookie技术,来管理状态
②持久连接节省通信量
http才出来时,http每发起一次http通信都要三次握手建立连接,四次挥手释放连接,不但增加了网络传输量容易造成拥塞,而且连接建立的成本较大
为了解决频繁地TCP连接问题,Http1.1和部分1.0提出了持久连接,
只要连接双方没有明确提出断开连接,那么就保持TCP连接状态
Cookie和Session
HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上
HTTP由于是无状态的,所以每次请求就必须重新输入账号密码认证
所以出现了Cookie,
通过Cookie技术能够保存每次的状态
由于直接使用Cookie来回传送的是账号密码那样的敏感信息,容易被窃取,所以后来出现了Session
HTTPS
HTTP存在以下不足:
1.通信使用明文,内容可能被窃听
2.不验证通信方的身份,因此有可能遭遇伪装
3.无法证明报文的完整性,有可能已经被篡改
为了解决这些问题,所以就诞生了HTTPS,HTTPS使用SSL安全协议来保障安全性
HTTPS=HTTP+加密+认证+完整性保护
加密
加密分为对称加密和非对称加密
加密跟解密都用同一个密钥的方式称为共享密钥加密,也叫作对称密钥加密
使用公开密钥加密,私有密钥进行解密的方式叫做公开密钥加密,也叫做非对称加密
如果使用对称加密的方式,必须要把密钥传输给对方,而如果被对方获取密钥,对方也能进行解密
如果使用非对称加密,虽然能够保证数据传输的安全,但是相对于对称加密处理速度更慢,效率更低
所以HTTPS使用的是混合加密的方式,具体如下:
证书验证
一般来说浏览器都内置了权威CA的根证书,客户端使用根证书的密钥对服务器发来的证书进行解密验证,若域名、有效期、签发机关等验证项符合则通过,否则认定证书无效,断开连接