面试过程中经常容易被问到的http协议,今天进行了总结
HTTP协议简介
HTTP协议就是超文本传输协议(HyperText Transfer Protocol),通俗理解是浏览器和web服务器传输数据格式的协议,HTTP协议是一个应用层协议。
HTTP协议是基于TCP协议的,发送数据之前需要建立好连接
HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面<网页>的方法。
HTTP协议的制作者是蒂姆·伯纳斯-李,他供职于CERN(欧洲核子研究组织)
- 1991年发布的0.9版,该版本极其简单,只有一个GET请求方法
- 1996年5月,HTTP/1.0版本发布
- 1997年1月,HTTP/1.1版本发布,目前使用就是HTTP/1.1版本
HTTP的操作过程
1、浏览器分析指向页面的URL
2、浏览器向DNS系统请求解析域名所对应的服务器IP地址
3、DNS系统解析出服务器的IP,并返回给主机
4、浏览器与该服务器的进程建立TCP链接(三次握手,端口默认为80)
标志位:SYN: 表示连接请求 ACK: 表示确认 FIN: 表示关闭连接 seq:表示报文序号 ack: 表示确认序号
- a、第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
- b、第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
- c、第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
5、浏览器发出HTTP请求:如GET /details/index.html
6、服务器收到请求并作出相应处理,把文件index.html发送给浏览器
7、释放TCP链接(四次握手)
- a、第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送。
- b、第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1
- c、第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送。
- d、第四次挥手:Client收到FIN后,接着发送一个ACK给Server,确认序号为收到序号+1。
8、浏览器解析index.html文件,将web页显示出来。
HTTP协议的特点:
在HTTP/1.0中, 默认使用的是短连接.也就是说, 浏览器和服务器每进行一次HTTP操作, 就建立一次连接, 但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web 页中包含有其他的Web资源,如js文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
TCP长短连接的优缺点:
-
长连接可以省去较多的TCP建立和关闭的操作,节约时间。但是如果用户量太大容易造成服务器负载过高最终导致服务不可用
- 短连接对于服务器来说实现起来较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但是如果用户访问量很大, 往往可能在很短时间内需要创建大量的连接,造成服务器响应速度过慢
HTTP请求报文中常见的方法:
请求方法 | 意义 |
GET | 请求获取由URL所标志的信息 |
POST | 给服务器添加信息 |
HEAD | 请求读取由URL所标志的信息的首部 |
CONNECT | 用于代理服务器 |
完结!(*^▽^*)