TCP/IP协议族详解:应用层协议HTTP

目录

引言

认识URL

HTTP协议请求与响应格式

1.请求报文

[1.1 常见请求方法](#1.1 常见请求方法)

[1.1.1 GET方法(重点)](#1.1.1 GET方法(重点))

[1.1.2 POST方法(重点)](#1.1.2 POST方法(重点))

[1.1.3. PUT⽅法(不常⽤)](#1.1.3. PUT⽅法(不常⽤))

[1.1.4. HEAD⽅法](#1.1.4. HEAD⽅法)

[1.1.5. DELETE⽅法(不常⽤)](#1.1.5. DELETE⽅法(不常⽤))

[1.1.6. OPTIONS⽅法](#1.1.6. OPTIONS⽅法)

[2. 响应报文](#2. 响应报文)

2.1状态码

[3. HTTP 响应头信息](#3. HTTP 响应头信息)


引言

在互联⽹世界中,HTTP(HyperText Transfer Protocol,超⽂本传输协议)是⼀个⾄关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超⽂本(如HTML⽂档)。

HTTP协议是客⼾端与服务器之间通信的基础。客⼾端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是⼀个⽆连接、⽆状态的协议,即每次请求都需要建⽴新的连接,且服务器不会保存客⼾端的状态信息。

认识URL

平时我们俗称的 "网址" 其实就是说的 URL

URL(统一资源定位符)的作用在互联网上唯一地标识并定位一个资源,同时指明访问该资源的方式

简单来说,URL就是资源的"网络地址",就像现实世界中的门牌号+访问方式(比如"走正门")。它的主要作用包括:

  1. 唯一标识资源:每个URL对应互联网上的一个特定资源(如网页、图片、视频等),确保你能精准找到它。

  2. 提供定位信息:URL中包含了资源所在的服务器地址(域名或IP)、端口号(可选)、文件路径等,告诉浏览器或客户端"去哪里找"。

  3. 指定访问协议 :URL开头部分(如 http://https://ftp://)指明了使用哪种协议来获取资源,确保双方用相同的"语言"沟通。

例如,在 https://www.example.com/index.html 中:

  • https:// 表示使用HTTPS协议;

  • www.example.com 是服务器域名;

  • /index.html 是资源在服务器上的路径。

在TCP/IP协议族中,URL主要作用于应用层,浏览器等应用通过解析URL,结合DNS(域名系统)获取IP地址,再通过下层协议完成数据传输。

HTTP协议请求与响应格式

1.请求报文

复制代码
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Connection: keep-alive

请求行: [方法] + [url] + [版本]

请求头: 请求的属性, 冒号分割的键值对;每组属性之间使⽤ \r\n 分隔;遇到空行表⽰ Header部分结束

**请求正文:**空⾏后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的⻓度。

1.1 常见请求方法

1.1.1 GET方法(重点)

GET:请求指定的资源

⽤途:⽤于请求URL指定的资源。 示例: GET /index.html HTTP/1.1

特性:指定资源经服务器端解析后返回响应内容。

注意,GET也可以通过URL提交参数,例如:

http://www.example/login?username=xxx\&password=123456

当然,通过这种方式传递参数是非常危险的,因为是明文传递,所以一般不会用这种方式传递用户名密码等敏感内容,URL的长度也是有限制的,所以不能传递长数据。

1.1.2 POST方法(重点)

⽤途:⽤于传输实体的主体,通常⽤于提交表单数据。

示例: POST /submit.cgi HTTP/1.1

特性:可以发送⼤量的数据给服务器,并且数据包含在请求体中。

1.1.3. PUT⽅法(不常⽤)

⽤途:⽤于传输⽂件,将请求报⽂主体中的⽂件保存到请求URL指定的位置。

⽰例: PUT /example.html HTTP/1.1

特性:不太常⽤,但在某些情况下,如RESTful API中,⽤于更新资源。

1.1.4. HEAD⽅法

⽤途:与GET⽅法类似,但不返回报⽂主体部分,仅返回响应头。

⽰例: HEAD /index.html HTTP/1.1

特性:⽤于确认URL的有效性及资源更新的⽇期时间等。

1.1.5. DELETE⽅法(不常⽤)

⽤途:⽤于删除⽂件,是PUT的相反⽅法。

⽰例: DELETE /example.html HTTP/1.1特性:按请求URL删除指定的资源。

1.1.6. OPTIONS⽅法

⽤途:⽤于查询针对请求URL指定的资源⽀持的⽅法。

⽰例: OPTIONS * HTTP/1.1

特性:返回允许的⽅法,如GET、POST等。

2. 响应报文

复制代码
HTTP/1.1 200 OK
Date: Wed, 18 Apr 2024 12:00:00 GMT
Server: Apache/2.4.1 (Unix)
Last-Modified: Wed, 18 Apr 2024 11:00:00 GMT
Content-Length: 12345
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<!-- The rest of the HTML content -->
</body>
</html>

状态行: [版本号] + [状态码] + [状态码解释]

响应头: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\r\n分隔;遇到空⾏表⽰响应头部分结束

响应正文: 空⾏后⾯的内容都是响应正文 . 响应正文 允许为空字符串. 如果响应正文 存在, 则在响应头 中会有⼀个Content-Length属性来标识响应正文的⻓度; 如果服务器返回了⼀个html⻚⾯, 那么html⻚⾯内容就是在body中.

2.1状态码

具体状态码种类,及其含义可以参见该网站

HTTP状态码

重定向相关状态码

|-----|--------------------|----------|-------------------------------|
| 状态码 | 含义 | 是否为临时重定向 | 应⽤样例 |
| 301 | Moved Permanently | 否(永久重定向) | ⽹站换域名后,⾃动跳转到新域名;搜索引擎更新⽹站链接时使⽤ |
| 302 | Found 或 See Other | 是(临时重定向) | ⽤⼾登录成功后,重定向到⽤⼾⾸⻚ |
| 307 | Temporary Redirect | 是(临时重定向) | 临时重定向资源到新的位置(较少使⽤) |
| 308 | Permanent Redirect | 否(永久重定向) | 永久重定向资源到新的位置(较少使⽤) |

HTTP状态码301(永久重定向)和302(临时重定向)都依赖Location选项。以下是关于两者依赖Location选项的详细说明: HTTP状态码301(永久重定向)

• 当服务器返回HTTP 301状态码时,表⽰请求的资源已经被永久移动到新的位置。

• 在这种情况下,服务器会在响应中添加⼀个Location头部,⽤于指定资源的新位置。这个Location头部包含了新的URL地址,浏览器会⾃动重定向到该地址。

• 例如,在HTTP响应中,可能会看到类似于以下的头部信息:

复制代码
HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\n

HTTP状态码302(临时重定向)

• 当服务器返回HTTP 302状态码时,表⽰请求的资源临时被移动到新的位置。

• 同样地,服务器也会在响应中添加⼀个Location头部来指定资源的新位置。浏览器会暂时使⽤新的URL进⾏后续的请求,但不会缓存这个重定向。

• 例如,在HTTP响应中,可能会看到类似于以下的头部信息:

复制代码
HTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n

总结:⽆论是HTTP 301还是HTTP 302重定向,都需要依赖Location选项来指定资源的新位置。这个Location选项是⼀个标准的HTTP响应头部,⽤于告诉浏览器应该将请求重定向到哪个新的URL地址。

3. HTTP 响应头信息

• Content-Type: 数据类型(text/html等)

• Content-Length: Body的⻓度

• Host: 客⼾端告知服务器, 所请求的资源是在哪个主机的哪个端⼝上;

• User-Agent: 声明⽤⼾的操作系统和浏览器版本信息;

• Referer: 当前⻚⾯是从哪个⻚⾯跳转过来的;

• Location: 搭配3xx状态码使⽤, 告诉客⼾端接下来要去哪⾥访问;

• Cookie: ⽤于在客⼾端存储少量信息. 通常⽤于实现会话(session)的功能;

更多响应头信息可见

HTTP 响应头信息

关于connection报头

HTTP中的Connection字段是HTTP报文头的一部分,它主要用于控制和管理客户端与服务器之间的连接状态。

核心作用

  • 管理持久连接:Connection字段还用于管理持久连接(也称为长连接)。持久连接允许客户端和服务器在请求/响应完成后不立即关闭TCP连接,以便在同一个连接上发送多个请求和接收多个响应。

持久连接(长连接)

  • HTTP/1.1:在HTTP/1.1协议中,默认使用持久连接。当客户端和服务器都不明确指定关闭连接时,连接将保持打开状态,以便后续的请求和响应可以复用同一个连接。

  • HTTP/1.0:在HTTP/1.0协议中,默认连接是非持久的。如果希望在HTTP/1.0上实现持久连接,需要在请求头中显式设置 Connection: keep-alive

语法格式

  • Connection: keep-alive:表示希望保持连接以复用TCP连接。

  • Connection: close:表示请求/响应完成后,应该关闭TCP连接。


那么本期的内容就到这里了,觉得有收获的同学们可以给个点赞、评论、关注、收藏哦,谢谢大家。

相关推荐
数据知道2 小时前
MongoDB网络安全配置:详细讲述IP白名单与防火墙规则
tcp/ip·mongodb·web安全
ipooipoo11882 小时前
kookeey 动态住宅 IP 使用场景详解:跨境电商、爬虫、社媒养号一站式解决方案
爬虫·网络协议·tcp/ip
橘子132 小时前
网络层IP协议
网络·tcp/ip·智能路由器
无心水3 小时前
【java开发常见错误】5、HTTP调用避坑指南:超时、重试、并发,一个都不能少
java·开发语言·后端·http·架构师·http调用·后端开发错误
不会写DN3 小时前
如何使用WebSocket实现一个公域聊天室?
websocket·网络协议·iphone
polaris06303 小时前
Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
服务器·http·node.js
_OP_CHEN4 小时前
【Linux网络编程】(一)初识计算机网络:从独立主机到协议世界的入门之旅
linux·服务器·网络·网络协议·计算机网络·socket·c/c++
c++之路13 小时前
Linux网络协议与编程基础:TCP/IP协议族全解析
linux·网络协议·tcp/ip
Johnstons15 小时前
读懂 TCP 标志位:网络运维中的“信号灯”
运维·网络·tcp/ip