全面了解HTTP协议

2020-03-10  本文已影响0人  angeliur
HTTP协议简介

1.协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规则或规定

2.HTTP协议:超文本传输协议(HTTP)是一种传输协议,它允许将超文本标记语言(HTML)文档从web服务器传送到客户端的浏览器,HTTP协议处于计算机网络中的应用层。

URI和URL的区别

URI (uniform resource identifier) : 统一资源标识符,用来唯一的标识一个资源

URI的组成部分

例如:file://a:1234/b/c/d.txt 使用ftp协议表示的资源目标是在a主机下的1234端口的b目录下的c目录的d.txt文件,file是访问资源的命名机制,a:1234是主机名,b/c/d.txt是路径

URL (uniform resource locator) : 统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源

URL的组成部分

例如:http://www.baidu.com

HTTP协议的特点
Http1.1和Http1.0及2.0的区别

HTTP1.1与1.0的区别

HTTP1.1与HTTP1.0存在的问题

HTTP1.1与HTTP2.0的区别

Http的request和response的协议组成

请求消息包括请求行(request line)、请求头部(header)、空行和请求数据四个部分组成

请求行由请求方法、URL字段和HTTP协议的版本组成,格式如下:Method Request-URI HTTP-Version CRLF

其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

HTTP请求方法有8种,分别是GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS。对于移动开发最常用的就是GET和POST了。

请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合,与请求数据相关的最常用的请求报头是Content-Type和Content-Length。

HTTP 的响应报文由状态行、响应报头、空行、响应正文组成。

状态行格式如下所示:HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态码;Reason-
Phrase表示状态码的文本描述。状态码由3位数字组成,第一个数字定义了响应的类别,且有以下5种可能取值。
• 100~199:指示信息,收到请求,需要请求者继续执行操作。
• 200~299:请求成功,请求已被成功接收并处理。
• 300~399:重定向,要完成请求必须进行更进一步的操作。
• 400~499:客户端错误,请求有语法错误或请求无法实现。
• 500~599:服务器错误,服务器不能实现合法的请求。
常见的状态码如下:
• 200 OK:客户端请求成功。
• 400 Bad Request:客户端请求有语法错误,服务器无法理解。
• 401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用。
• 403 Forbidden:服务器收到请求,但是拒绝提供服务。
• 500 Internal Server Error:服务器内部错误,无法完成请求。
• 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

消息报头

消息报头分为通用报头、请求报头、响应报头、实体报头等。消息报头由键值对组成,每行一对,关
键字和值用英文冒号“:”分隔。

1.通用报头:它既可以出现在请求报头,也可以出现在响应报头中,如下所示
• Date:表示消息产生的日期和时间。
• Connection:允许发送指定连接的选项。例如指定连接是连续的;或者指定“close”选项,通知服务
器,在响应完成后,关闭连接。
• Cache-Control:用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出
现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)。

2.请求报头:通知服务器关于客户端请求的信息。典型的请求报头如下所示
• Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
• User-Agent:发送请求的浏览器类型、操作系统等信息。
• Accept:客户端可识别的内容类型列表,用于指定客户端接收哪些类型的信息。
• Accept-Encoding:客户端可识别的数据编码。
• Accept-Language:表示浏览器所支持的语言类型。
• Connection:允许客户端和服务器指定与请求/响应连接有关的选项。例如,这时为Keep-Alive则表示
保持连接。
• Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。

3.响应报头:用于服务器传递自身信息的响应。常见的响应报头如下所示 • Location:用于重定向接收者到一个新的位置,常用在更换域名的时候。
• Server:包含服务器用来处理请求的系统信息,与User-Agent请求报头是相对应的。

4.实体报头:用来定义被传送资源的信息,其既可用于请求也可用于响应。请求和响应消息都可以传送一
个实体。常见的实体报头如下所示
• Content-Type:发送给接收者的实体正文的媒体类型。
• Content-Lenght:实体正文的长度。
• Content-Language:描述资源所用的自然语言。
• Content-Encoding:实体报头被用作媒体类型的修饰符。它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
• Last-Modified:实体报头用于指示资源的最后修改日期和时间。
• Expires:实体报头给出响应过期的日期和时间。

get/post方法的区别

get是获取资源,post是提供更新服务器上的资源

get是通过Request.QueryString方式来获得变量值,post是通过Request.Form来获取变量值

Cookie和Session
HTTPS

HTTPS并不是一个单独的协议,而是在加密连接(SSL/TLS)上的常规HTTP协议。通过在TCP和HTTP之间加入TLS (Transport Layer Security) 来加密。SSL协议,是一种安全传输协议,TLS 是 SSL V3.0升级版

Https加密原理

加密算法的类型基本上分为了两种:

