http相关整理

一、http请求结构

http一般包含这几个部分:

请求行(Request Line)

请求头(Request Headers)

空行(Blank Line)

请求体(Request Body)

1、请求行(Request Line)

请求行是 HTTP请求的第一行,包含三个内容:

请求方法 请求路径 HTTP版本

例如:

复制代码
GET /index.html HTTP/1.1

含义:

部分 说明
GET 请求方法
/index.html 请求资源路径
HTTP/1.1 HTTP协议版本

常见请求方法:

  • GET

  • POST

  • PUT

  • DELETE

  • PATCH

  • OPTIONS

  • HEAD

2、请求头(Request Headers)

请求头用于描述 客户端信息和请求相关信息 ,由多行 key:value 组成。

例如:

Host: www.example.com

User-Agent: Chrome/120

Accept: application/json

Content-Type: application/json

Cookie: sessionId=123456

常见请求头:

请求头 作用
Host 请求的服务器地址
User-Agent 浏览器类型
Accept 可接受的数据类型
Content-Type 请求体数据类型
Content-Length 请求体长度
Cookie 携带的Cookie
Authorization 认证信息
3、空行(Blank Line)

请求头结束后会有 一行空行
作用是: 分隔请求头和请求体

HTTP 协议通过这一个空行来判断 Header结束

4、请求体(Request Body)

请求体是 真正提交给服务器的数据

只有部分请求方法才会有请求体,例如:

  • POST

  • PUT

  • PATCH

GET 一般没有请求体。

常见请求体格式:

1 表单

application/x-www-form-urlencoded

示例:

username=tom&password=123


2 JSON

application/json

示例:

{

"username": "tom",

"password": "123"

}


3 文件上传

multipart/form-data

用于:

  • 上传图片

  • 上传文件

5、完整 HTTP 请求示例

POST /login HTTP/1.1

Host: www.example.com

User-Agent: Chrome

Content-Type: application/json

Content-Length: 45

{

"username":"tom",

"password":"123456"

}

结构解析:

复制代码
POST /login HTTP/1.1     ← 请求行
Host: www.example.com    ← 请求头
User-Agent: Chrome       ← 请求头
Content-Type: application/json
Content-Length: 45
                         ← 空行
{                        ← 请求体
  "username":"tom",
  "password":"123456"
}

二、http响应结构

HTTP 响应(HTTP Response) 是服务器返回给客户端(浏览器)的数据。

它的结构和 HTTP 请求类似,也由 四个部分组成

状态行(Status Line)

响应头(Response Headers)

空行(Blank Line)

响应体(Response Body)

1、状态行(Status Line)

状态行是 HTTP响应的第一行,包含三个内容:

HTTP版本 状态码 状态描述

例如:

HTTP/1.1 200 OK

含义:

部分 含义
HTTP/1.1 HTTP协议版本
200 状态码
OK 状态描述

常见状态码分为五类:

类型 含义
1xx 信息响应
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误

常见状态码:

状态码 含义
200 请求成功
201 创建成功
204 无内容
301 永久重定向
302 临时重定向
304 资源未修改(缓存)
400 请求错误
401 未认证
403 禁止访问
404 资源不存在
500 服务器内部错误
502 网关错误
503 服务不可用
2、响应头(Response Headers)

响应头用于描述 服务器返回的数据和服务器信息
格式:

Header-Name: value

例如:

Content-Type: application/json

Content-Length: 120

Server: nginx

Set-Cookie: sessionId=abc123

Cache-Control: max-age=3600

常见响应头:

1 Content-Type :表示返回的数据类型。
例如:

Content-Type: text/html

Content-Type: application/json

Content-Type: image/png

常见类型:

类型 说明
text/html HTML页面
application/json JSON数据
text/plain 普通文本
image/png 图片
application/pdf PDF文件

2 Content-Length:表示响应体的长度(字节数)。
例如:

Content-Length: 348

3 Server:服务器软件信息。
例如:

Server: nginx

Server: Apache

Server: Tomcat


4 Set-Cookie:服务器向浏览器设置 Cookie。
例如:

Set-Cookie: sessionId=abc123; Path=/; HttpOnly

浏览器以后请求会携带:

Cookie: sessionId=abc123


5 Cache-Control:控制缓存策略。
例如:

Cache-Control: no-cache

Cache-Control: max-age=3600

含义:

含义
no-cache 每次都要验证
no-store 不缓存
max-age=3600 缓存3600秒

6 Location:用于 重定向。
例如:

HTTP/1.1 302 Found

Location: https://example.com/login

浏览器会跳转到新的地址。

7 Content-Encoding:表示响应是否压缩。
例如:

Content-Encoding: gzip

浏览器会自动解压。

3、空行(Blank Line)

响应头结束后会有 一行空行, 作用: 分隔响应头和响应体。

HTTP 协议通过这行空行判断 Header结束

4、响应体(Response Body)

响应体是 服务器真正返回的数据

可能是:

1 HTML页面

Content-Type: text/html

例如:

<html>

<head>

<title>Hello</title>

</head>

<body>

Hello World

</body>

</html>

2 JSON数据(接口返回)

Content-Type: application/json

例如:

{

"code": 200,

"msg": "success",

"data": {

"id": 1,

"name": "Tom"

}

}


3 文件

例如下载:

  • PDF

  • Excel

  • 图片

  • ZIP

响应头通常包含:

Content-Type: application/pdf

Content-Disposition: attachment; filename=test.pdf

之前做的 Java 文件下载接口 就是返回这种响应。

5、完整 HTTP 响应示例

服务器返回:

HTTP/1.1 200 OK

Server: nginx

Content-Type: application/json

Content-Length: 58

Set-Cookie: sessionId=abc123

{

"code": 200,

"msg": "success",

"data": {}

}

结构解析:

HTTP/1.1 200 OK ← 状态行

Server: nginx ← 响应头

Content-Type: application/json

Content-Length: 58

Set-Cookie: sessionId=abc123

← 空行

{ ← 响应体

"code":200,

"msg":"success"

}

三、http是如何传输数据的

1、HTTP传输的本质:字节流

在网络中传输的数据其实是:Byte Stream(字节流)

HTTP报文在网络里其实是这样的:

01001000 01010100 01010100 01010000 ...

无论是:

  • HTML

  • JSON

  • 图片

  • 视频

  • PDF

  • Excel

最后都会变成:

byte[]

然后通过 TCP协议 发送。

相关推荐
pshdhx_albert2 小时前
AI agent实现打字机效果
java·http·ai编程
古译汉书2 小时前
【IoT死磕系列】Day 9:架构一台“自动驾驶物流车”,看8种协议如何协同作战
网络·arm开发·单片机·物联网·tcp/ip·架构·自动驾驶
哼?~4 小时前
Linux--网络基础
网络
苏渡苇5 小时前
Docker 网络完全指南
网络·docker·容器·docker容器·容器通信
风曦Kisaki7 小时前
# Linux 磁盘查看命令详解:df 与 du
linux·运维·网络
攻城狮在此7 小时前
华为交换机Console口密码如何清除
运维·网络·华为
hhcgchpspk8 小时前
网速上传下载流量监测工具尝试
网络·python·cmd·psutil
亚空间仓鼠9 小时前
OpenEuler系统常用服务(四)
linux·运维·服务器·网络
郝学胜-神的一滴9 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm
刘佬GEO9 小时前
【无标题】
网络·人工智能·搜索引擎·ai·语言模型