当前位置: 首页 > news >正文

网站建设方案总结网站推广和网络推广

网站建设方案总结,网站推广和网络推广,seo公司排名教程,深圳专业网站公司概述 在 HTTP 协议中#xff0c;请求头 If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since、If-Range 主要是为了解决浏览器缓存数据而定义的请求头标准#xff0c;按照协议规范正确的判断和使用这几个请求头#xff0c;可以更精准的处理浏览器缓存#x…概述 在 HTTP 协议中请求头 If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since、If-Range 主要是为了解决浏览器缓存数据而定义的请求头标准按照协议规范正确的判断和使用这几个请求头可以更精准的处理浏览器缓存从而达到提高系统性能和减少系统带宽的占用的目的。 更精准的处理 Web 缓存效果是可以很明显的 1、 减少了网络交互加快页面响应速度增强用户体验2、 减少了网络带宽消耗因为没有更新的资源就不需要重复返回了特别是图片、视频、下载文件这类大响应体请求 当请求中存在上述 If-xxx 时服务器对附加的条件进行判断当判定条件为真才会执行标准的数据处理和数据返回否则直接返回对应的HTTP错误码。 针对服务端原始资源是否变更目前有两类处理规则基于修改时间的If-Modified-Since、If-Unmodified-Since和基于自定义标识的If-Match、If-None-Match还有一个是处理文件断电续传使用到的 If-Range。 经常做服务端开发的会发现基于时间的并不能很精准的进行缓存判断有些场景下后端资源可能在1秒钟以内进行了变更时间请求头只精确到秒是不足以覆盖这种场景的。还有一些场景是我们没有定义修改时间的可能是基于其他标志记录是否被修改的。这种情况下我们使用 If-Match、If-None-Match 来进行资源是否变更的更精准判断这两个头基于一个自定义字符串传送这个字符串你可以自己定义例如用 md5时间戳都可以需要注意它俩需要结合 ETag 请求头一起使用ETag 指代一个独一无二的版本号字符串称为“实体标签”。 下文针对 If-Match、If-None-Match 和 ETag 的交互原理及使用方法进行说明。 详解 服务端对资源记录一个 ETag实体标记的字段当资源更新后ETag也会随之更新。 所以当客户端 If-Match 的值若与服务端的ETag一致才会执行请求否则拒绝处理返回412状态码。 交互图 示例代码 package com.example.webfluxreactivedemo1.controller;import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** HTTP请求头IfMatch和ETag处理** author 单红宇* date 2023/11/2 10:09*/RestController RequestMapping public class IfMatchController {/*** 获取资源接口** param id 资源ID* param clientETag 请求头中的 If-None-Match* return ResponseEntity*/GetMapping(/resource/{id})public ResponseEntityString getResource(PathVariable String id,RequestHeader(If-None-Match) String clientETag) {// 检查资源是否存在以及资源最新的ETag是否与请求头中的If-None-Match匹配boolean resourceExists checkResourceExists(id);boolean etagMatch checkETagMatch(id, clientETag);if (!resourceExists) {// 如果资源不存在返回404 Not Foundreturn ResponseEntity.status(HttpStatus.NOT_FOUND).build();} else if (!etagMatch) {// 如果资源存在且ETag不匹配即资源已经发生了变更则返回资源内容return ResponseEntity.ok().header(HttpHeaders.ETAG, this.generateETag(id)).body(Resource content);} else {// 如果资源存在且ETag匹配即资源没有发生变更返回304和空响应体return ResponseEntity.status(HttpStatus.NOT_MODIFIED).build();}}/*** 修改文章内容** param id 文章ID* param clientETag 请求头中的 If-Match* return ResponseEntity*/GetMapping(/updateArticle/{id})public ResponseEntityString updateArticle(PathVariable String id,RequestHeader(If-Match) String clientETag) {// 检查资源是否存在以及资源最新的ETag是否与请求头中的If-Match匹配boolean etagMatch checkETagMatch(id, clientETag);if (etagMatch) {// 如果资源存在且ETag匹配即文章没有被其他人修改过执行更新操作String newETag 返回文章最新的ETag;// articleService.update(id);return ResponseEntity.ok().header(HttpHeaders.ETAG, newETag).body(修改成功);} else {// 如果ETag不匹配说明文章被其他人修改过用户需要获取最新内容后再基于最新内容修改提交防止多人同时修改文章内容出现覆盖问题// 返回412 Precondition Failedreturn ResponseEntity.status(HttpStatus.PRECONDITION_FAILED).build();}}// 如果资源存在但ETag不匹配返回412 Precondition Failed/*** 检查资源是否存在** param id 资源ID* return true存在*/private boolean checkResourceExists(String id) {// 在这里实现检查资源是否存在的逻辑return true;}/*** 检查资源ETag是否匹配即判定资源的ETag是否发生了变动** param id 资源ID* param clientETag 浏览器客户端传过来的ETag* return 当资源已经被更新时返回false资源未更新返回true*/private boolean checkETagMatch(String id, String clientETag) {// 在这里实现检查资源ETag是否与请求头中的If-Match/If-None-Match匹配的逻辑return true;}/*** 生成一个ETag** param resourceId 资源ID* return ETag*/public String generateETag(String resourceId) {// 在这里实现检查资源是否存在的逻辑String eTag 根据resourceId按照自己的逻辑生成etag比如你可以使用md5;// 注意ETag必须使用双引号包起来返回这是HTTP协议规范要求return \ eTag \;} } 常见误区 以下是关于这两个字段的一些常见误区 错误的使用方式有些开发者可能会错误地将If-None-Match和If-Match混淆或颠倒使用。例如本应使用If-None-Match来检查缓存有效性的情况下使用了If-Match这可能导致不必要的请求失败。 不了解Etag的工作机制Etag是一个与特定资源关联的确定值通常由服务器生成并存储。当资源发生变化时Etag也会相应地更新。而有些开发者可能误认为Etag是由客户端生成和管理的这可能导致无法正确使用If-Match或If-None-Match。 不正确的Etag格式Etag的格式应该是ASCII字符串可能包含一个W/前缀来表示弱比较算法。有些开发者可能会忽略这一点导致Etag格式不正确从而影响缓存控制的效果。 为了避免这些错误建议开发者仔细阅读HTTP规范确保正确理解和使用If-Match和If-None-Match字段。同时也需要了解和掌握Etag的工作机制和正确的使用方法。 END
http://www.hkea.cn/news/14358659/

