使用HTTP ETag 实现对网络的优化

在Restful接口日益成为主流的今天,怎么提高接口的访问速度?

其实HTTP协议本身就提供了很多优化的方式,今天我们讲的就是通过ETag进行网络优化

让我们试着了解ETag头文件的工作原理:

1.在第一个请求中,服务器创建响应数据的MD5并将MD5设置为响应头中的ETag,这时服务器将响应状态为200。

2.如果HTTP客户端相同请求再次发送,这一次请求在请求头里机会多一个请求头If-None-Match,它的值就是上一次请求返回的ETag。

3.服务器处理完整个请求后,通过响应的数据生成ETag,如果发现生成的ETag与客户端的If-None-Match一致,就会返回304状态码,客户端收到      304状态码后就会明白,返回的数据是一样的,就没有必要去读响应里的数据了,直接拿上一次的缓存就可以了。

简而言之,如果相同的请求再次从同一个客户端发送到服务器,并且响应的数据相同,那么服务器将发送304 状态,以便客户端不会从服务器读取相同的数据,而是使用先前的缓存数据。如果响应的数据和之前的不同,那么服务器将返回状态码200,以便客户端缓存新的响应数据。

Etag不会提高服务器的性能,但它能减少网站的带宽和网络流量。


Spring boot实现起来也非常简单,只需要加入一个Filter


现在我们来看看效果

第一次请求接口


我们可以看到,返回状态是200,传输的传输大小是5.45K,响应头里有一个ETag。

第二次请求接口


我们可以看到,返回状态是304,传输的传输大小写着是已缓存,请求头里我们发现多了一个If-None-Match,值就是我们第一次请求时的ETag。

这个ETag的威力大家也看到了,其实在我们的实际业务接口中,频繁变动数据的接口是在少数,使用ETag可以在节省网络流量的同时,又不失数据的及时性,何乐而不为?

前端攻城狮可以考虑将ETag进行磁盘缓存,也就是说应用重新打开ETag也还是有效。

参考文献:

https://javadeveloperzone.com/spring-boot/spring-boot-etag-header-example/

你可能感兴趣的:(使用HTTP ETag 实现对网络的优化)