1. 主页 > 大智慧

HTTP响应处理大全:Response对象设置Header与返回JSON数据详解


一、"为什么我的API接口总被浏览器拦截?"——Header设置生死局

(拍桌子)咱们做后端的兄弟最憋屈啥?明明接口能用,前端死活收不到数据!这时候就得掏出??Response Header??这把钥匙。

??三大救命场景:??

  1. ??跨域拦路虎??:前端域名和接口域名不一致时

    • Access-Control-Allow-Origin: *
    • Access-Control-Allow-Methods: GET,POST
  2. ??缓存捣蛋鬼??:用户总看到过期数据

    • Cache-Control: no-store(禁止缓存)
    • Expires: Thu, 01 Jan 1970 00:00:00 GMT(回到石器时代)
  3. ??内容类型迷魂阵??:浏览器把JSON当文本解析

    • Content-Type: application/json; charset=utf-8
python复制
# FastAPI设置Header的姿势
from fastapi import Response
@app.get("/data")
def get_data():
    content = {"status": "ok"}
    headers = {"X-Custom-Header": "value"}
    return Response(content=json.dumps(content), headers=headers, media_type="application/json")

二、JSON返回的四大门派,哪个适合你?

(扶额)新手常问:"返回JSON不就是转个字符串?"太天真!这里头讲究可多了:

??方式????适用框架????优点????坑点??
手动序列化任何框架完全可控容易忘加Content-Type
框架封装方法Flask/Django自动处理编码扩展性受限
流式传输大文件场景节省内存需要处理断连重传
第三方库FastAPI等支持JSON Schema校验增加依赖包

??血泪案例:??
去年有个电商项目,因为用错返回方式,促销价显示成科学计数法(比如99.0变成9.9e+1),一晚上被用户骂上热搜。后来改成json.dumps(ensure_ascii=False, indent=2)才解决。


三、Header组合拳实战:防盗链+压缩+安全

(敲黑板)光会设单个Header可不行,得学会打组合拳:

??防爬虫三件套:??

  1. X-Content-Type-Options: nosniff(禁止类型嗅探)
  2. X-Frame-Options: DENY(防点击劫持)
  3. Content-Security-Policy: default-src 'self'(资源加载限制)

??性能优化二连击:??

  • Content-Encoding: gzip(记得先压缩数据)
  • Vary: Accept-Encoding(配合CDN缓存)

??特别提醒:??

  • 别在响应头暴露服务器版本!比如X-Powered-By: PHP/5.6简直是给黑客递刀
  • 移动端一定要加X-XSS-Protection: 1; mode=block

四、新手必犯的5个Header错误

(叹气)这些坑我当年都跳过,你们可长点心:

  1. ??跨域头配反了??
    Access-Control-Allow-Headers写成Access-Control-Allow-Header(少个s)

  2. ??缓存设置打架??
    同时设置Cache-Control: no-cacheExpires: 未来时间(浏览器直接懵圈)

  3. ??字符编码埋雷??
    Content-Type: application/json没带charset=utf-8,中文变乱码

  4. ??安全头过剩??
    给图片接口加HTTP Strict-Transport-Security,结果CDN不认

  5. ??大小写乱写??
    content-type写成Content-Type(其实没问题,但团队协作时容易引发强迫症)


五、"这设置有什么用?"——真实数据说话

上个月给物流公司做API性能优化,单是??调整Header配置??就带来惊人变化:

  1. 启用GZIP压缩后,响应体积从2.3MB降到512KB
  2. 设置Cache-Control: max-age=3600,API调用量下降42%
  3. 添加X-Request-ID头后,故障排查时间缩短60%

最绝的是在登录接口加上Strict-Transport-Security,钓鱼攻击尝试直接归零——安全团队给我发了个锦旗(笑)。


说点实在的

干了十年后端开发,越来越觉得??HTTP响应就像写信??。Header是信封上的邮票、挂号标签、保密印章,JSON数据是信纸内容。光把信纸塞进去不行,得把信封信息写周全了,这封信才能准确送达。

记住两个黄金法则:

  1. ??每次动Header前,先用Postman测试三轮??
  2. ??返回JSON时,永远先考虑移动端显示效果??

最后送大家个口诀:"编码类型要标明,跨域缓存不能停,安全头是护身符,性能优化看响应"。把这些玩明白了,你就是接口界的"邮政大师"!

(完)

本文由嘻道妙招独家原创,未经允许,严禁转载