✅ 一、问题简答
一个正常的 HTTP 请求在不传 Cookie 时,可能会返回什么?
可能返回的状态码:
状态码 |
含义 |
常见场景 |
200 |
OK |
请求的是不需要登录的资源 |
401 |
Unauthorized |
请求了需要身份验证的资源,但未提供 Cookie(或 Token) |
403 |
Forbidden |
有些服务要求必须带上某类身份标识才能访问,如管理员权限 |
✅ 二、实际场景举例(结合实习经验更好回答)
📌 场景一:不需要登录的资源(静态资源、公开接口)
GET /public/news_list HTTP/1.1
Host: example.com
不传 Cookie 也能访问,服务返回:
200 OK
Content-Type: application/json
说明:该接口是公开的,不需要用户身份认证。
📌 场景二:访问需要登录的接口
GET /user/profile HTTP/1.1
Host: example.com
不带 Cookie(或 token),服务返回:
401 Unauthorized
WWW-Authenticate: Bearer realm="user"
说明:服务端检测不到 Cookie/Token,认为用户未登录,因此返回 401。
📌 场景三:权限不足或黑名单限制
即使登录了,或根本没传 Cookie,也有些接口会拒绝访问(比如后台管理接口、接口限流限制),可能返回:
403 Forbidden
403 是:你没有权限,即便你登录了我也不给你看!
✅ 三、扩展:为什么一定要带 Cookie?
Cookie 的作用:
- 用于身份识别(Session ID)或认证 Token
- 一般由浏览器自动携带(如果设置了
Set-Cookie
)
举例:登录后接口依赖 Cookie
- 用户登录成功,后端返回:
Set-Cookie: session_id=abc123; Path=/; HttpOnly
- 下次访问
/user/order_list
时,浏览器会自动携带:
Cookie: session_id=abc123
- 后端读取 session_id 判断用户身份,返回数据。
如果你不带这个 Cookie,就无法知道你是谁 —— 服务端自然会返回 401。
✅ 四、面试答题建议(回答结构)
你可以这样答:
如果我发送一个 HTTP 请求时没有携带 Cookie,会有几种可能的响应:
- 如果请求的是公开资源,比如首页、新闻列表,服务端一般会返回
200 OK
; - 如果请求的是需要身份认证的资源,比如用户信息、订单数据,没有 Cookie 就会返回
401 Unauthorized
,提示用户登录; - 如果是权限控制严格的资源,比如后台管理接口、仅对特定用户开放的服务,不传 Cookie 也可能返回
403 Forbidden
;
实习时我遇到过一个用户请求接口返回 401 的问题,后来排查是由于 JS 请求头中未正确携带 Cookie,或者由于跨域设置中 withCredentials
为 false 导致 Cookie 未发送。
✅ 五、进阶拓展:不传 Cookie 的替代方式
除了 Cookie,还有其他认证方式,比如:
认证方式 |
特点 |
Token(JWT) |
前端将 token 放入 Header,每次主动发送 |
Session + Cookie |
后端存 Session,客户端通过 Cookie 带 session_id |
OAuth2 |
第三方授权机制,常用于微信/GitHub登录等 |
✅ 总结一句话
不传 Cookie 的请求,最常见的是 401(未登录),也可能是 403(权限限制),当然也可能是 200(如果接口是公开资源)。是否返回错误要看接口是否强依赖身份认证。