网络HTTP/HTTPS TCP/IP详解

作者: 237a476a5ad7 | 来源:发表于2019-04-24 14:44 被阅读7次

    本文分别从请求和响应报文,http/https,tcp/ip三部分讲解,在最后还有不同http版本协议的区别。

    网络HTTP/HTTPS TCP/IP详解

    请求和响应报文讲解

    1.Request组成

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

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

    请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。

    Get请求例子

    GET /562f25980001b1b106000338.jp HTTP/1.1
    Host    img.mukewang.com
    User-Agent  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept  image/webp,image/*,*/*;q=0.8
    Referer http://www.imooc.com/
    Accept-Encoding gzip, deflate, sdch
    Accept-Language zh-CN,zh;q=0.8

    第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本. GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

    第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息 从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

    第三部分:空行,请求头部后面的空行是必须的 即使第四部分的请求数据为空,也必须有空行。

    第四部分:请求数据也叫主体,可以添加任意的其他数据。 这个例子的请求数据为空。

    POST请求例子

    POST / HTTP1.1
    Host:www.wrox.com
    User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
    Content-Type:application/x-www-form-urlencoded
    Content-Length:40
    Connection: Keep-Alive
    name=Professional%20Ajax&publisher=Wiley

    第一部分:请求行,第一行明了是post请求,以及http1.1版本。

    第二部分:请求头部,第二行至第六行。

    第三部分:空行,第七行的空行。

    第四部分:请求数据,第八行。

    Connection: keep-alive  保持长连接

    2.Respone组成

    一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

    网络HTTP/HTTPS TCP/IP详解

    第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

    第二部分:消息报头,用来说明客户端用的一些附加信息。第二行和第三行为消息报头, Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

    第三部分:空行,消息报头后面*的空行是必须的

    第四部分:响应正文,服务器返回给客户端的文本信息。

    空行后面的html部分为响应正文

    3.缓存机制:

    首先看缓存有没到过期时间Expires/Cache-Control,如果没有过期就用本地缓存。如果缓存时间过期了,还要看ETag和If-None-Match在服务器查看内容是否被修改,出现200和304两种情况,如果缓存时间过期了,还没有ETag,那就查看Last-Modified和If-Modified-Since的时间比,来查看内容是否被修改,出现200和304两种情况。

    Expires:服务端返回的缓存到期时间,1.1中不用了,用Cache-Control

    Cache-Control:no-cache采用对比缓存来验证数据,即当缓存时间已过期。maxage=xxx,缓存xxx秒失效。no-store所有内容都不缓存。private客户端缓存。public客户端和服务器都可以缓存。

    ETag: "5694c7ef-24dc" 当客户端发送第一次请求时,服务端会返回当前资源的标识码

    If-None-Match:"5694c7ef-24dc" 客户端再次发送,会在header里携带上次服务端返回的资源标识码。服务端然后查看当前的资源的标识码有无改变

    Last-Modified:当客户端发送第一次请求时,服务端返回资源上次修改的时间

    If-Modified-Since:客户端再次发送,会在header里携带If-Modified-Since。将上次服务端返回的资源时间上传给服务端。然后服务端根据传进来的时间看本地缓存是否需要改变。

    网络HTTP/HTTPS TCP/IP详解


    http/https协议

    如果URL的协议是HTTP,则客户端会打开一条到服务端端口80(默认)的连接,并向其发送老的HTTP请求。 如果URL的协议是HTTPS,则客户端会打开一条到服务端端口443(默认)的连接,然后与服务器握手,以二进制格式与服务器交换一些SSL的安全参数,附上加密的 HTTP请求。

    HTTP/HTTPS的区别

    HTTP是超文本传输协议。就是两机器之间传输信息的协议。在信息的传输过程中,HTTP是没有加密的,而HTTPS是经过加密的。HTTPS的加密又分为对称加密和非对称加密,对称加密的意思是发送方通过公钥进行信息的加密,接收方也通过同一个公钥进行解密。非对称加密发送方使用公钥加密,接收方使用私钥解密。HTTPS是CA证书的,CA证书就包含了公钥,数字签名Hash值,签名Hash算法。

    SSL握手

    1.A随机生成一个数如1,并把自己支持的SSL版本号和加密算法告诉B

    2.B确定一下双方的加密算法,并随机生成一个数如2。把CA证书发给A

    3.A得到CA证书后,通过CS证书的公钥去解密CS证书的Hash值,并生成Hash-a值。通过签名Hash算法生成一个Hash-b值。如果两值相等,则可以信任。并随机生成一个数如3,通过公钥加你3,并发给B。

    4.B通过私钥解密后,得到随机数3

    5.最后A.B都有随机数1.2.3,双方通过这三个随机数生成一个对话密钥。

    6.A告诉B用对话密钥,并结束握手

    7.B告诉A用对话密钥,并结束握手

    8.SSL安全通道

    Https 请求慢的解决办法:

    1.不要通过dns解析,直接访问ip

    2.解决连接无法复用


    tcp/ip

    ip就像门牌,可以知道是哪个发送方给哪个接收方发送信息。tcp就像房号,可以知道这个消息是从哪栋楼里的哪间房间发送信息,和哪栋楼里的哪间房间接收信息,保证连接的可靠,包括防丢,防错。

    SYN:在建立tcp连接时,SYN=1,ACK=0:表示请求报文,若对方同意后,会在响应报文返回SYN=1,ACK=1。

    ACK:tcp连接建立后,ACK必须等于1

    FIN:挥手,FIN=1时说明此报文段的发送方的数据已经发送完毕,并要求释放连接。

    tcp连接的三次握手和四次分手

    网络HTTP/HTTPS TCP/IP详解

    三次握手:

    1.客户端发送一个SYN报文给你,seq=x,此时SYN=1

    2.服务器接收到请求报文,为了说明我接收到你了传的数据x,服务器的响应报文中 SYN seq=y ACK=x+1

    3.客户端为了说明我接收到了数据y,返回ACK=y+1

    四次分手:

    1.主机1发送一个FIN报文给你,seq=x+2,给谁?ACK=y+1

    2.主机2为了说明接收到了数据x+2,返回一个ACK=x+3

    3.既然是分手,主机2也返回一个分手信息给你,FIN seq=y+1

    4.主机为了说明接收到数据y+1,也发送一个ACK=y+2

    长连接是指的TCP连接,也就是说复用的是TCP连接。即长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。

    此外,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。

    socket概念:套接字,是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口

    socket连接:

    网络HTTP/HTTPS TCP/IP详解

    socket断线:客户端会给服务端发送一个fin包,服务端收到fin包后才会知道连接断开。客户端会每隔一段时间给服务器发送数据包,保持连接的建立。服务器一段时间后没收到客服端发来的数据就会断开连接。

    IP

    网络HTTP/HTTPS TCP/IP详解

    协议版本的不同 1.0/1.1/2.0

    1.缓存处理:1.1比1.0多更多的缓存处理策略

    2.带宽优化:1.0不能断点续传,1.1可以,在请求头加入range头域,请求吗码206

    3.错误通知:1.1比1.0多通知码

    4.host头处理:1.0中只能绑定一个物理服务器的ip,1.1支持hiost头域,支持一个物理服务器有多个虚拟主机

    5.长连接:1.1支持长连接和请求流水线处理,一个tcp可以支持多个http请求和响应,减少连接的关闭和创建。Connection: keep-alive

    6.2.0与1的区别:以二进制来传输而不是文本。多个request可以混杂在一起。减少header的重复传输。

    相关文章

      网友评论

        本文标题:网络HTTP/HTTPS TCP/IP详解

        本文链接:https://www.haomeiwen.com/subject/nxlygqtx.html