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头中的端口号发给监听这个端口的相应进程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。