目录

HTTP 协议

URL

urlencode(URL 编码)  和  urldecode(URL 解码)

urlencode

urldecode

HTTP 协议请求与响应格式

HTTP 请求

HTTP 响应

基本的应答格式

HTTP 的方法

HTTP 常见方法

1. GET 方法(重点)

2.POST 方法(重点)

GET 和POST都可以提交参数

3. PUT 方法(不常用)

4. HEAD 方法

5. DELETE 方法(不常用)

6. OPTIONS 方法

HTTP 的状态码

 重定向:

HTTP 状态码 301(永久重定向):

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

HTTP 常见 Header

关于 connection 报头

语法格式:

HTTP 历史及版本核心技术与时代背景

HTTP/0.9

HTTP/1.0

HTTP/1.1

HTTP/2.0

HTTP/3.0


HTTP 协议

        应用层协议是程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。

        在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至 关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML /CSS/JS /图片 /视频)。

HTTP是基于 TCP 协议,默认使用 端口 80。

        HTTP 协议是客户端服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求(request),服务器收到请求后处理并返回响应(response)

HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接(TCP处理链接问题),且服务器不会保存客户端的状态信息。

http协议是基于TCP的协议

URL

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

url表示客户端想从http中获取服务器中的什么资源

  1. 服务器中的文件(固定网页)
  2. 交互式请求

        www.baidu.com 与www.baidu.com/ 与www.baidu.com/index.html都是百度的首页

        index.html 为默认首页

urlencode(URL 编码)  和  urldecode(URL 解码)

像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义. 转义的规则如下: 将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式

总结:将用户请求的中的字符转为符合 URL 传输要求的格式

urlencode

"hello world!" → "hello+world%21"
"价格=100" → "%E4%BB%B7%E6%A0%BC%3D100"

urldecode

"hello+world%21" → "hello world!"
"%E4%BB%B7%E6%A0%BC%3D100" → "价格=100"

例如:

"+" 被转义成了 "%2B"

urldecode 就是 urlencode 的逆过程;

补充:

        一张网页可能不是一个简单的html文件 ,可能有很多资源构成(HTML+ 图片/视频等)

        以二进制的方式读取可以读取文本或图片

        

HTTP 协议请求与响应格式

HTTP 请求

  • 首行(请求行): [方法] +空格+ [url] +空格+ [版本]+\r\n
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
  • 空行表示为 \r\n
  • Body: 空行后面的内容都是 Body. Body 允许为空字符串.
  • 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度;

HTTP 响应

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
  • Body: 空行后面的内容都是 Body. Body 允许为空字符串.
  • 如果 Body 存在, 则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一 个 html 页面, 那么 html 页面内容就是在 body 中.

基本的应答格式

HTTP 的方法

其中最常用的就是 GET 方法和 POST 方法.

GET通常是用于获取网页 ,POST通常是提交参数 ,但是GET也能提交参数

HTTP 常见方法

1. GET 方法(重点)

用途:用于请求 URL 指定的资源。

示例:GET /index.html HTTP/1.1

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

form 表单:https://www.runoob.com/html/html-forms.html

通过历史写的 http 服务器,验证 GET 方法,这里需要了解一下 FORM 表单的 问题 这里就要引入 web 根目录,文件读取的基本操作了

2.POST 方法(重点)

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

示例:POST /submit.cgi HTTP/1.1

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

form 表单:https://www.runoob.com/html/html-forms.html

GET 和POST都可以提交参数

GET将提交的参数拼接到URL的后面 

POST将提交的参数保存在request中的请求正文

总结:

        登陆一般不用GET ,POST比GET传参更私密,不是更安全 ,因为两者的request都是明文,

利用抓包工具都可将requst抓到

想要安全需要将明文加密.

GET和POST是HTTP协议中最常用的两种请求方法

两者的区别:

3. PUT 方法(不常用)

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

示例:PUT /example.html HTTP/1.1

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

4. HEAD 方法

用途:与 GET 方法类似,但不返回报文主体部分,仅返回响应头。

示例:HEAD /index.html HTTP/1.1

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

5. DELETE 方法(不常用)

用途:用于删除文件,是 PUT 的相反方法。

示例:DELETE /example.html HTTP/1.1

特性:按请求 URL 删除指定的资源。

6. OPTIONS 方法

用途:用于查询针对请求 URL 指定的资源支持的方法。

示例:OPTIONS * HTTP/1.1

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

HTTP 的状态码

        最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway) 

        例如:如果获取用户resquest成功 ,用户请求的内容存在 ,应该返回200

        但是在状态码的遵守上 ,各大公司遵守的不太一致 

 重定向:

以下是仅包含重定向相关状态码的表格:

