HTTP协议
在浏览器输入栏输入URL网址后的流程
- DNS解析(UDP/DNS两种协议)
- 获取IP地址建立TCP连接(TCP协议)
- 发送HTTP报文(GET/POST/DELETE/UPDATE)(HTTP协议)
- 等待HTTP响应(200/404)
- 解析,渲染
HTTP和TCP
- HTTP依赖TCP
- HTTP使用的TCP作为自己的传输层
- 默认情况下HTTP使用TCP的80端口,HTTPS使用443端口
HTTP特性
特性1:文本协议
- 文本协议一般是由一串ACSII字符串组成的数据,这些字符包括数字,大小写字母,百分号,还有回车(\r),换行(\n)以及空格等等。
- 优点:方便阅读理解
- 缺点:传输效率和解码效率低。
特性2:无状态
- 协议对事物没有记忆能力
- 对一次请求URL没有上下文关系
- 每次请求都是独立的:本次请求跟上次请求没有关系
- 服务器不保存客户端状态
特性3:无连接
- 发送前不需要建立连接
- 形如UDP
常用的请求方法
- GET:用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器。
- POST:用于传输信息给服务器,主要功能与GET方法相似,但一般推荐使用POST方式。
- PUT:传输文件,报文主体中包含文件内容,保存到对应的URL位置。
- HEAD:获取报文首部,与GET方法类似,只是不返回报文主体,一般用于URL是否有效。
- DELETE:删除文件,与PUT方法相反,删除对应URL位置的文件。
- OPTIONS:查询相应的URL支持的HTTP方法。
GET与POST的区别
- get没有body体,当需要传递参数时参数会被拼接到URL中。
- get请求URL传参有长度限制,post请求没有长度限制。
- get请求参数只能是ASCLL码,所以中文需要URL编码,而POST请求传参没有这个限制,可以任意编码。
请求报文常用头部
头(header) | 说明 |
---|---|
User-Agent | 客户端的信息(浏览器名称等,比如区分手机和电脑) |
Accept | 客户能处理的页面类型,如text/html |
Accept-Charset | 客户能处理的页面字符集,如gb2312 |
Accept-Encoding | 能处理的编码方法,如gzip |
Accept-Language | 客户能处理的自然语言,如en,zh-cn |
Host | 服务器的DNS名称 |
Authorization | 认证 |
Cookie | 保存状态 |
Date | 时间 |
RANGE | 断点续传(迅雷等多线程分片下载的核心) |
Connection | 标识连接为长连接或则短连接 |
响应报文常用头部
头(header) | 说明 |
---|---|
Server | 服务器信息 |
Content-Encoding | 页面类型,如text/html |
Content-Type | 页面字符集,如gb2312 |
Content-Encoding | 编码方法,如gzip |
Content-Language | 自然语言类型,如en,zh-cn |
Last-Modified | 缓存时用到 |
Location | 重定向地址(302) |
Set-Cookie | 和cookie配合使用 |
WSSE(WS-Security)认证
认证流程:
- 客户端访问一个受WSSE认证保护的资源。
- 服务端返回401状态,要求客户端进行认证。
- 客户端将生成一个nonce值,并以该nonce值,密码,当前日时为基础,算出哈希值返回服务器。
HTTPS原理
HTTPS = HTTP+ssl/tls在http和socket之间构建一层安全socket层。
非对称加密
前提:公钥加密的报文可以利用私钥用于解密。
接收方:生成一对秘匙(公钥+私钥),并把公钥分发给发送方。
发送方:发送方利用公钥把信息加密,发送给接收方。
接收方:接收到加密信息,利用私钥解密。
CA证书
- 服务器把证书给客户端。
- 客户端利用第三方机构证书,校验服务器证书合法性,提取服务器公钥
- 客户端产生对称秘钥(利用服务器公钥加密后给服务器)
- 服务器利用对称秘钥加密传输数据
HTTPS网站需要向第三方申请证书
客户端需要安装第三方证书(证书中包含公钥)