IIS服务器静态JSON文件响应头异常及状态码问题
解决IIS托管JSON文件返回304且响应头不正确的问题
核心问题拆解
304状态码是浏览器在复用本地缓存的资源,所以不会返回新的响应头。要拿到200状态码+application/json响应头,得从缓存控制和MIME类型配置验证两方面下手。
1. 先验证MIME类型是否真的生效(临时调试)
直接按Ctrl+F5强制刷新浏览器,或者在请求里添加这个请求头:
Cache-Control: no-cache
这时候如果能拿到200状态码,且响应头里有application/json,说明MIME配置是对的,问题全在缓存策略上。
2. 调整IIS缓存策略,强制浏览器请求最新资源
- 打开IIS管理器,找到你的站点,双击HTTP响应头。
- 点击右侧的设置常用头:
- 勾选启用HTTP缓存,可以设置一个较短的过期时间,或者直接设为立即过期;
- 嫌麻烦的话,直接添加自定义响应头:点击添加,名称填
Cache-Control,值填no-store, no-cache, must-revalidate,这会让浏览器每次都向服务器请求最新资源。
3. 再核对一遍JSON的MIME类型配置
别只说启用了,仔细检查细节:
- 在站点或服务器级别,双击MIME类型;
- 找到
.json对应的条目,确保MIME类型是application/json,不是text/json这类错误配置; - 如果没找到该条目,点击添加,扩展名填
.json,MIME类型填application/json,保存即可。
4. 检查静态压缩的影响(如果开启了压缩)
要是你开了IIS的静态内容压缩,得确认application/json在压缩列表里:
- 打开站点的压缩功能,进入静态压缩的编辑界面,把
application/json添加进去,否则压缩可能会篡改响应头。
5. 排查文件的单独配置
- 右键你的JSON文件,查看属性里是否单独设置了HTTP头,避免文件级配置覆盖站点级配置;
- 同时检查URL重写这类模块,有没有不小心修改了响应头。
总结
先通过强制刷新验证MIME配置是否生效,再调整缓存策略让浏览器每次都获取最新资源,同时确认MIME和压缩配置无误,就能拿到你要的200状态码和application/json响应头了。
内容的提问来源于stack exchange,提问作者Muruganandam M
相关产品推荐
相关产品推荐

