如何从前端/REST客户端的HTTP请求中移除所有默认请求头
这个问题确实挺棘手的——很多HTTP客户端和浏览器都会自动添加默认请求头,比如Host、User-Agent这些,而第三方硬件服务器把所有头都当成数据处理,那我们就得想办法把这些默认头尽可能清空。下面分不同工具给你具体解决方案:
一、Postman 操作方案
Postman默认会带不少请求头,但可以手动清空大部分:
- 打开Postman新建POST请求,填入目标硬件的URL。
- 切换到Headers标签页,点击右上角的「Clear all」按钮,清空所有默认生成的头。
- 不要添加任何自定义请求头,直接切到Body标签页:
- 选择「raw」格式,下拉菜单里选「Text」(对应
text/plain类型)。 - 在输入框里填入你的请求体内容。
- 选择「raw」格式,下拉菜单里选「Text」(对应
- 点击「Send」发送即可。
注意:Postman会强制发送
Host头(这是HTTP协议的必填项),如果硬件连这个都不接受,那得用更底层的工具,比如下面的curl或Node.js原生模块。
二、浏览器端 JavaScript(含 Angular)解决方案
浏览器的安全策略和API默认行为会自动加一些头,比如Origin、Content-Type,这里推荐用XMLHttpRequest,它比fetch更灵活,能手动控制大部分请求头:
原生 JavaScript 示例
const xhr = new XMLHttpRequest(); xhr.open('POST', 'http://你的硬件IP:端口/路径', true); // 关键:不设置任何自定义请求头(部分浏览器仍会自动加Host、Connection这类协议必需头,没法完全去掉) xhr.onreadystatechange = function() { if (xhr.readyState === 4) { console.log('硬件响应:', xhr.responseText); } }; // 直接发送text/plain格式的请求体 xhr.send('你的请求体内容');
Angular 解决方案
Angular的HttpClient默认会带一些头,你需要创建空请求头并禁用默认拦截器:
import { HttpClient, HttpHeaders } from '@angular/common/http'; // 创建完全空的请求头对象 const emptyHeaders = new HttpHeaders({}); // 发送请求时指定空头、text响应类型 this.http.post('http://你的硬件IP:端口/路径', '你的请求体内容', { headers: emptyHeaders, responseType: 'text', withCredentials: false // 禁用自动携带凭证类头 }).subscribe( response => console.log('硬件响应:', response), error => console.error('请求出错:', error) );
提示:浏览器出于HTTP规范和安全限制,一定会发送
Host、Connection这类头,如果硬件连这些都不接受,建议在中间加一个Node.js代理服务器,由代理转发请求时清空所有头。
三、Node.js 解决方案(适合代理或直接发请求)
Node.js的原生http模块可以完全控制请求头,甚至能绕过HTTP规范去掉必填头(虽然不推荐,但适配硬件需求的话可以这么做):
const http = require('http'); const options = { hostname: '你的硬件IP', port: '你的端口', path: '/路径', method: 'POST', // 关键:设置空headers对象,不添加任何请求头 headers: {} }; const req = http.request(options, (res) => { res.on('data', (chunk) => { console.log(`硬件响应内容: ${chunk}`); }); }); req.on('error', (e) => { console.error(`请求出错: ${e.message}`); }); // 发送text/plain格式的请求体 req.write('你的请求体内容'); req.end();
这个方案可以去掉几乎所有请求头,完全满足硬件“只接受请求体”的要求。
四、curl 命令解决方案
curl也能手动清空所有默认请求头:
curl -X POST -H '' --data-binary '你的请求体内容' http://你的硬件IP:端口/路径
解释:
-H ''表示清空所有默认请求头,--data-binary会把内容以text/plain格式发送;如果需要明确指定Content-Type,可以加-H 'Content-Type: text/plain',但如果硬件不允许任何头就不要加这部分。
内容的提问来源于stack exchange,提问作者Sreenivasa Rajiv

