HTTP认证头的基本作用
在日常的接口调试或系统对接中,经常会遇到需要登录验证的服务。HTTP认证头(Authorization Header)就是用来携带用户身份信息的一种标准方式。比如你写一个脚本调用公司内部的API,结果返回401,大概率就是没带认证头。
最常见的形式是在请求头里加上 Authorization 字段,服务器根据这个字段判断你有没有权限访问资源。
Basic 认证:最简单的用户名密码方式
Basic 认证把用户名和密码拼成 username:password 的格式,再用Base64编码后发出去。虽然不加密,但胜在简单,适合内网或配合HTTPS使用。
例如,用户名是 admin,密码是 123456,组合后是 admin:123456,Base64 编码后变成 YWxhZGRpbjpvcGVuc2VzYW1l(实际值可能不同,注意计算正确)。
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l在 curl 中可以这样写:
curl -H "Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l" https://api.example.com/dataBearer Token:现在更主流的方式
现在很多接口用的是 Bearer Token,比如OAuth2 或 JWT 返回的 token。这种不需要用户名密码,只要拿到 token 就能用。
假设你从登录接口拿到了一串 token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,那就直接把它放在认证头里。
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...用 curl 测试时:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." https://api.example.com/profile代码中怎么加认证头
在 Python 的 requests 库里,推荐用 auth 参数处理 Basic 认证:
import requests
from requests.auth import HTTPBasicAuth
requests.get(
"https://api.example.com/data",
auth=HTTPBasicAuth('admin', '123456')
)如果是 Bearer Token,直接手动加 headers:
headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
}
requests.get('https://api.example.com/data', headers=headers)浏览器里怎么看认证头
打开 Chrome 开发者工具,切换到 Network 标签,点一个请求,看 Headers 部分有没有 Authorization 字段。有些页面刷新后自动带上 token,就是前端从 localStorage 取出来塞进去的。
如果自己写前端调接口,记得别把 token 明文写在代码里,也别打日志,避免泄露。
常见问题排查
发了认证头还是 401?先检查拼写,Authorization 容易拼错。再看是不是少了空格,比如 Bearerxxx 连在一起就不行,必须是 Bearer xxx。
另外,有的服务用的是自定义头,比如 X-Api-Key,这时候就不是走标准 Authorization 了,得按文档来。
还有就是过期问题,token 通常有时效,过期了就得重新登录拿新的。