网络资源
- uri(uniform resource identifier) 统一资源标识符。
- url(uniform resource location) 统一资源定位符,统指绝对路径。
- urn(uniform resource name) 统一资源名。
http
报文结构
- 第一部分简略信息,包含请求方法、url 和协议版本;或者协议版本和状态码
- 第二部分为请求首部 Header 或者响应首部 Header;
- 第三部分为内容主体
请求方法
状态码
- 200: 成功返回响应
- 301: 永久重定向, 客户端第一次访问此 url 时, 告知客户端以后直接访问新的 url, 该状态保存在浏览器缓存中
- 302: 临时重定向, 客户端每次访问此 url 时, 告知客户端重定向到新的 url , 后续访问依然访问当前的 url
- 400: 发送的请求错误, 请求格式错误,或者没有服务器要求的数据
- 401: 没有权限访问, 当前用户没有权限访问此资源
- 403: 请求被服务器禁止
- 404: 请求的 url 不存在, 一般是 url 出错
- 500: 服务器处理请求出现错误
- 501: 服务器超出能力之外的方法,例如:请求的方法服务器不支持
- 504: 来自网关或者代理服务器,请求资源服务器时超时
http 首部
- 通用首部
- 请求首部
- 响应首部
- 实体首部
长连接与短连接
- 长连接: 只需要建立一次 tcp 连接就能进行多次 http 通信
- 短连接: 每有一个http请求就要建立一次tcp连接
- http/1.1 开始默认是长连接的, 若要断开连接,首部为 Connection : close;
- 在 http/1.1 之前默认是短连接的, 若要使用长连接, 首部为 Connection : Keep-Alive
无状态协议
- http 是无状态协议, 它不对请求和响应之间的通信状态进行保存
cookie与session
- cookie
- 客户端第一次发送信息到服务器时, 服务器根据该客户端信息编码加密生成一个 cookie
- 服务端将此 cookie 发送给客户端, 客户端发送请求时带有此cookie,服务端就可以区分客户端
- session
- 客户端第一次发送信息到服务器时, 服务器为客户端创建一个session对象, 它包含了客户端的身份信息, 同时为session生成一个sessionId
- 服务端将sessionId传给客户端, 客户端发送请求时带此sessionId, 服务端就可以区分客户端
- 发送
- 服务端通过set-cookie 首部将cookie 和sessionId发送给客户端
- 客户端通过cookie首部将将cookie 和sessionId发送给服务端
https
http安全问题
- 使用明文通信,内容可能会被窃听
- 不验证通信方的身份,通信方的身份有可能遭遇伪装
- 无法证明报文的完整性,报文有可能遭篡改
通过 ssl(Secure Sockets Layer)/tls(Transport Layer Security) 的方式使 http 变成了安全的https
策略
- 数据加密
- 数字证书认证
- 通过 ssl/tls 报文摘要功能检验报文完整性
加密
- 对称加密:加密和解密使用同一密钥. 运算速度快, 但无法安全地将密钥传输给数据接收方.
- 非对称加密:加密和解密使用不同密钥. 公钥加密, 私钥解密, 安全但速度慢
- 两者结合: 使用非对称加密去加密对称加密的密钥
数字证书
数字证书认证机构 (CA, Certificate Authority) 是客户端和服务器双方都信任的第三方机构
- 服务器向机构申请数字证书, 机构对数据做数字签名, 然后将数据和数字签名打包在一起, 做成数字证书, 发送给服务端
- https通信时, 服务器把数字证书发给客户端, 客户端取得其中的数据和数字签名, 使用数字证书机构的公开密钥验证数据和数字签名是否合法
完整性验证: 加密 + 摘要检验 + 认证
http与https
- https: 使用价格昂贵; 速度稍慢;默认端口为 443; 通信安全。
- http: 免费; 速度稍快; 默认端口为80; 通信不安全