HTTP status Code 412 未满足前提条件的解决方法之一

2023-05-16

最近网站老是报告错误.  ajax返回状态为 error 思来想去不知道为啥.

后来跟踪了下,发现是在请求某个页面的时候会返回412错误. 

而这个页面的请求是通过jquery  的 $("#panel").load("http://****"); 方法去请求的.


各种百度无果.. 

只得到一个结果. 


412 未满足前提条件
前提条件失败 
在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。 
如果问题依然存在,请与 Web 服务器的管理员联系。 



用httpfiddle 跟踪后发现,此请求内容如下:


POST http://****/widget/ZhuCePanel.html HTTP/1.1
Host: pay.*****.cn
Connection: keep-alive
X-Requested-With: XMLHttpRequest
If-Modified-Since: Fri, 19 Feb 2016 02:53:00 GMT
Accept-Encoding: gzip, deflate
If-None-Match: "201827-95d-52c1694befb00"
Accept-Language: zh-cn
Accept: text/html, */*; q=0.01
Origin: http://**
Content-Length: 0
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4
Referer: http://****/GeRenZhongXin.html
Connection: keep-alive
Cookie: access_token=f33c641f-0ff9-40d5-bd29-b61643745f2e;</span>

其中各个KEY的含义都了解,只有

If-None-Match

ETags

两个参数比较陌生. 百度了下, 

google告诉网站站长:您的网络服务器支持 If-Modified-Since HTTP 标头。通过该功能,您的网络服务器可以告诉 Google 自上次抓取您的网站以来,内容是否已发生变化。该功能可以节省您的带宽和开销。
我们来看一下网上对HTTP 头:Last-Modified 与 If-Modified-Since的介绍。(看了两个博客,都没有图片。)
简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头,可 以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。想要详细查看 HTTP 头信息,可以在 Firefox 中安装 LiveHTTPHeaders 插件,安装完成之后按 Alt+L 就可以在 Sidebar 中看到了。
ETags和If-None-Match是一种常用的判断资源是否改变的方法。类似于Last-Modified和HTTP-IF-MODIFIED-SINCE。但是有所不同的是Last-Modified和HTTP-IF-MODIFIED-SINCE只判断资源的最后修改时间,而ETags和If-None-Match可以是资源任何的任何属性,不如资源的MD5等。
ETags和If-None-Match的工作原理是在HTTP Response中添加ETags信息。当客户端再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。
 

牵扯到412状态的问题描述.  直觉告诉我,应该就是这个If-None-Match 参数     导致服务器端取客户端的 If-None-Match 的数值不匹配,或者取不到造成的


不匹配应该不太可能,但是也无法知道.到底批不匹配.服务器端的值是多少我们也不清楚.

我再看了下其它请求,也有这个If-None-Match 参数,其它请求都能取到.. 为啥,这个特定的请求取不到呢?

经过我多次尝试,突然间发现, 红色的412状态的 请求好像都是POST请求嘛....

于是我猜测,服务器默认只能处理GET的缓存.


可为啥 
$("#panel").load("http://****");

会用POST请求呢? 不是默认GET请求吗?  想了半天突然间想起来了. 我好像在 

$.ajaxSetup({
    success: function (data) {
        try { $("body").hideLoading(); } catch (ex) { }
    },
    type:"POST",
    error: function (xhr, status, e) {

        try { $("body").hideLoading(); } catch (ex) { }
        console.error(xhr.responseText);

        if(status == "timeout"){
            alert("连接服务器超时.");
        }else if(status == "error"){
        	
        	if(! confirm("连接服务器error")){
        		
        		alert(
	        		"\nxhrstatus="+ xhr.status +
	        		"\n readyState="+ xhr.readyState + 
	        		"\n status="+ status +
	        		"\n responseText=" + xhr.responseText
        		);
        	}
            
        }else if(status == "notmodified"){
            alert("连接服务器异常notmodified"); 
        }else if(status == "parsererror"){
            alert("解析服务器数据发生异常."); 
        }
    },
    complete: function (xhr, status) {
        try { $("body").hideLoading(); } catch (ex) { }
    },
    beforeSend: function (xhr) {
        //if(xhr.notloading){
            try { $("body").showLoading(); } catch (ex) { }
        //}
    }
});


重点在 type:"POST"  上. 这个设置把整个ajax请求都改成POST了.

然后我把这个去掉以后,就彻底解决了. 


从这个问题上学到以下几个知识.

