Http用于客户端和服务器之间的通信,请求访问文本或图像资源的一端称为客户端,而提供资源的一方称为服务器端。在两台计算机之间使用 HTTP 协议通信时,在一条线路上必定有一端是客户端,另一端是服务器端
Http 协议规定,请求必须从客户端发出,最后服务器端响应该请求并返回。
1,请求方法,有 get ,post ,这两种最常见,还有 PUT ,DELETE 等
2,请求 Url:统一资源定位符。由 协议+主机+路径+参数构成
3,是协议名称和版本号,用来提示客户端使用的 HTTP 协议功能
1.0:发送请求,创建一次链接,获得一个资源,链接断开
1.1:发送请求,创建一次链接,获得多个资源,链接断开
4,报文头包含很多属性,格式为 属性名:属性值,服务端根据此获取客户端的嘻嘻
5,post 提交的数据
2,状态和描述码
3,响应头:由多个属性组成
4,响应体:即我们需要的数据
1,支持(C/S)客户端/服务器模型
2,简单快速,发起请求时,只需要传入强求方法和路径,常用的有 GET,POST ,PUT 等。
3,灵活,http 运行传输任意类型的数据对象,正在传输的类型又 Content-Type 加以标记,常见的取值如下:
Content-Type | 解释 |
---|---|
text/html | HTML格式 |
text/plain | 纯文本格式 |
text/xml | XML格式 |
image/gif | gif图片格式 |
image/jpeg | jpg图片格式 |
image/png | png图片格式 |
application/xhtml+xml | XHTML格式 |
application/xml | XML数据格式 |
application/atom+xml | Atom XML聚合格式 |
application/json | JSON数据格式 |
application/pdf | pdf格式 |
application/msword | Word文档格式 |
application/octet-stream | 二进制流数据(如常见的文件下载) |
application/x-www-form-urlencoded | 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) |
multipart/form-data | 在 Web 表单文件上传时使用 |
multipart/byteranges | 状态码 206(Partial Content,部分内容)响应报文包含了多个范 围的内容时使用 |
4,无连接
无连接的含义是限制每次连接只能处理一个请求,服务器处理完客户端的请求,然后响应,并受到应答之后就可以断开连接,这种方式可以节省传输时间。
5,无状态
HTTP 协议是无状态协议,无状态是指对事务处理没有记忆能力。坏处是,如果以后要用到就必须重新重新获取。好处是后续链接不需要提供之前提供的信息,响应比较快。为了解决 HTTP 的无状态特性,出现了 Cookie 和 Session 技术。
Cookie
HTTP 本身是没有状态的,所以就出现了Cookie,Cookie 是一小段的文本信息,key value 格式,客户端向服务器发起请求后,如果服务器需要记录该用户的状态,就会向客户端返回一个 Cookie,客户端会把这个 Cookie 保存起来,当再次请求时,需要带上Cookie提交给服务器,以此来辨认身份。
Session
这个不太了解,但是用过这个东西。咋获取验证码的时候,进行请求,服务器会返回一个 Session ,并且发送一个验证码。客户端将拿到的 Session 保存,并等待验证码。验证码到了后再次进行请求,在请求头中加入 Session进行请求。如果不加,就算验证码是对的,短信验证也没有任何作用。
状态码 | 解释 |
---|---|
200 | 客户端请求成功 |
204 | 无内容,服务器成功处理,但未返回内容 |
206 | 服务器完成部分 GET 请求,客户端进行了范围请求 |
301 | 永久重定向,请求的资源永久的搬到了其他位置 |
302 | 临时重定向 |
303 | 临时重定向,和 302 一样,303明确客户端应该使用Get 访问 |
307 | 临时重定向,和 302 一样,POST 不会变为 GET |
304 | 表示客户端发送附带的条件请求,条件不满足 |
400 | 客户端语法错误,服务器无法理解 |
403 | 服务器手动请求,拒绝提供服务 |
500 | 服务器发送不可预期的错误 |
1,建立 TCP/IP 连接,客户端与服务器通过Socket三次握手进行连接
2,客户端向服务器发起 HTTP 请求,
3,客户端发送请求头信息,请求内容,最后一行留白,标志请求完毕
4,服务器做出响应并返回HTTP响应,标识对客户端请求响应,例如:HTTP/1.1 200 ok
5,释放 TCP 连接
6,客户端解析响应体中的数据
TCP/IP 是传输层协议,主要解决数据在网络中如何传输。
HTTP 是应用层,主要解决如何包装数据,
表格来源于网络
三次握手:客户端给服务器发送数据之前,有三次握手,成功后才可以传输数据。
1,客户端先发送 SYN 码,客户端请求和服务端建立连接。
2,服务端接收到 SYN 码,在发送 SYN + ACK 码,我们可以建立连接
3,客户端接收到 ACK 码后,验证 ACK 是否正确,如果正确则建立数据连接,双方数据发送通道都将开启。
四次挥手:
1,当客户端无数据传输了,发送 FIN 码告诉服务器我发送完毕了
2,服务器收到后,返回给客户端 ACK 码,表示可以关闭数据通道了
3,服务器发送完毕后,发送一个 FIN 给客户端,表示数据发送完毕
4,客户端接收完毕后,通过发送 ACK 码,告诉服务器,数据接收完毕,你可以关闭
超文本传输协议,默认端口 443,HTTPS 有 SSL/TLS+HTTP 协议构建的可进行加密传输,身份认证的网络协议,比 HTTP 安全很多。
在 Android 9.0 后,google 禁用了 http 请求,相比于 http,他不在透明,但是也怎加了额外的操作,所以效率上会慢一点
SSL :指的是安全套解层
TLS:指的是安全层传输协议
他们的作用是对通信进行加密,从而建立安全的通信线路
对称加密
对称加密是指加密与解密使用同一个秘钥的加密算法。
非对称加密
非对称加密是两个秘钥,公钥和私钥,公钥相当于一把锁,而私钥相当于钥匙。这个锁可以任意的公布,如果有人要发消息,使用这把锁加密在发送。接收方用自己的私钥打开。问题:如何严责公钥是否是正真的公钥,可能在发送的过程中已经被篡改。
服务器在使用证书加密直接需要去证书颁发机构申请该服务器的证书,在 HTTPS 请求的过程中服务器端将会把证书发送给客户端,客户端进行验证,以此来确定服务器的身份。
1,客户端发起 HTTPS 请求,链接到服务器的 443 端口
2,服务器响应请求,并将证书发送到客户端
3,客户端使用机构认证的公钥认证证书,并重证书中取出 Service 端公钥
4,客户端 使用公钥加密一个随机秘钥,并传到 服务器
5,服务器使用 私钥解密出随机秘钥
6,通信双方使用随机秘钥为对称秘钥进行加密解密
1,http 是明文传输,https 是密稳传输
2,默认端口号不同,http 是 80,https 是 443
3,https 请求过程中需要 CA 证书验证身份以保证客户端请求到服务器返回的响应式来自服务器端,http 则不需要 CA 证书
4,https = http+ 加密+认证+完整性保护
5,https 的效率比较低,不如 http
PS 区别
1,http 是明文传输,https 是密稳传输
2,默认端口号不同,http 是 80,https 是 443
3,https 请求过程中需要 CA 证书验证身份以保证客户端请求到服务器返回的响应式来自服务器端,http 则不需要 CA 证书
4,https = http+ 加密+认证+完整性保护
5,https 的效率比较低,不如 http
如有问题,还请指出,谢谢!