---恢复内容开始---
要了解http协议,首先需要了解TCP/IP协议族
由上图可知,客户端想要浏览某个网页时,首先HTTP协议会生成针对目标Web服务器的HTTP请求报文,然后就到了运输层,TCP协议的目的,则是把HTTP请求报文切割成多个报文段(为了方便通信),接着传递到网络层,而IP地址的主要作用就是把数据包传递给对方,但是同时他又依赖于链路层的MAC地址,实际上的通信需要经过多次中转,才能到达目标服务器,怎么找到目标服务器的MAC地址呢?我们可以通过ARP协议来进行解析,就可以反查出对应的MAC地址,在链路层中与目标服务器进行比对,可以找到最终目标服务器,如图,发送方每经过一层就会添加该层的首部信息,目标服务器就会根据此标志获取到最终传递的HTTP请求内容,再根据请求内容,获取客户端需要访问的资源,最后如图反方向传递回给客户端。
如上有以下几个问题:
1.传输层中TCP协议将HTTP请求分割成了多个数据包,那么怎样确定数据能准确到达目标服务器呢?
这里TCP协议采用了三次握手的策略,在发送数据包时会加上SYN的标志,当目标服务器接收到数据包返回时会加上SYN/ACK的标志,然后再发送ACk的数据包,代表握手结束
2.通常用户都是采用主机名或者域名来访问对方的计算机,但是计算机理解数字比一串字符来说容易的多,怎么将域名转换为IP地址呢?他又是在上图的哪一个步骤中?
实际在发送HTTP请求前,客户端会先访问DNS服务器,他会将访问的域名转换为对应的IP地址,然后在生成对应的HTTP请求报文。。。
接下来进入重点内容,HTTP协议:
- HTTP是无状态协议
指的是HTTP协议本身不具备保存之前发送的请求或响应的功能。
无状态会造成什么影响呢??举个例子,当用户登录后跳转到首页,接着又从首页跳转到其他页面,此时页面肯定忘记用户,又需要重新登录,这样势必体验性完全不好,所以就引入了Cookie技术。Cookie技术将在后面讲解,点此跳转到Cookie部分
- HTTP/1.1中的请求方法
- GET(将请求条件内容添加在URL地址后,有大小限制,且对敏感信息不安全)
- POST(请求条件内容添加在请求主体中 )
- PUT(传输文件,因为自身不带验证机制,所以存在安全性问题,一般不使用该方法)
- HEAD(只用于获取响应首部,一般用来确认URI的有效性,资源更新的日期时间)
- DELETE(删除文件,同PUT,一般不使用)
- OPTIONS(用来查询服务器支持的资源方法(比如GET,POST等))
- TRACE(用来追踪通信路径,但是容易引发XST(跨站追踪),通常不使用)
- CONNECT(与代理服务器(后面解释)建立隧道,用隧道协议(一般是SSL和TLS)来进行TCP传输)
HTTP/1.0 支持的方法GET/POST/PUT/HEAD/DELETE
- 持久连接
前面讲到三次握手协议,在HTTP/1.0中每发起一次请求,请求完成后就会断开,那下一次请求又需要再次握手,这大大增加了通信量的开销,那后面就提出了持久连接,只需要一次握手协议,就可以不断发送请求和响应数据,HTTP/1.1中默认打开,HTTP/1.0需要自己设置
谈到持久连接,我们需要理解一个知识点,管线化(仅HTTP/1.1支持,某些浏览器默认未打开),持久连接时,客户端发送一个请求需要等待服务器响应后,才能发送下一个请求,这个肯定给用户带来的体验不好,而管线化则可以同时并行发送多个请求,减少了页面加载资源的时间
- Cookie
原理:服务器会在响应报文中添加一个Set-Cookie字段,通知客户端保存此Cookie,下次请求时在请求报文中添加此Cookie字段,就可以保存信息
- HTTP报文
分为请求报文和响应报文