一般使用301(永久重定向)和302(临时重定向)

关于重定向的验证,以 301 为代表

HTTP 状态码 301(永久重定向)和 302(临时重定向)都依赖 Location 选项。

以下是关于两者依赖 Location 选项的详细说明:

HTTP 状态码 301(永久重定向):

  • 当服务器返回 HTTP 301 状态码时,表示请求的资源已经被永久移动到新的位 置。
  • 在这种情况下,服务器会在响应中添加一个 Location 头部,用于指定资源的新位置。这个 Location 头部包含了新的 URL 地址,浏览器会自动重定向到该地址,并进行缓存,将old-ur l 缓存成 new-url , 以后再次打开old-url就会自动打开new-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 地址。

  1. 其他注意事项

    • 301 是强制重定向,用户代理(如浏览器)必须遵循。

    • 如果响应中没有 Location 头部,301 响应是无效的。

    • 301 不仅适用于浏览器,也适用于 API 客户端、爬虫等其他 HTTP 客户端.

    • 重定向时,用的是全路径

HTTP 常见 Header

  • Content-Type: 指明正文的数据类型(text/html 等)
  • Content-Length: Body 的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; 处于request中
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;判定跳转
  • Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

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

关于 HTTP 常见 header 的表格

demo1:一个http的请求和应答

HTTP 历史及版本核心技术与时代背景

HTTP(Hypertext Transfer Protocol,超文本传输协议)作为互联网中浏览器和服务 器间通信的基石,经历了从简单到复杂、从单一到多样的发展过程。以下将按照时间 顺序,介绍 HTTP 的主要版本、核心技术及其对应的时代背景。

HTTP/0.9

核心技术:

  • 仅支持 GET 请求方法。
  • 仅支持纯文本传输,主要是 HTML 格式。
  • 无请求和响应头信息。

时代背景:

1991 年,HTTP/0.9 版本作为 HTTP 协议的最初版本,用于传输基本的超文本 HTML 内容。

当时的互联网还处于起步阶段,网页内容相对简单,主要以文本为主。

HTTP/1.0

核心技术:

  • 引入 POST 和 HEAD 请求方法。
  • 请求和响应头信息,支持多种数据格式(MIME)。
  • 支持缓存(cache)。
  • 状态码(status code)、多字符集支持等。

时代背景:

1996 年,随着互联网的快速发展,网页内容逐渐丰富,HTTP/1.0 版本应运而 生。

为了满足日益增长的网络应用需求,HTTP/1.0 增加了更多的功能和灵活性。

然而,HTTP/1.0 的工作方式是每次 TCP 连接只能发送一个请求,性能上存在一定局限。

HTTP/1.1

核心技术:

  • 引入持久连接(persistent connection),持管道化(pipelining)。
  • 允许在单个 TCP 连接上进行多个请求和响应,提高了性能。
  • 引入分块传输编码(chunked transfer encoding)。
  • 支持 Host 头,允许在一个 IP 地址上部署多个 Web 站点。

时代背景:

1999 年,随着网页加载的外部资源越来越多,HTTP/1.0 的性能问题愈发突出。

HTTP/1.1 通过引入持久连接和管道化等技术,有效提高了数据传输效率。

同时,互联网应用开始呈现出多元化、复杂化的趋势,HTTP/1.1 的出现满足了 这些需求。

HTTP/2.0

核心技术

  • 多路复用(multiplexing),一个 TCP 连接允许多个 HTTP 请求。
  • 二进制帧格式(binary framing),优化数据传输。
  • 头部压缩(header compression),减少传输开销。
  • 服务器推送(server push),提前发送资源到客户端。

时代背景:

2015 年,随着移动互联网的兴起和云计算技术的发展,网络应用对性能的要求越来越高。

HTTP/2.0 通过多路复用、二进制帧格式等技术,显著提高了数据传输效率和网 络性能。

同时,HTTP/2.0 还支持加密传输(HTTPS),提高了数据传输的安全性。

HTTP/3.0

核心技术:

  • 使用 QUIC 协议替代 TCP 协议,基于 UDP 构建的多路复用传输协议。
  • 减少了 TCP 三次握手及 TLS 握手时间,提高了连接建立速度。
  • 解决了 TCP 中的线头阻塞问题,提高了数据传输效率。

时代背景:

2022 年,随着 5G、物联网等技术的快速发展,网络应用对实时性、可靠性的要求越来越高。

HTTP/3.0 通过使用 QUIC 协议,提高了连接建立速度和数据传输效率,满足了这些需求。

 同时,HTTP/3.0 还支持加密传输(HTTPS),保证了数据传输的安全性。

Logo

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

更多推荐