1.   304状态判断  靠的是 If-None-Match 参数,    If-None-Match 值变了,第二次请求就会刷新.否则使用缓存的.好像还有其它几个参数.也可以的

2.   服务器默认只缓存GET请求.  也就是说GET请求可以缓存,  我们的数据请求不应该用GET请求.而应该用POST.

3.   $.ajaxSetup 影响 $.load() 方法.

4.   412 错误是因为无法取到POST过来的If-None-Match 参数而导致的,  改成GET方式 就好了.  


我看到网上有人说把缓存功能禁用就好了, 当然禁用缓存也能解决问题. 不过禁用缓存功能就亏大发了.










412 未满足前提条件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP status Code 412 未满足前提条件的解决方法之一 的相关文章

  • 使用意图过滤器从 URL 打开 Android 应用程序不起作用

    我有一个 Android 应用程序 人们用它来替代网站 因此 当用户遇到网站的 URL 时 我想为他们提供在我的应用程序中而不是在浏览器中 打开 URL 的选项 换句话说 我希望出现弹出窗口 让他们在我的应用程序和浏览器 可能还有其他应用程
  • 使用传输编码分块的 HTTP 响应中的最大块大小是多少?

    The w3 org RFC2616 http www w3 org Protocols rfc2616 rfc2616 sec3 html sec3 6 1似乎没有定义块的最大大小 但是如果没有最大块大小 则没有空间用于块扩展 必须有一个
  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 通过 http 的私有 git 存储库

    你能推荐任何简单的解决方案来设置可通过http s cleutus建议的 访问的git存储库吗 我有自己的 http 服务器 我想用它来托管一些小型私人项目 在家里我可以通过 ssh 连接 但在工作中防火墙阻止我这样做 有没有免费的方法来设
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • Angular4如何使用flatMap链接forkJoin

    我所处的情况是 我需要进行 5 个可以并行执行的 http 调用 在这五个调用之后需要执行另一个 http 调用 我在前 5 个中使用了 forkJoin 但我不知道如何链接 flatMap 或其他函数 forkJoin firstObse
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • HTTP代理服务器

    我开始研究一个用 C 编写的非常基本的 HTTP 代理服务器 Edit 只是转发我的请求的东西 此时我很难理解如何继续 任何帮助都会有益的 看一眼micro proxy http acme com software micro proxy
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 为什么 websocket 需要使用 HTTP 进行打开握手?为什么不能成为一个独立的协议呢?

    Websocket 的设计方式是 通过使其握手成为有效的 HTTP 升级请求 其服务器可以与 HTTP 服务器共享端口 我对这个设计理念存有疑问 无论如何 WebSocket 协议都是一个独立的基于 TCP 的协议 为什么我们需要这个 HT
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c

