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协议 发送。

相关推荐
zephyr052 小时前
TCP/IP协议族详解:数据在互联网中是如何“漂流”的?
服务器·网络·tcp/ip
测试专家2 小时前
ACC-5595反射内存交换机
网络
CNAHYZ2 小时前
Apache HttpClient 配置 SSL 证书指南
java·spring boot·http
tianshiyeben2 小时前
日志审计系统WGLOG介绍 - 怎么采集防火墙的日志
运维·服务器·网络·日志审计
乾元2 小时前
算力优化: 在有限硬件资源下进行安全模型微调(Fine-tuning)
网络·人工智能·神经网络·安全·web安全·机器学习·安全架构
头疼的程序员2 小时前
计算机网络:自顶向下方法(第七版)第三章 学习分享(三)
网络·学习·计算机网络
硅农深芯2 小时前
蚀刻停止层:半导体制造中的主流绝缘防护屏障
网络·制造·芯片制造·蚀刻停止层
阿豪学编程2 小时前
【网络】应用层-HTTP协议
网络·网络协议·http
南浦别a2 小时前
第三十五天--小人物的坚持--网络编程
网络