zoukankan      html  css  js  c++  java
  • JavaScript--浅谈Http与Tcp

    HTTP是一个客户端服务器端请求和应答的标准(TCP)。

    也就是说,TCP是实现,而HTTP是使用TCP的一种标准。

    Http发展历程:

    Http0.9:

    只支持get方法,服务器只能回应HTML格式的字符串,服务器发送完就关闭TCP连接。

    HTTP1.0:

    支持get,head,post方法,每个TCP连接只能发送一个请求,为了复用TCP请求,可以使用非标准的方法,connetction:keep-alive

    HTTP1.1:

    默认支持connetction:keep-alive,同一TCP连接中,如果有多个请求,服务器只能处理最先的请求,才会处理下一个请求,如果最先的请求比较耗时,后面的请求就会阻塞。

    HTTP2.0:

    复用TCP并且可以发送多个请求和回应,不用按照请求顺序进行处理。如果同一个TCP连接中有多个请求,服务器会将耗时比较多的请求,将处理好的部分发送,去处理下一个请求,处理完后再去处理耗时较多的。

    说完了HTTP,再说说TCP

    面试必备:

    三次握手和四次挥手

    三次握手(建立TCP连接):

    1.建立新连接,客户端发送一个包到服务器,等待服务器确定。

    2.服务器收到客户端的包,回应客户端这个包加上一个新的包。

    3.客户端收到服务器的2个包,向服务端发送2个包的加密(1个包),客户端与服务器进入连接成功的状态

    四次挥手(释放TCP连接):

    1.客户端发出释放请求(FIN)

    2.服务器收到客户端的释放请求(FIN),通知应用进程,进入半关闭状态,此时,服务器还是可以发送数据的,客户端还要接受,同时发送关闭确认请求(ACK),客户端收到服务器的确认请求(ACK)等待服务器发送最后的数据以及释放请求(FINI)

    3.服务器把最后的数据发送完后,向客户端发送释放请求(FIN)

    4.客户端收到服务器的释放请求(FIN),发送服务器确认请求(ACK),服务器收到确定关闭请求(ACK)后,关闭TCP,客户端等一段时间后关闭连接。

    为什么要四次挥手,而不是三次?

    答:根本原因是,一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续把没发完的数据发过来。

            举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。

  • 相关阅读:
    ubuntu正确输入用户名密码后重复登录界面
    Spring第一个程序
    winrar解压spring出现“路径和文件名总长度必须不能超过 260 个字符!”错误的解决方法
    Spring属性装配之属性类型是另外一个被装载的类
    classpath、path、JAVA_HOME的作用及JAVA环境变量配置
    ubuntu基本命令篇15系统管理time命令中Real,User,Sys概念
    基于linux使用mysql二进制包安装mysql5.5
    shell循环语法
    db笔记本
    shell function
  • 原文地址:https://www.cnblogs.com/zwhblog/p/9155999.html
Copyright © 2011-2022 走看看