随机推荐

  • java.lang.ClassNotFoundException: org.springframework.jdbc.support.JdbcTransactionManager

    这个错误出现的原因可能是导入的依赖版本过低 xff0c 我的跟新到这个版本就可以了 xff0c 要添加比较新的依赖 span class token generics function span class token punctuatio
  • 关于创建React App的8个有趣事实

    来源 xff1a https medium com xff0c 作者 xff1a Jennifer Fu 翻译 xff1a 前端外文精选 你所知道的一些事情 xff0c 你可能不知道的一些事情 Create React App是搭建Reac
  • 查询“ 01 “课程比“ 02 “课程成绩高的学生的信息及课程分数

    这个是一个比较经典的sql面试题 xff0c 面试的难度挺大的 xff0c 这里我将详细讲解 xff0c 怎么使用这个方法进行查询操作 student Sid Sname Sage Ssex Sid 学生编号 Sname 学生姓名 Sage
  • localhost可以访问,使用ip地址失败

    场景 使用手机访问同一局域网内的电脑 xff0c 无法访问的问题 xff0c 前段使用的是vue的框架 Vue的框架配置 在package json中 34 dev 34 34 webpack dev server host 0 0 0 0
  • 修改Linux配置文件后,让其生效的办法

    方法一 下面这个命令 xff0c 可以使所有用户都可以生效 xff0c 但是需要重新启动服务器 xff0c 如果是企业服务器 xff0c 极其不建议重新启动 xff0c 如果允许可以重启 项目中 xff0c 这个命令一般是java通过ssh
  • 在Windows上使用nginx具体步骤

    首先下载Windows版本的nginx http nginx org en docs windows html 直接将文件解压 xff0c 然后直接在有nginx exe同级的目录下执行cmd 当然你也可以双击下图红框中的文件 xff0c
  • Linux重启nginx服务

    1 方法一 到nginx下面的sbin目录下执行 nginx s reload 2 方法二 如果第一种不生效 xff0c xff08 项目背景 xff09 实际项目不生效 xff0c 也即部署到nginx下面的vue项目 xff0c 已经更
  • 静态方法调用yml配置文件中的值

    目录 一 概念讲解二 正确方式正确方法一正确方法二 可能遇到的问题 一 概念讲解 获取配置文件的注解方式有 64 value 64 ConfigurationProperties xff0c 这两种方式遇到下列情况都会失效 xff1a 属性
  • 2022IDEA搭建springMvc项目

    springmvc项目搭建 一 创建maven项目二 Add Framework Support三 添加依赖并配置maven四 配置前端控制器 96 DispatcherServlet 96 五 配置SpringMVC XML文件六 创建c
  • Error creating bean with name ‘mySwaggerResourceProvider‘

    多种情况都会导致此错误的产生 造成原因1 依赖冲突 xff1a 当maven导入项目的依赖A与导入项目的依赖B都依赖于依赖C xff0c 如下图所示 xff0c 都依赖于guava 也就是依赖C xff0c 因为依赖A与依赖B都有依赖C的依
  • Contents have difference only in line separators

    问题描述 xff1a idea关联上git xff0c 文件更改完 xff0c 然后ctrl 43 z回退到未更改之前 xff0c 但是git上的commit还是有此文件 xff08 表示有更改的地方 xff09 xff0c 如下图所示 红
  • valid prop: custom validator check failed for prop “size“.

    问题现象 xff0c 如下图所示 解决方案 xff1a 第一步 xff1a 首先确定出问题的 vue页面 xff0c 如上图所示 xff0c 是c view business product product manage vue 文件出现的
  • 装饰器

    装饰器 由于函数也是一个对象 xff0c 而且函数对象可以被赋值给变量 xff0c 所以 xff0c 通过变量也能调用该函数 span class prompt gt gt gt span class function span class
  • yolov5 识别效果不好如何判断原因

    yolov5 训练完模型以后发现 对测试图片的识别效果不好 那么这个时候该怎么办呢 是过拟合还是欠拟合了呢 怎么判断呢 欠拟合 机器学习中一个重要的话题便是模型的泛化能力 xff0c 泛化能力强的模型才是好模型 xff0c 对于训练好的模型
  • STM32F303RE 四个ADC同步规则采样

    STM32F303RE 芯片有4个ADC 采样频率据说能达到5Mbsps 已经算是非常高的了 比较适合做采样 参考文章 STM32三个ADC同步规则采样 参考上面的配置文章 经过不断的失败和重复尝试 最后终于搞通了 其中遇到了好几个错误 也
  • Python虚拟环境导出包安装到另一台电脑的方法

    Python虚拟环境导出包安装到另一台电脑的方法 环境 xff1a Windows 版 Python Python 3 6 8可以用自带的命令建立虚拟环境 xff0c 不用安装另外的如 virtualenv virtualenvwrappe
  • C# System.Numerics.Math.Sin 计算对边和临边

    在 C 中 xff0c 使用 System Numerics 中的 Math Sin 计算 36 869898 度角的正弦值可以通过以下代码实现 xff1a span class token keyword using span span
  • HTTP 错误 401.0 - Unauthorized 的解决方案

    我的项目突然间报这个错误 HTTP 错误 401 0 Unauthorized 您无权查看此目录或页面 最可能的原因 通过身份验证的用户无权访问处理请求所需的资源 可尝试的操作 查看失败请求跟踪日志以获取有关此错误的其他信息 有关详细信息
  • 卡尔曼滤波,最最容易理解的讲解.找遍网上就这篇看懂了.

    学习卡尔曼滤波看了4天的文章 硬是没看懂 后来找到了下面的文章一下就看懂了 我对卡尔曼滤波的理解 我认为 卡尔曼滤波就是把统计学应用到了滤波算法上 算法的核心思想是 根据当前的仪器 34 测量值 34 和上一刻的 34 预测量 34 和 3
  • HTTP status Code 412 未满足前提条件的解决方法之一

    最近网站老是报告错误 ajax返回状态为 error 思来想去不知道为啥 后来跟踪了下 发现是在请求某个页面的时候会返回412错误 而这个页面的请求是通过jquery 的 34 panel 34 load 34 http 34 方法去请求的