HTTP协议

HTTP协议

  • HTTP的工作原理
    1、客户端与服务器端通过TCP协议建立连接(三次握手)。
    2、客户端向服务器端发起HTTP请求。
    3、服务器返回响应信息给客户端
    4、断开连接(四次挥手)
    5、客户端将响应信息交给浏览器显示用户
    在HTTP1.1协议中,认会开启Keep-Alive,这样建立的TCP连接,就可以在多次请求中复用。
  • HTTP报文的格式
    HTTP的报文分为三大部分,第一部分是请求行,请求行又包括方法、URL、版本。方法包括GET、POST、PUT、DELETE这四种常用的方法。其中最主要的还是GET和POST方法。版本大多为HTTP1.1,也有HTTP2.0。第二部分是首部,首部是一些字段,通过冒号分隔。例如,Accept-Charset,表示客户端可以接受的字符集。第三部分就是正文实体。
  • HTTP请求的发送
    HTTP协议是基于TCP协议的,所有它使用面向连接的方式发送请求,通过stream二进制流的方式传给对方。当然,到了TCP层,它会把二进制流变成一个报文段发送给对方。在发送每一个报文段的时候,都需要对方回复ACK,来确定报文到达了服务器端。如果没有回应,那么TCP层会进行重新传输,直到ACK。TCP层发送每一个报文的时候,都需要加上自己的地址(源IP)和它要去的地方(目标IP),会将这两个信息放到IP头里面,交给IP层进行传输。IP层需要查看目标地址和自己是否在同一个局域网。如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去。如果不在同一个局域网中,就需要获取网关的MAC地址,然后将源MAC和网关的MAC放入MAC头中,发送出去。网关收到包以后,发现MAC符合,于是取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳的路由器。就这样到达最后一跳的路由器的时候,发现目标地址就在自己的某一个出口的局域网上。于是,在这个局域网上发送ARP协议,获取目标地址的MAC地址。然后将包发出去。如果目标机器发现MAC地址符合,就将包收起来,发现IP地址符合,根据IP头中协议项,知道自己上一层是TCP协议,于是解析TCP头,里面有序列号,需要看一看这个序列包是不是需要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃。TCP头里面还有端口号,HTTP服务器正在监听这个端口号。于是目标机器自然知道是HTTP服务器这个进程想要这个包。于是将包发给HTTP服务器。HTTP服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。
  • HTTP返回报文的格式
    也分为三大部分。第一部分状态行,包括版本、状态码、短语。状态码会反应HTTP请求的结果。常用的状态码有:
状态码 短语 含义
200 OK 请求成功,信息在返回的响应报文中
301 Moved Permanently 请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL。
400 Bad Request 一个通用差错代码,指示该请求不能被服务器理解
404 Not Found 被请求的文档不在服务器上
505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本

第二部分是首部的字段,例如,Content-type表示返回的是HTML还是JSON。第三部分就是正文实体。

  • 返回的HTTP报文
    流程跟来的时候是一样的,但是路径不一定一样。返回的报文到达客户端。客户端发现MAC地址符合、IP地址符合,就会交个TCP层。根据序列号看是不是自己要的报文段,如果是,则会根据TCP头中的端口号发给监听这个端口的相应进程。

相关文章

方法: 打开一个新的可跨域的chrome窗口实现方法: 1. 打开终...
MacBook Pro 14价格和配置对比 尺寸 SOC	内存&#...
现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC...
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【...
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪...
Mac 安装nvm