Http简介超文本传输??协议(HTTP,HyperTextTransferProtocol)是Internet上使用最广泛的网络协议。所有WWW文档都必须符合此标准。HTTP最初旨在提供一种发布和接收HTML页面的方式。1960年,美国人泰德·尼尔森构想出一种用计算机处理文本信息的方法,并称之为超文本(hypertext),成为HTTP超文本传输??协议标准体系结构发展的基础。以上不是本文的重点。关于http更详细的介绍请到www.baidu.comhttp是一种网络协议,是一种无状态的超文本协议,是一种基于Tcp/Ip协议的应用层协议。我要IP当用户请求域名资源时,比如浏览器输入http://www.qq.com,浏览器会先根据输入的域名查询IP地址。去哪里检查?这里需要介绍一下DNS的概念,可以看成是域名映射到IP的账本。当客户端发送DNS请求时,首先本地DNS服务器会收到请求,会检查本地缓存中是否存在当前域名与IP的映射关系,如果存在则直接返回IP信息,如果没有,就会去问其他的DNS服务器,这里简单说一下DNS服务器在网络上的结构,DNS服务器在网络上是一个树状结构,有一个根服务器,根的子节点server为一级域名服务器(如.com、.cn),一级域名服务器的子节点也称为权威(authority)DNS服务器。当本地DNS服务器没有相关查询信息时,会按照上面树的顺序查询域名和IP的对应关系,找到后缓存在本地DNS中。这个过程的最终结果就是获取到相关域名对应的IP地址。如果客户端输入的是IP地址信息,则省略上述查询IP的过程。访问Internet上的任何网站基本上都是基于IP寻址。建立Tcp连接当发送http请求并获取到正确的服务器IP地址时,此时就可以建立连接了。有一点需要明确:http协议是基于Tcp协议的。所以第一步是建立一个Tcp连接。这个过程就是很多网络文章中提到的三次握手:Client:Hi,IamClient.服务器:客户端您好,这里是服务器。Client:HelloServer...这里是三次握手可以这样表达:client的问题->server的回答->client的回答有的面试官很无聊,会问为什么是三次握手而不是两次或者四五次呢?你可以这样理解,当A和B两个人想要联系对方时,最简单的方式就是A问B,B问B,B问A,A问B。这也是三次握手的核心。Tcp通常被称为面向连接。这里的连接实际上是双方约定某种通信格式(包括发送数据包的顺序、缓冲区的大小等)的过程,从逻辑上看似乎是保持连接。我要出门。一旦建立了Tcp连接,http请求就可以组织数据并发送消息了。http协议目前的版本大多是1.1。在这个版本中,有一个属性Keep-Alive。该属性表示应该保留此http连接建立的TCP连接,默认启用。网上有文章大篇幅描述了http的长连接信息。事实上,这是一个错误的说法。长连接用于tcp连接。http连接的keepalive选项只是为了保持tcp连接不被断开。HTTP消息大致分为三部分。第一部分是请求行,第二部分是请求头,第三部分是请求体。具体http协议的其他概念这里就不多说了,因为内容有点多。http协议位于应用层,所以要发送的消息首先会在包中包含http协议相关的内容,然后传递给下一层。.png)下一层是传输层。这一层主要有两个协议:Tcp和Udp。http协议选择tcp协议。tcp会有两个端口信息,一个是源端口,一个是目的端口,比如http请求的目的端口一般是80,传输层封装了端口信息,然后把请求包传给网络层。.png)网络层的协议是IP协议,源IP地址和目标IP地址会在这一层进行封装(目标IP是请求的网站ip,可以通过查询dns获取)。.png)操作系统知道要发往的IP地址,会判断ip是否在局域网内(根据子网掩码判断),如果不在,网关需要发送请求(网关的ip一般是通过DHCP协议配置的)。操作系统如何获取网关所在的位置?这个过程基本上依赖于广播,应用的协议是ARP协议。当局域网内的所有设备都收到ARP协议的内容后,会判断该ip是否与网关ip相同。如果他们相同,他们会回复。经过这个过程,系统发现网关被打开,获取到网关的MAC地址,将网关的MAC地址和本机的MAC地址封装成一个请求包,发送给下一个MAC层,最后网卡将消息发送给网关。.png)MAC地址主要用于定位同一局域网内的某台计算机。仅在局域网内有效。地址到达目标服务器,请求包到达网关。网关会根据报文的MAC地址判断是否和自己的mac相同。如果相同,则接收到消息。然后它会判断消息中的目标IP。如果目标IP不在自己的局域网内,则需要根据自己的路由规则将报文发送到下一个连接的网关。网关与网关之间存在通信。至于网关是如何计算出最优路径的,这里就不展开了。我们以一个普通的家用路由器为例。每个路由器的网关IP其实都是运营商分配的,网络包一般都是通过修改IP(NAT)的方式发出的。具体步骤:网关检查目标IP是否在自己的局域网内,如果不在,则获取下一个要传输的网关的mac和IP,将目标IP和mac修改为下一个网关的IP和mac,修改源IP和mac改成当前网关的IP(外网IP)和mac。下一个网关收到报文后,首先检查mac是否与自己相匹配。如果匹配,则检查目标IP是否在自己的局域网中。如果没有,重复上述步骤,直到目标服务器所在的网关。当目标服务器所在的网关收到报文后,会判断当前目标IP在我的局域网范围内,所以不会跳转到下一个网关,而是向局域网发送ARP请求寻找目标服务器,目标服务器收到请求后会做出响应,网关会将具体的请求发送给目标服务器。目标服务器收到消息后会解析请求的消息。比较mac和IP信息后,会得到端口信息,目标服务器会在本机上搜索监听这个端口的程序。http服务器很可能是nginx或其他网络服务器。.请求通过端口传递给具体的处理程序,程序会解析http请求的内容,并根据内容做出相应的回复。请求按照上述所有步骤将响应返回给请求者(网关路由器会记住源路径),至此一个http请求结束。下一跳的网关地址由网关(路由器)之间的路由表决定。最后写的地址只是http请求的一个大概流程。其实每一步都很复杂,没有详细展开。例如:路由协议、ip分配等。加关注,看更精美版,收获更多精彩
