http协议
无连接,无状态协议。
无连接
- 每一个访问都是无连接,服务器挨个处理访问队列里的访问,处理完一个就关闭连接,这事儿就完了,然后处理下一个新的
- 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接
无状态:是指服务端对于客户端每次发送的请求都认为它是一个新的请求,上一次会话和下一次会话没有联系
http报文结构
请求消息:请求行(request line)、请求头部(header)、空行、请求数据
响应消息:状态行、消息报头、空行和响应正文。
header字段:通用首部、请求首部、响应首部和实体首部。
请求
Accept:text/html, application/xml | 可处理的媒体类型 |
Accept-encoding: gzip, deflate | 接收压缩编码方法 |
Accept-Language: en-US,en;zh-CN | 接收语言 |
User-agent:Mozilla/5.0 | 浏览器信息 |
实体
Allow | 支持的http方法 |
Content-Encoding | 数据压缩编码方法 |
Content-Language | 数据语言 |
Content-Length | 数据大小 |
Content-type:text/html; charset=UTF-8 | 数据的类型 |
请求消息如下:
响应消息如下:
http常见状态码
- 1xx:提示信息,请求已接收,继续处理
- 2xx:成功,请求被成功接收,解析
- 3xx:重定向,url资源临时或永久移动的另一个地方
- 4xx:客户端错误,请求信息有误
- 5xx:服务端错误,服务器不能完成合法请求
200 OK:客户端请求成功。
301:永久重定向,表示资源已经永久移动到另一个位置。location中包含现在的URL。
302:临时重定向,表示资源临时移动到了另一个位置。
304 Not Modified:表示客户端可以使用以前请求的结果,不需要再次请求。此特性可以节省服务器流量,还可以加速客户端访问。
400:请求报文语法错误,无法识别
404 Not Found:请求资源不存在,错误的URL。
500 Internal Server Error:服务器发生的错误,一般是代码的BUG所导致的。
请求方法
- GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
- POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
- PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
- HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
- DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
- OPTIONS:查询相应URI支持的HTTP方法。
URI, URL, URN的定义
URI: Uniform Resource Identifier, 统一资源标识符。用来唯一标识资源,是一种语义上的抽象概念。
URL: Uniform Resource Locator, 统一资源定位符。用来定位唯一的资源, 必须提供足够的定位信息。常用的URL格式如下:协议类型://服务器地址[:端口号]/路径/文件名[参数=值]
URN: Uniform Resource Name, 统一资源名称。定义了资源的身份(命名)。
简单比喻 - URI唯一标识一个人(例如身份证), URL定义了如何访问到这个人(例如家庭地址),URN用名字标识一个人(假设所有人名字都不一样的情况下)
URI和URL的区别
URI 是用来唯一标识资源, URL 提供资源的识别方法并用着各种方法定位资源。
由于互联网上每个文件都有唯一的URL, 所以URL是一种具体的URI, 可以说URL是URI的一种实现方式。
URI和URL都定义了是什么资源(唯一标识),但URL还定义了该如何访问或定位该资源。
https协议
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(SecureSocket Layer)和 TLS(Transport Layer Security)协议代替而已。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL和 TCP 通信了。
https协议特点
- 内容加密:所有信息都是加密传播,第三方无法窃听。
- 数据完整性:具有校验机制,一旦被篡改,通信双方会立刻发现。
- 身份认证:配备身份证书,防止身份被冒充。
SSL/TLS协议
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。
非对称加密算法(也称为公钥加密)需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。在密钥对中,其中一个密钥是对外公开的,所有人都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
数字证书:证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。
HTTPS采用的加密方式,在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥(私钥)加密方式。
SSL、TLS的握手过程
- 客户端发送随机数x
- 服务端发送数字证书、随机数y
- 客户端发送公钥加密的随机数z
- 服务端接收随机数z
握手完成客户端、服务端可以使用x,y,z三个随机数生成私钥,开始使用对称加密进行通信。