http协议相关

http简介:
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据

HTTP工作原理:
HTTP协议工作于客户端-服务端架构上,浏览器作为HTTP客户端通过URL向HTTP服务器发送所有请求。
web服务器有:Apache服务器、lls服务器等;
HTTP默认端口为80,但是也可以改为8080或者其他端口。

HTTP协议特点:
1:无连接:限制每次连接只处理一个请求,服务端完成客户端的请求后,即断开连接。
2:无状态:对于事务处理没有记忆能力。每一次请求都是独立的,不记录客户端任何行为。
3:客户端/服务端模型:客户端支持web浏览器或其他任何客户端
4:简单快速
5:灵活:可以传输任何类型的数据。

HTTP协议有什么组成?
请求报文包含三个部分:
1:请求行:包含请求方法、url、http版本信息
2:请求首部字段
user-agent:产生请求的浏览器类型
accept:客户端可识别的内容类型列表
method:请求类型
host:请求的主机名
3:请求内容实体

响应报文:
1:响应行:由协议版本,状态码和状态码的原因组成
2:响应头:响应部首组成
server服务器的信息
lacation:令客户端重定向的URL
content-type:内容类型
content-encoding:gzip
3:响应体:服务器响应的数据

什么是无状态协议?HTTP是无状态协议吗,怎么解决?
无状态协议:就是指浏览器对于事务的处理没有记忆能力。举个例子来说就是比如客户请求获得网页之后关闭浏览器。然后再次启动浏览器,登录该网站,但是服务器并不知道客户关闭了一次浏览器。
HTTP就是一种无状态的协议。
解决办法:通过cookie或者Session会话保存。

cookie机制和session机制的区别是什么?
1:cookie数据保存在客户端,session数据保存在服务器端
2:cookie可以减轻服务器压力,但是不安全,容易进行cookies欺骗
3:session安全一点,但是占用服务器资源。

请求类型GET和POST区别?
1:get重点在从服务器上获取资源,post重点在向服务器发送数据。
2:get是不安全的,因为URL是可见的,可能会泄露私密信息。如密码等;post较get安全性较高。
3:get传输数据是通过URL请求,以field=value的形式,置于URL后,并用“?”连接,多个请求数据间用“&”连接,这个过程用户是可见的。
post传输数据通过HTTP的post机制,将字段与对应值封存在请求实体中发送给服务器。这个过程用户是不可见的。
4:get传输的数据量小,因为受URL长度限制,最大为2048字节,但效率较高。post可以传输大量数据,所以上传文件时只能用Post方式
5:get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。

HTTP与HTTPS的区别?
HTTPS:是以安全为目标的HTTP通道,是HTTP的安全版。HTTPS的安全基础是SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
区别:
1:HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
2:HTTP和HTTPS使用完全不同的连接方式,所用的端口不同,前者是80端口,后者是443端口。
3:https有ca证书。
HTTP的keep-alive是干什么的?
在请求头中加入Connection:keep-alive来告诉对方这个请求响应完成后不要关闭。下一次还用这个请求交流。
优点:
1:较少的CPU和内存的使用
2:允许请求和应答的HTTP管线化
3:降低拥塞控制
4:减少了后续请求的延迟
5: 报告错误无需关闭TCP连接

HTTP常见状态码?
1XX:信息性状态码。表示接受的请求正在处理
2XX:成功状态码。请求正常处理完毕
3XX:重定向状态码。需要进行附加操作以完成请求。
4XX:客户端错误。服务器无法处理请求。
5XX:服务器错误状态码。服务器处理请求出错。

2XX:
200 ok:请求被成功处理。
201 created:请求被成功处理并且在服务端创建了一个新的资源。
202 Accepted:服务端已经接收到了请求,但是还未处理
204 No Content:服务端已经成功处理了请求,但是没有返回任何内容

3XX:
301:资源被永久重定向了。比如你的网站的网址更换了。
302:资源被临时重定向了。比如你的网站的某些资源被暂时转移到另一个网址。区别只是303明确客户端应该使用GET访问。服务器返回的头部信息中会包含一个Location字段,内容是重定向到的url
303:临时重定向,应使用GET定向获取请求资源。303和302一样。

4XX:
400:发送的HTTP请求存在问题,比如请求参数不合法、请求方法错误。
401:未认证却请求需要认证之后才能访问资源。
403:直接拒绝http请求,不处理。一般用来针对非法请求。
404:请求的资源未在服务端找到。
5XX:
500:服务器出问题。
502:我们的网关将请求转发到服务器,但是服务器返回的却是一个错误的响应。

TCP三次握手:
TCP传输控制协议,是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接。
位码:
SYN(建立联机)
ACK (确认)
PSH (传送)
FIN (结束)
RST(重置)
URG(紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
第一次握手:主机A发送位码syn=1,随机产生seq number=1234567的数据包到服务器,主机B由syn=1知道,主机A要求建立联机。此时主机A处于SYN_Send状态
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机seq number+1),SYN=1,ACK=1,随机产生seq number的包。此时主机B处于SYN_RCVD的状态
第三次握手:主机A收到后检查ack number是否正确,即是否为第一次握手发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number =(主机B的seq number+1),ack=1,此时主机A处于establised(连接成功)状态。主机B收到后确认ack number值和ack=1则连接建立成功。(此时主机B也处于establised状态)第三次握手可以携带数据

在这里插入图片描述

为什么需要三次握手,而不是两次?
1:为了防止服务器端开启一些无用的连接增加服务器开销
2:防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
我们需要通过第三次握手的数据告诉服务端,客户端有没有收到服务器“第二次握手”时传过去的数据,以及这个连接的序号是不是有效的。若发送的这个数据是“收到且没有问题”的信息,接受后服务器就正常建立TCP连接,否则建立TCP连接失败,服务器关闭连接端口。由此减少服务器开销和接受到失效请求发生的错误