相比较对称加密而言,非对称加密安全性更高,但是加解密耗费的时间更长,速度慢。HTTPS = HTTP + SSL,HTTPS 的加密就是在 SSL 中完成的。HTTPS采用的是对称加密和非对称加密的结合的方式保证安全,为了保证密钥的安全,还引入了数字签名和数字证书。

数字签名:用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过,是非对称加密的一种应用场景。不过它是反过来用私钥来加密,通过与之配对的公钥来解密。

数字签名的过程:

1.服务端把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥加密之后就生成签名,服务器把签名连同报文一起发送给客户端。

2.客户端接收到数据后,把签名提取出来用公钥解密,如果能正常解密出来Digest2,那么就能确认是对方发的。

3.客户端把报文Text提取出来做同样的Hash处理,得到的摘要信息Digest1,再与之前解密出来的Digest2对比,如果两者相同表明内容没有被篡改过。

数字证书:简称CA,它由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的。数字证书主要是保证你使用的公钥是真实服务器发送给你的。

https://juejin.im/post/5b48b0d7e51d4519962ea383#heading-23

HTTPS加密原理详解可以看这:https://blog.csdn.net/guolin_blog/article/details/104546558

网络分层

1.物理层
该层负责比特流在节点间的传输,即负责物理传输。该层的协议既与链路有关,也与传输介质有关。
其通俗来讲就是把计算机连接起来的物理手段。
2.数据链路层
该层控制网络层与物理层之间的通信,其主要功能是如何在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传送数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。
3.网络层
该层决定如何将数据从发送方路由到接收方。网络层通过综合考虑发送优先权、网络拥塞程度、服务
质量以及可选路由的花费来决定从一个网络中的节点 A 到另一个网络中节点 B 的最佳路径。
4.传输层
该层为两台主机上的应用程序提供端到端的通信。相比之下,网络层的功能是建立主机到主机的通信。传输层有两个传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。其中,TCP是一个可靠的面向连接的协议,UDP是不可靠的或者说无连接的协议。
5.应用层
应用程序收到传输层的数据后,接下来就要进行解读。解读必须事先规定好格式,而应用层就是规定
应用程序的数据格式的。它的主要协议有HTTP、FTP、Telnet、SMTP、POP3等。

TCP三次握手四次挥手

相关报文段说明

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finish)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

TCP三次握手的过程如下。

第一次握手:建立连接。客户端发送连接请求报文段,将 SYN 设置为 1、Sequence Number(seq)为
x;接下来客户端进入SYN_SENT状态,等待服务端的确认。
第二次握手:服务器收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置Acknowledgment
Number(ACK)为 x+1(seq+1);同时自己还要发送 SYN 请求信息,将SYN设置为1、seq为y。服务端将上述所有信息放到SYN+ACK报文段中,一并发送给客户端,此时服务端进入SYN_RCVD状态。
第三次握手:客户端收到服务端的SYN+ACK报文段;然后将ACK设置为y+1,向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED (TCP连接成功)状态,完成TCP的
三次握手。
当客户端和服务端通过三次握手建立了TCP连接以后,当数据传送完毕,断开连接时就需要进行TCP的
四次挥手。

四次挥手的过程

第一次挥手:客户端设置seq和ACK,向服务端发送一个FIN报文段。此时,客户端进入FIN_WAIT_1
状态,表示客户端没有数据要发送给服务端了。
第二次挥手:服务端收到了客户端发送的FIN报文段,向客户端回了一个ACK报文段。
第三次挥手:服务端向客户端发送 FIN 报文段,请求关闭连接,同时服务端进入LAST_ACK状态。
第四次挥手:客户端收到服务端发送的FIN报文段,向服务端发送ACK报文段,然后客户端进入TIME_WAIT状态。服务端收到客户端的ACK报文段以后,就关闭连接。此时,客户端等待2MSL(最大报
文段生存时间)后依然没有收到回复,则说明服务端已正常关闭,这样客户端也可以关闭连接了。

TCP和UDP的区别

1、基于连接与无连接

2、对系统资源的要求(TCP较多,UDP少)

3、UDP程序结构较简单

4、流模式与数据报模式

5、TCP保证数据正确性,UDP可能丢包

6、TCP保证数据顺序,UDP不保证

如何设计在 UDP 上层保证 UDP 的可靠性传输

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照TCP可靠性传输的方式。如不考虑拥塞处理,可靠UDP的简单设计如下:

具体过程即是:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。

目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT

1、RUDP(Reliable User Datagram Protocol)

RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等。

2、RTP(Real Time Protocol)

RTP为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。

3、UDT(UDP-based Data Transfer Protocol)

UDT的主要目的是支持高速广域网上的海量数据传输。

关于RUDP、RTP、UDT的更多介绍请查看此处

上一篇 下一篇

猜你喜欢

热点阅读