应用层协议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响应中,可能会看到类似于以下的头部信息:
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地址。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值