HTTP简单总结

OSI模型和TCP/IP模型

OSI模型

客户端访问服务器资源协议概述
客户端访问服务器资源到底经历了什么协议,首先给大家先看一个概述图

服务器资源请求概述图

客户端和服务器端的通信连接
在客户端和服务器端的正式通信之前,需要先建立连接。
连接主要是用到了TCP的三次握手来建立连接。

TCP的三次握手:

第一次握手:客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0

第二次握手:服务器由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0(随机),将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1 = 0+1=1

第三次握手:客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,服务器再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。客户端收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。

通俗来讲就是:
第一次握手:客户端发送请求给服务器端
第二次握手:服务器端连接客户端
第三次握手:客户端连接服务器端
HTTP协议用于客户端和服务器端之间的通信
在实际情况下,服务器和客户端的角色是可以互换的,但,在确定的一条通信线路上,服务器和客户端的角色是确定了的。
利用HTTP协议可以明确的区分哪端是客户端,哪端是服务器端。
HTTP是一种不保存状态的协议
在实际的HTTP通信情况下,HTTP是不会记录保存之前的通信信息(减少CPU的和内存资源的消耗),
但是在实际情况下,我们的很多系统登录需要确定用户是否登录系统了。
所以,为了解决这个缺陷,引入了cookie技术。
cookie的应用:

1.Cookie技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态
2.Cookie 会根据从服务器端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie。
3.当客户端再次往服务器发送请求时,客户端会自动在请求报文中加入Cookie值后再发送
4.服务器发现客户端发过来的Cookie后,会去检查究竟是从哪个客户端发来的请求,对比服务器上的记录,得到之前的状态信息

 现在 服务器和客户端的通信连接成功了。
 当客户端发送请求到服务器时,服务器会根据实际情况,给客户端返回HTTP状态码
HTTP状态码
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

1、2XX表示成功
1.1 200 OK(表示从客户端发来的请求在服务器端被正常处理了)
1.2 204 No content(表示服务器接收的请求已成功处理,但在返回的响应报文中,不含实体的主体部分)
1.3 206 Partial Content(表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求)
2、3XX 重定向
2.1 301 Moved Permanently(永久重定向,表示请求的资源已被分配了新的URI,以后应使用现在新的URI来请求资源)
2.2 302 Found(临时重定向,表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问)
2.3 303 See Other(表示请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源,和302的区别就在于要求用GET进行请求)
2.4 304 Not Modified(表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况)
2.5 307 Temporary Redirect(表示临时重定向,和302有相同的含义,302的标准是禁止将post转换成GET,但大家都没遵守,但是307会遵照浏览器标准,不会从POST变成GET)
3、4XX 客户端错误
3.1 400 Bad Request(表明客户端请求的报文中存在语法错误)
3.2 401 Unauthorized(表明客户端发送的请求有需要通过HTTP认证的认证信息,另外若之前已进行过一次请求,则表示用户认证失败)
3.3 403 Forbidden(表示客户端对请求资源的访问被服务器拒绝了)
3.4 404 Not Found(表示客户端请求的资源在服务器上没有找到)
4、 5XX 服务器错误
4.1 501 Internal Server Error(表示服务器在执行请求时发生了错误,也有可能是Web 应用存在的bug或某些临时的故障)
4.2 503 Service Unavailable(表示服务器暂时处于超负载或正在进行停机维护)

客户端和服务器端的通信连接断开

HTTP通信的连接主要是依靠TCP,http通信断开主要是TCP的四次挥手。TCP的同学连接和断开都是客户端先主动的
TCP四次挥手:
第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。

第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。

第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。

第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。

第一次挥手:客户端发送关闭连接请求给服务器端,我这边没事了,你那边还有事吗?
第二次挥手:服务器端发送确认消息给客户端,表示我收到客户端请求了
第三次挥手:服务器端断开连接
第四次挥手:客户端收到服务器端的确认消息信号后,发送一个确认消息给客户端,表示收到服务器的确认消息

以上就是HTTP通信的过程
下面我将说说HTTPS


为什么会考虑到HTTPS,因为HTTP存在不足,比如:
1、通信使用明文(不加密),内容可能会被窃听
2、不验证通信方的身份,有可能遭到伪装
3、无法验证报文的完整性,有可能遭到篡改

HTTPS = HTTP+SSL(安全套接层,主要负责安全加密)

HTTPS = HTTP + 加密 + 认证 + 完整性保护
加密

主要由两种:共享密钥加密和公开密钥加密

  • 共享密钥加密:
    公钥和私钥是一样的,当服务器端将公钥传送给客户端时,第三方可以截取到公钥,仍然可以破译密文

  • 公开密钥加密:
    公钥和私钥不同,因此,公钥可以发给任意人。但是公开密钥加密效率相对共享密钥加密低

因此,HTTPS将两者结合
使用公开密钥加密将共享密钥加密的公钥发送给客户端。这样可以避免共享密钥的公钥被第三方窃取。但是仍然存在问题,当第三方将公开密钥加密的公钥替换,整个内容替换,那么,客户端收到的是新的公开密钥,仍然存在问题。因此,考虑到了证书。

公钥和私钥大体而言可以说是一种参数,是加密算法和解密算法的参数
证书
  1. 首先服务器的运营人员会向数字证书认证机构提出公开密钥的申请,数字证书认证机构在辨明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后,绑定在一起。
  2. 服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也称为数字证书或证书。
  3. 客户端收到证书后,可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,可以说明:认证服务器的公开密钥的是真实有效的数字证书认证机构,服务器的公开密钥是值得信赖的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值