您现在的位置是:首页 >技术交流 >Linux——网络(http协议)网站首页技术交流
Linux——网络(http协议)
目录
一、HTTP 请求格式
1. 请求行(Request Line)
格式:<方法> <请求目标> HTTP/<版本>
-
方法(Method):
-
GET
:获取资源。 -
POST
:提交数据。 -
PUT
:更新资源。 -
DELETE
:删除资源。 -
HEAD
:获取响应头(不返回正文)。 -
OPTIONS
:查询服务器支持的 HTTP 方法。
-
-
我们90%的方法都是GET和POST方法,其中GET方法占80%,那么这两个协议有什么区别呢?
-
<form action="./a/b/lixuejiao.html" method="post"> QQ号: <input type="text" name="name"><br> 密码: <input type="password" name="passwd"><br> <input type="submit" value="提交"> </form>
-
这里我们用的是post的方法,然后代码运行起来发现是在空行下面以正文的方式显示出来的;
接下来我们改成get方法
我们发现它是在url当中的,这就是两个方法的不同之处;
-
请求目标:通常是 URL 的路径(如
/index.html
)。 -
版本:如
HTTP/1.1
或HTTP/2
。
2. 请求头(Request Headers)
-
Host(必填):目标服务器域名和端口(如
Host: example.com:80
)。HTTP/1.1 强制要求。 -
User-Agent:客户端标识(如浏览器类型);都是客户端的设备信息和浏览器;
-
Accept:客户端能接收的响应内容类型(如
Accept: text/html
)。 -
Accept-Encoding:支持的压缩算法(如
gzip, deflate
)。 -
Accept-Language:优先语言(如
en-US, zh-CN
)。 -
Content-Type:请求正文的 MIME 类型(如
application/json
)。 -
Content-Length:请求正文的字节长度。
-
Authorization:认证信息(如
Bearer token
)。 -
Cookie:客户端发送的 Cookie;这个信息就是我们在登录某些网页登录完成以后下次登录免登录的原因;当我们把这个信息删除以后就需要重新登录了。
-
-
Referer:当前请求的来源页面 URL。
-
Cache-Control:缓存策略(如
no-cache
)。
3. 空行
-
分隔请求头和请求正文(
4. 请求正文(Request Body)
-
仅在
POST
、PUT
等方法中包含数据(如 JSON、表单数据)。
二、HTTP 响应格式
1. 状态行(Status Line)
格式:HTTP/<版本> <状态码> <状态短语>
-
版本:如
HTTP/1.1
。 -
状态码:
-
1xx
:信息类(如101 Switching Protocols
)。 -
2xx
:成功(如200 OK
、201 Created
)。 -
3xx
:重定向(如301 Moved Permanently
、304 Not Modified
)。 -
4xx
:客户端错误(如400 Bad Request
、404 Not Found
)。 -
5xx
:服务器错误(如500 Internal Server Error
)。
-
-
状态短语:对状态码的文本描述。
2.HTTP 状态码分类
分类 | 范围 | 描述 |
---|---|---|
1xx | 100-199 | 信息性状态码:请求已被接收,继续处理。 |
2xx | 200-299 | 成功状态码:请求已被成功处理。 |
3xx | 300-399 | 重定向状态码:需要客户端进一步操作。 |
4xx | 400-499 | 客户端错误:请求包含错误或无法完成。 |
5xx | 500-599 | 服务器错误:服务器处理请求失败。 |
一、1xx 信息性状态码
状态码 | 状态短语 | 说明 |
---|---|---|
100 | Continue | 客户端应继续发送请求体(用于大文件上传前的确认)。 |
101 | Switching Protocols | 服务器同意切换协议(如升级到 WebSocket)。 |
102 | Processing | 服务器已接收请求,但处理尚未完成(用于异步操作)。 |
103 | Early Hints | 预加载资源提示(在最终响应前返回部分头信息)。 |
二、2xx 成功状态码
状态码 | 状态短语 | 说明 |
---|---|---|
200 | OK | 请求成功,响应中包含结果(如 GET 请求返回数据)。 |
201 | Created | 资源创建成功(常用于 POST 请求)。 |
202 | Accepted | 请求已接受,但处理尚未完成(如异步任务)。 |
204 | No Content | 请求成功,但无返回内容(如 DELETE 请求)。 |
206 | Partial Content | 部分内容(用于分块下载或断点续传)。 |
三、3xx 重定向状态码
状态码 | 状态短语 | 说明 |
---|---|---|
301 | Moved Permanently | 资源永久重定向到新 URL(浏览器会缓存)。 |
302 | Found | 资源临时重定向到新 URL(浏览器不缓存)。 |
304 | Not Modified | 资源未修改(客户端可使用缓存副本)。 |
307 | Temporary Redirect | 临时重定向,要求客户端保持原请求方法(如 POST)。 |
308 | Permanent Redirect | 永久重定向,要求客户端保持原请求方法。 |
四、4xx 客户端错误状态码
状态码 | 状态短语 | 说明 |
---|---|---|
400 | Bad Request | 请求格式错误(如参数缺失或语法错误)。 |
401 | Unauthorized | 未认证(需提供有效凭证,如登录后重试)。 |
403 | Forbidden | 无权限访问资源(认证成功但权限不足)。 |
404 | Not Found | 资源不存在(URL 路径错误或资源已删除)。 |
405 | Method Not Allowed | 请求方法不被允许(如用 GET 访问只支持 POST 的接口)。 |
408 | Request Timeout | 请求超时(服务器等待超时)。 |
409 | Conflict | 请求与服务器当前状态冲突(如重复提交)。 |
413 | Payload Too Large | 请求体过大(如上传文件超过限制)。 |
415 | Unsupported Media Type | 不支持的媒体类型(如 Content-Type 错误)。 |
429 | Too Many Requests | 请求频率过高(触发限流)。 |
五、5xx 服务器错误状态码
状态码 | 状态短语 | 说明 |
---|---|---|
500 | Internal Server Error | 服务器内部错误(代码异常或配置问题)。 |
501 | Not Implemented | 服务器不支持请求的功能(如未实现的 HTTP 方法)。 |
502 | Bad Gateway | 网关或代理服务器收到无效响应(上游服务不可用)。 |
503 | Service Unavailable | 服务暂时不可用(如维护或过载)。 |
504 | Gateway Timeout | 网关超时(上游服务未及时响应)。 |
507 | Insufficient Storage | 服务器存储空间不足(如上传文件时磁盘已满)。 |
3. 响应头(Response Headers)
-
Server:服务器软件信息(如
Server: Apache/2.4.1
)。 -
Content-Type:响应正文的 MIME 类型(如
text/html; charset=utf-8
)。 -
Content-Length:响应正文的字节长度。
-
Content-Encoding:正文使用的压缩算法(如
gzip
)。 -
Cache-Control:缓存策略(如
max-age=3600
)。 -
Set-Cookie:服务器向客户端设置 Cookie。
-
Location:重定向目标 URL(用于
3xx
状态码)。 -
Access-Control-Allow-Origin:允许跨域请求的源(如
*
)。 -
Expires:响应过期时间(已逐渐被
Cache-Control
取代)。
4. 空行
-
分隔响应头和响应正文(
5. 响应正文(Response Body)
-
返回的数据(如 HTML、JSON、图片等)。
三、其他重要字段
1. 通用头(General Headers)
适用于请求和响应:
-
Date:消息生成的日期时间。
-
Connection:控制连接行为(如
keep-alive
或close
);也就是我们数据是长链接还是短链接,当我们打开一个有100张照片页面时,长链接是我们一次性将照片和index页面加载过去;而短链接是需要发送101次请求; -
Transfer-Encoding:传输编码方式(如
chunked
分块传输)。
2. 安全相关头
-
Strict-Transport-Security (HSTS):强制使用 HTTPS。
-
Content-Security-Policy (CSP):限制资源加载来源。
-
X-Content-Type-Options: 禁止 MIME 嗅探(如
nosniff
)。
3. 缓存控制
-
ETag:资源的唯一标识符(用于缓存验证)。
-
Last-Modified:资源最后修改时间(与
If-Modified-Since
配合使用)。
4. 自定义头
-
以
X-
开头的自定义头(如X-Request-ID
)。
四、示例
HTTP 请求示例
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html, application/xhtml+xml
Accept-Language: en-US
Connection: keep-alive
HTTP 响应示例
HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Cache-Control: max-age=3600
Set-Cookie: session_id=abc123; Path=/
<!DOCTYPE html>
<html>...</html>
五、总结
HTTP 的每个字段都有明确的用途,合理设置这些字段可以:
-
优化缓存策略(如
Cache-Control
)。 -
提升安全性(如
Content-Security-Policy
)。 -
支持跨域请求(如
Access-Control-Allow-Origin
)。 -
管理会话状态(如
Cookie
和Set-Cookie
)。
理解这些字段有助于调试网络请求、优化性能和解决安全问题。