你知道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默认配置,如下图所示:

105146285.png

正确的解决方式:

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

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,如需转载请自行联系原作者


相关文章
|
29天前
|
缓存 安全 网络协议
一起深入了解http和https的区别
HTTP适合于非敏感信息的传输,而HTTPS则是在要求安全性、隐私保护及信任机制的现代互联网环境中不可或缺的标准配置。随着网络安全意识的提高和技术的发展,越来越多的网站和服务都转向使用HTTPS,力求在提供便捷服务的同时保障用户数据的安全。HTTPS将成为未来的基本选择。
37 0
一起深入了解http和https的区别
|
1月前
|
JSON 网络协议 API
PRC和HTTP(rest)过程的区别
PRC和HTTP(rest)过程的区别
|
1月前
|
缓存 UED 开发者
HTTP常用状态码详解
HTTP常用状态码详解
|
1月前
|
安全 网络协议 算法
http和https的区别有哪些
http和https的区别有哪些
|
2月前
|
XML 存储 缓存
四、《图解HTTP》- 状态码
四、《图解HTTP》- 状态码
44 0
|
3月前
|
缓存 网络协议 数据库连接
C/S架构中HTTP错误状态码原因分析及解决办法
HTTP(Hypertext Transfer Protocol)是用于在客户端和服务器之间传输数据的协议。当在浏览器或其他HTTP客户端中访问网页时,可能会发生各种访问报错。我们需要根据网页提供的错误状态码分析错误原因,以找到相对应的解决办法。
41 0
|
1天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
1月前
|
缓存
HTTP协议中,GET和POST有什么区别?分别适用什么场景?
HTTP协议中,GET和POST有什么区别?分别适用什么场景?
36 0
|
1月前
|
存储 Java 关系型数据库
http和https的区别是什么? (1)
http和https的区别是什么? (1)
36 1