应用层协议HTTP

文章目录


一、HTTP协议

应⽤层协议是我们自己定义的. 但实际上,有非常多现成的有非常好用的应用层协议供我们直接参考使用. HTTP(超⽂本传输协议)就是其中之⼀。

  • HTTP(HyperText Transfer Protocol,超⽂本传输协议)是⼀个⾄关重要的协议。它定义了客⼾端(如浏览器)与服务器之间如何通信,以交换或传输超⽂本(如HTML⽂档)。
  • HTTP协议是客⼾端与服务器之间通信的基础。客⼾端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是⼀个⽆连接、⽆状态的协议(应用层协议,不要与TCP/UDP搞混),即每次请求都需要建⽴新的连接,且服务器不会保存客⼾端的状态信息。
  • HTTP属于应用层协议,是基于TCP协议的。
  • HTTP协议自己做了序列和反序列化。

二、URL(统一资源定位符)

我们上网所有的行为,都是在做IO(数据交换 ),我们需要先确认我要的资源在哪台服务器(网络、IP),在什么路径下(系统路径),这就是URL ,IP + PORT负责帮我们进行通信。平时我们说的"网址 "就是URL

其中 ,带层次的文件路径中 '/ ':表示的是web根目录 ,并不是linux系统的根目录

  • urlencode和urldecode

/ ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.某个参数中需要带有这些特殊字符, 就必须先对特殊字符进⾏转义.

转义的规则 :将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做⼀位,前⾯加上%,编码成%XY格式

例如:

三、HTTP协议请求与响应格式

HTTP请求

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


常用请求头属性

HTTP响应

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

    常用响应头属性

关于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方法

  • HTTP常见方法:

GET通常用来获取资源,POST用来传输参数

GET方法

  • 用途:用于请求URL指定的资源。
  • 示例GET /index.html HTTP/1.1
  • 特性:指定资源经服务器端解析后返回响应内容。

GET也可向服务器提交参数,将参数拼接到URI/URL的后面,但存在数据泄露的风险传递参数的个数有上限。如/xxx?k=v&k=v...

POST方法

  • 用途:⽤于传输实体的主体,通常⽤于提交表单数据。
  • 示例POST /submit.cgi HTTP/1.1
  • 特性:可以发送⼤量的数据给服务器,并且数据包含在请求体中。

POST方法通过正文(body)传递参数,参数个数没有上限。

注意:
但并不认为POST方法比GET方法好,只是POST传参比GET传参更私密

在表单中:

五、HTTP状态码

更全面的关于HTTP的信息

常见状态码及其含义与样例

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

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

  • 当服务器返回HTTP 301状态码时,表⽰请求的资源已经被永久移动到新的位置。
  • 在这种情况下,服务器会在响应中添加⼀个Location头部,用于指定资源的新位置。这个Location头部包含了新的URL地址,浏览器会自动重定向到该地址。
  • 在HTTP响应中,可能会看到类似于以下的头部信息:
cpp 复制代码
HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\n

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

  • 当服务器返回HTTP 302状态码时,表⽰请求的资源临时被移动到新的位置。
  • 同样地,服务器也会在响应中添加⼀个Location头部来指定资源的新位置。浏览器会暂时使用新的URL进行后续的请求,但不会缓存这个重定向。
  • 在HTTP响应中,可能会看到类似于以下的头部信息:
cpp 复制代码
HTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n

总结:

复制代码
无论是HTTP 301还是HTTP 302重定向,都需要依赖Location选项来指定资源的新位置。这个
Location选项是⼀个标准的HTTP响应头部,⽤于告诉浏览器应该将请求重定向到哪个新的URL地址。
相关推荐
小李独爱秋2 小时前
Linux操作系统实验报告单(13) 显示进程列表
linux·运维·服务器·操作系统·实验报告单
爱上解放晚晚2 小时前
QT转vs
c++
阿拉伯柠檬2 小时前
MySQL基本查询
linux·数据库·mysql·面试
Ha_To2 小时前
2025.12.24 Cisco防火墙ASA与动态PAT配置
linux·服务器·网络
是娇娇公主~2 小时前
TCP拥塞控制
网络协议·tcp/ip·php
就不掉头发2 小时前
UDP编程
网络·网络协议·udp
艾莉丝努力练剑2 小时前
Al Ping免费上新:GLM-4.7 && MiniMaxM2.1重磅上线,附独家使用教程
java·大数据·linux·运维·人工智能·python
Lily.C2 小时前
小程序WebSocket实时通信全解析
websocket·网络协议·小程序
代码游侠2 小时前
学习笔记——TCP 传输控制协议
linux·网络·笔记·网络协议·学习·tcp/ip