你知道HTTP状态码204和304的区别么?

简介:

    在搜索引擎中输入“HTTP状态码”,或者输入“http status code”,可以找到详尽的资料。但是,这些资料大都是描述了状态码的定义,至于技术上的微妙之处,只能是靠自己摸索了吧。

 

204和304的区别,直接告诉大家答案,还是先卖个关子呢?知道答案的看到这里可以离开了,不知道答案的如果着急,可以直接跳到最后。如果还有些兴趣,那就跟我一步步来吧,这样记忆会更长久一些。

 

204和304的定义,简单描述如下:

204 No Content
304 Not Modified

 

顾名思义倒是能看出一些端倪。但是,无论是英文还是中文,204的补充说明很有误导性:

If the client is a user agent, it SHOULD NOT change its document view.
在并没有新文档的情况下,204 (SC_NO_CONTENT)确保浏览器继续显示先前的文档。

 

在真相大白之前,还是先看看我遇到的问题吧。

 

现象:

   网页使用了jQuery。本机IE10打开页面没有问题。两位同事的IE10打开页面报$函数不存在错误。 

分析:

两位同事的IE10对两个页面中相同来源的javascript文件,只执行一遍。打开第一个页面能够正常显示,打开第二个页面则报$函数不存在错误。

错误的解决方式:

恢复IE默认配置,如下图所示:

正确的解决方式:

注意到这个站点在输出内容之前有这么一个逻辑

if(resultText.equals("")){
httpServletResponse.setStatus(204);
}

正确的做法是把整个if语句全部注掉。浏览器的配置是“自动”还是“每次访问网页时”,都行。错误现象中“本机IE10打开页面没有问题”是个误导,只要操作“得当”,问题在本机也是可以再现的。

 

真相,204和304的区别:

 在本例中,204的同时返回了空文件,这个空文件要替换上次缓存的文件。这样第一次打开页面获取jQuery代码是正确的,页面正常显示;第二次打开页面时询问是否要更新,结果返回了空文件,这个空文件成为了新的缓存,然后错误现象看起来就像是jQuery没有加载,而且以后也不会再“加载”了,因为文件是空的拿什么加载?注释掉那个httpServletResponse.setStatus(204)的程序指令,Web服务器就自动返回304了,304的意思是还用上次的缓存,这样就不会有空文件的问题,所以页面正常显示。这就解释了为什么当出现问题时清空缓存有用,也不难理解为什么“每次从服务器刷新”更有用。因为浏览器安装的默认配置就是有缓存机制的,我们要求每个用户去修改他们的配置不现实,所以倘若不能够正确地理解到204和304的微妙区别,便不能铲除错误的根源,留下一个阴影在那里微笑。



 本文转自 hexiaini235 51CTO博客,原文链接:http://blog.51cto.com/idata/1261569,如需转载请自行联系原作者


相关文章
|
3月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
467 2
|
4月前
|
缓存
|
4月前
HTTP协议中常见的状态码 ?
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)。
357 0
|
8月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
1229 83
|
4月前
|
Web App开发 缓存 数据安全/隐私保护
Django全栈实战:HTTP状态码与业务状态码的分层设计与实战应用
HTTP状态码是服务器响应请求的3位数字代码,分为1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。业务状态码则用于描述具体业务逻辑结果,常在响应体中返回。二者在前后端交互中有不同用途和处理方式。本文还介绍了如何在Django项目中设计并使用业务状态码。
352 0
|
6月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
574 20
|
6月前
|
缓存 搜索推荐 CDN
HTTP缓存策略的区别和解决的问题
总的来说,HTTP缓存策略是一种权衡,需要根据具体的应用场景和需求来选择合适的策略。理解和掌握这些策略,可以帮助我们更好地优化网页性能,提高用户的浏览体验。
182 11
|
7月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
363 3
|
8月前
|
数据采集 缓存 负载均衡
动态HTTP代理与静态HTTP代理的区别及HTTP代理的常见用途与类型
HTTP代理在网络通信中扮演重要角色,优化数据传输并提供隐私保护和访问控制。本文对比动态与静态HTTP代理,探讨其特点、优劣势及适用场景。静态代理地址固定,适合稳定环境;动态代理灵活切换服务器,增强隐私保护。此外,介绍HTTP代理的常见用途(如缓存加速、匿名浏览、绕过限制等)及类型(透明、普匿、匿名、高匿、正向、反向代理),帮助用户根据需求选择合适的代理方式。最后提醒用户遵守法律法规,确保安全使用。
268 1
|
10月前
|
安全 搜索推荐 网络安全
HTTPS与HTTP:区别及安全性对比
HTTP和HTTPS是现代网络通信中的两种重要协议。HTTP为明文传输,简单但不安全;HTTPS基于HTTP并通过SSL/TLS加密,确保数据安全性和完整性,防止劫持和篡改。HTTPS还提供身份验证,保护用户隐私并防止中间人攻击。尽管HTTPS有额外的性能开销和配置成本,但在涉及敏感信息的场景中,如在线支付和用户登录,其安全性优势至关重要。搜索引擎也更青睐HTTPS网站,有助于提升SEO排名。综上,HTTPS已成为大多数网站的必然选择,以保障用户数据安全和合规性。
709 1