ZBLOG

浏览器F12抓包查看 blob请求发出的是JS代码

在浏览器中通过 F12 开发者工具 抓包时,如果发现请求返回的是 blob 类型数据(如音视频、二进制文件等),而响应内容显示为 JS代码,可能是以下原因及解决方法:


1. Blob 数据的本质

  • Blob(Binary Large Object) 是浏览器用于存储二进制数据的对象,常见于:
    • 音视频流(如 .mp4, .webm
    • 图片或文件下载(如 .png, .pdf
    • 动态生成的二进制数据(如加密文件、WebAssembly模块等)。
  • 若显示为 JS 代码:可能是服务器错误地返回了 JS 脚本而非预期的二进制数据。

2. 可能的原因

(1) 服务器配置错误

  • 后端未正确设置 Content-Type,例如将二进制文件误标记为 application/javascript
  • 检查方法:在开发者工具的 Network → Headers → Response Headers 中查看 Content-Type

(2) CDN/代理层拦截

  • CDN 或防火墙可能拦截了请求,返回了错误的 JS(如安全警告页面)。
  • 验证方法:直接访问 API URL,观察是否返回预期数据。

(3) JavaScript动态生成Blob

  • 前端代码可能通过 new Blob() 动态创建了包含 JS 代码的 Blob(例如某些 SDK 的自我保护机制)。
    
    const jsCode = 'console.log("This is JS code");';
    const blob = new Blob([jsCode], { type: 'application/javascript' });
    

(4) CORS/跨域问题

  • 跨域请求被拒绝后,服务器可能返回了一段错误处理的 JS。

3. 解决步骤

(1)确认原始请求和响应

  • Network面板操作
    1. F12 → Network → XHR/Fetch/Media。 2.找到目标请求 → Preview/Response选项卡。
      • *如果是乱码*:说明是真实的二进制数据(尝试下载到本地用专业工具分析)。
      • *如果是JS代码*:检查是否是预期行为。

(2)手动下载Blob并分析

//在Console中执行以下代码下载Blob内容
fetch('你的API地址')
.then(res => res.blob())
.then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'file.bin'; //修改文件名和后缀
    a.click();
});

(3)检查后端逻辑

-确保服务器正确设置了响应头和内容类型:

Content-Type: application/octet-stream #通用二进制流
Content-Disposition: attachment; filename="data.bin"

4.高级调试技巧

  • 使用Postman/Curl复现请求:排除浏览器干扰。
  • Hook XMLHttpRequest/Fetch API:捕获前端生成Blob的逻辑:
const originalFetch = window.fetch;
window.fetch = async (...args) => {
    const response = await originalFetch(...args);
    console.log('Intercepted:', args, response);
    return response;
};

总结

如果 blob请求返回JS代码,优先排查服务端是否正确处理了请求。如需进一步分析,建议提供具体场景或代码片段。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23204

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?