相关文章:

  • wordpress怎样静态化seo就业哪家好
  • 淄博易宝网站建设小企业网站建设在哪里
  • 乐清定制网站建设电话网站关键词优化有用吗
  • 企业网站建设选题依据百度竞价 百度流量 网站权重
  • 如何查找网站死链手机网站开发者模式
  • 宁波正规网站建设使用方法周至做网站
  • 什么是销售型网站陕西省建设执业资格注册管理中心网站
  • 精品课程 网站建设质量自己做app的网站
  • 安庆什么网站好小事做营销型网站建设汽车
  • 公司想做一个网站陕西十二建设有限公司网站
  • asp net做购物网站网上哪里可以免费打广告
  • 衡阳网站排名优化费用网页设计代码完整版
  • 免费建网站的app建网站需要的费用
  • 网站建设合理的流程做电商平台网站有哪些内容
  • 河南开封网站建设seo的描述正确
  • 国家外汇管理局网站怎么做报告网页qq登录保护不再开启入口
  • 公司做的网站费用计入什么科目做网站横幅用什么软件好
  • 别人做的网站如何要回服务器网络空间购买
  • 做设计兼职的网站有哪些下载app最新版
  • 自己建公司网站可以嘛网站站内链接怎么做
  • 哪家公司设计网站好谷歌google官网下载
  • 邯郸做seo网站优化群晖做网站服务器会卡吗
  • 在线模版下载网站南昌网站建设方案
  • 自建网站做网上超市可行吗wordpress主题开发视频课程
  • 网站 猜你喜欢 怎么做宁波房产交易信息网官网
  • 甘肃省住房城乡建设部网站最新软件推广
  • wordpress网站怎么百度的到书店网站建设方案
  • 诸城网站建设公司排名淮安百度推广公司
  • 网站建设专业知识应用南开做网站的公司
  • 建站还有前途么做好网站建设的重要性