三次握手的作用
1:确认双方的接受能力、发送能力是否正常
2:指定自己的初始化序列号,为后面的可靠传送做准备
3:如果是https协议的话,三次握手这个过程,还会进行数字证书的验证以及加密秘钥的生成。

四次挥手
TCP通过四次挥手方式断开连接。双方都可以主动断开连接。断开连接后主机中的资源将被释放。
一次挥手:客户端打算关闭连接,发送一个TCP首部FIN标志位为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。
二次挥手:服务端收到该报文后,向客户端发送ACK应答报文,接着服务器进入CLOSED_WAIT状态。
三次挥手:客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态,等待服务器端处理完数据后,也向客户端发送FIN报文,之后服务器进入LAST_ACK状态。
四次挥手:客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态。服务器端收到ACK应答报文后,就进入了CLOSED状态,至此服务器端已经完成连接的关闭。客户端在经过2MSL一段时间后,自动进入CLOSED状态,至此客户端也完成连接的关闭

在这里插入图片描述

为什么需要四次挥手?
服务端收到客户端的FIN报文之后,通常需要等待完成数据的发送和处理,所以服务端会先发送一个ACK的响应报文,接着等待数据处理完成后再发送一个FIN报文,从而比三次握手多一次。

为什么客户端在TIME-WAIT阶段要等2MSL?
为的是确认服务器端是否收到客户端发出的ACK确认报文,当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文。
所以客户端在发送完ACK确认报文之后,会设置一个时长为2MSL的计时器。
MSL指的是一段TCP报文在传输过程中的最大生命周期。
2MSL即是服务器端发出FIN报文和客户端发出ACK确认报文所能保持有效的最大时长。
服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文。客户端再次向服务器端发出ACK确认报文。计时器重置,重新开始2MSL的计时。所以,客户端要经历时长为2MSL的TIME-WAIT阶段。这也是为什么客户端比服务器端要晚进入CLOSED阶段的原因

http(浏览器)缓存机制
缓存过程分析?
浏览器与服务器通信的方式为应答模式,即:浏览器发起HTTP请求-服务器响应该请求。浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。由此我们知道:
1:浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
2:浏览器每次拿到返回结果都会将该结果和缓存标识存入浏览器缓存中。
在这里插入图片描述
缓存规则:
1:强制缓存:向浏览器缓存查找请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。主要分三种情况:
①不存在该缓存结果和缓存标识,强制缓存失效,直接向服务器发起请求
②存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效,使用协商缓存。
③存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果。
当浏览器像服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control的优先级比Expires高。
1.1Expires:
Expires是HTTP1.0控制网页缓存的字段,值为服务器返回改请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值,直接使用缓存结果
缺点:Expires控制缓存的原理是使用客户端时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因发生误差,强制缓存会直接失效,这样的话强制缓存的存在则毫无意义。

1.2Cache-Control:
在HTTP1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为:
public:所有内容都将被缓存(客户端和代理服务器)
private:所有内容只有客户端可以缓存,Cache-Control的默认取值
no-cache:客户端缓存内容,但是是否使用缓存需要经过协商缓存来验证决定
no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=XXX :缓存内容将在xxx秒后失效
缺点:缓存过期之后,服务器不管资源有没有变化,都会再次读取资源文件,并返回给浏览器。

如何判断缓存是否生效?
状态码为灰色代表使用了强制缓存。
from memory cache代表使用内存中的缓存
from disk cache代表使用的是硬盘中的缓存。
浏览器读取缓存顺序为memory->disk

内存缓存和硬盘缓存:
内存缓存:快速读取和实效性
快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中,占据该进程一定的内存资源,以方便下次运行使用时的快速读取。
时效性:一旦该进程关闭,则该进程的内存会清空

硬盘缓存则是直接将缓存写入硬盘文件,读取缓存需要对缓存存放的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。

协商缓存:强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识
决定是否使用缓存的过程。主要有以下两种情况:
1:协商缓存生效,返回304
2:协商缓存失效,返回200和请求结果,并将新的结果和缓存标识存入浏览器缓存中。
控制协商缓存的字段分别有:last-modified/if-modified-since、etag/if-none-match(优先级较高)
1:last-modified/if-modified-since
last-modified是服务器响应请求时,返回该资源文件在服务器最后被修改的时间
if-modified-since则是客户端再次发送请求时,携带上次请求返回的last-modified,通过字段值告诉服务器该资源上次请求返回的最后被修改时间。服务器收到该请求,发现请求头含有if-modified-since,会将它与该资源在服务器的最后修改时间做对比,若服务器的资源最后被修改时间大于它的if-modified-since的值,则重新返回资源,状态码为200;否则返回304,代表资源无更新,可继续使用缓存文件。

2:etag/if-none-match
Etag是服务器响应请求时,返回当前资源文件的一个唯一标识(由服务器生成)
if-none-match是客户端再次发起请求时,携带上次请求返回的etag标识,通过此字段告诉服务器该资源上次请求返回的唯一标识值。服务器收到请求后,发现改请求头中含有if-none-match,则会根据if-none-match的字段值与该资源在服务器的etag值做对比,一致则返回304,代表资源无更新,继续使用缓存文件;不一致则重新返回资源文件,状态码200.

总结:
强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(last-modified/if-modified-since、etag/if-none-match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取结果,在存入浏览器中,生效则返回304,继续使用缓存。

浏览器缓存机制的好处?
减轻服务器压力,渲染缓存的页面,就减少了对源服务器的访问,提高响应页面的速度,用户再次打开不用等待时间过长。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值