HTTP中的响应协议及302、304的含义
响应协议
1 2 3 4 5 6 | HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释; Server: Apache-Coyote/1.1:服务器的版本信息; Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8; Content-Length: 724:响应体为724字节; Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的Cookie; Date: Wed, 25 Sep 2012 04:15:03 GMT:响应的时间,这可能会有8小时的时区差; |
响应码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中; 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源; 500:请求资源找到了,但服务器内部出现了错误; 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址; 304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间, 浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头, 它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间, If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个, 您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了, 我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对, 如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送(节省传输成本), 浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。 |
响应头
1 | Last-Modified:最后的修改时间; |
请求头
1 | If-Modified-Since:把上次请求的index.html的最后修改时间还给服务器; |
状态码:304,比较If-Modified-Since的时间与文件真实的时间一样时,服务器会响应304,而且不会有响正文,表示浏览器缓存的就是最新版本!如果不一样,那么服务器响应200
其他响应头
1 2 3 4 5 6 7 | 告诉浏览器不要缓存的响应头: Expires: -1;有效期,表示立即过期 Cache-Control: no-cache; Pragma: no-cache; |
小结:302重定向(两次请求) 。 304,浏览器缓存的上次请求的.html页面,包括最后修改时间(如果发现最后修改时间和服务器里面的时间一样,那么响应304,无需传输数据,浏览器接收到304,则去自己的缓存中取出数据,节省传输成本)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?