目录

引言

认识URL

HTTP协议请求与响应格式

1.请求报文

1.1 常见请求方法

1.1.1 GET方法(重点)

1.1.2 POST方法(重点)

1.1.3. PUT⽅法(不常⽤)

1.1.4. HEAD⽅法

1.1.5. DELETE⽅法(不常⽤)

1.1.6. OPTIONS⽅法

2. 响应报文

2.1状态码

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连接。


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

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