应用层协议HTTP

在互联网世界中, HTTP H yper T ext T ransfer P rotocol ,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。
HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。它 是一个 无连接、无状态 的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

1. URL

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

urlencode urldecode

/ ? : 等这样的字符 , 已经被 url 当做特殊意义理解了。 因此这些字符不能随意出现。 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义
转义的规则如下 :
将需要转码的字符转为 16 进制,然后从右到左,取 4 ( 不足 4 位直接处理 ) ,每 2
做一位,前面加上 % ,编码成 %XY 格式

 

"+" 被转义成了 "%2B"
urldecode 就是 urlencode 的逆过程 ;

 HTTP 协议请求与响应格式


 

首行: [方法] + [url] + [版本]

Header: 请求的属性,冒号分割的键值对,每组属性之间使用\r\n 分隔,遇到空行表示 Header 部分结束
Body: 空行后面的内容都是 Body. Body 允许为空字符串.
Header 中会有一个 Content-Length 属性来标识 Body 的长度;

HTTP 响应

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

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

基本应答格式如下:

2. HTTP 常见方法

1. GET方法
用途:用于请求 URL 指定的资源
特性:指定资源经服务器端解析后返回响应内容。
示例:GET /index.html HTTP/1.1
向服务器请求 /index.html 资源,服务器会解析该资源并返回其内容(如 HTML 文件)。
form 表单:https://www.runoob.com/html/html-forms.html

2. POST 方法
用途:用于传输实体的主体,通常用于提交表单数据
特性:可以发送大量的数据给服务器,并且数据包含在请求体中。
示例:POST /submit.cgi HTTP/1.1
form 表单:https://www.runoob.com/html/html-forms.htm

3. HEAD 方法
用途:与 GET 方法类似,但不返回报文主体部分,仅返回响应头
特性:用于确认 URL 的有效性及资源更新的日期时间等。
示例:HEAD /index.html HTTP/1.1

4. OPTIONS 方法
用途:用于查询针对请求 URL 指定的资源支持的方法。
示例:OPTIONS * HTTP/1.1
特性:返回允许的方法,如 GET、POST 等。

3. HTTP的状态码

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

状态码名称含义应用样例补充说明
100Continue服务器已收到请求头,客户端应继续发送请求体上传大文件前,服务器检查请求头后返回 100,允许客户端继续传输文件数据。需配合 Expect: 100-continue 请求头使用。
200OK请求成功访问 https://example.com,服务器返回网页内容。最常用的成功状态码。
201Created资源创建成功POST /articles 创建新文章,服务器返回 201 和新文章的 URL(Location 头)。通常伴随 Location 响应头指向新资源。
204No Content请求成功,但无返回内容DELETE /articles/123 删除文章后,服务器返回 204 表示操作成功。适用于无需返回数据的操作(如删除、更新)。
301Moved Permanently资源永久重定向网站域名从 http 切换到 https,旧链接返回 301 跳转到新地址。搜索引擎会更新索引。
302Found (或 See Other)资源临时重定向用户登录后,服务器返回 302 重定向到个人主页。浏览器下次仍请求原地址。
304Not Modified资源未修改(客户端可使用缓存)浏览器携带 If-Modified-Since 头请求静态资源,服务器返回 304 表示缓存有效。节省带宽,提升性能。
400Bad Request客户端请求错误(如参数格式错误)提交表单时缺少必填字段,服务器返回 400 和错误详情(如 {"error": "Name is required"})。需在响应体中明确错误原因。
401Unauthorized未认证或认证失败访问 /admin 未登录时,服务器返回 401 和 WWW-Authenticate 头要求登录。与 403 的区别:401 是未认证,403 是认证后无权限。
403Forbidden服务器拒绝访问(无权限)普通用户尝试访问 /admin/dashboard,服务器返回 403即使登录也无法访问。
404Not Found资源不存在访问 https://example.com/old-page,但该页面已删除。需检查 URL 是否正确或资源是否被移除。
500Internal Server Error服务器内部错误服务器数据库崩溃,返回 500 和错误日志 ID(如 {"error": "Database timeout"})。需排查服务器端代码或依赖服务。
502Bad Gateway网关/代理服务器从上游服务器收到无效响应使用 Nginx 反向代理时,后端服务崩溃,Nginx 返回 502常见于微服务架构中下游服务不可用。
503Service Unavailable服务不可用(维护或过载)电商大促时服务器过载,返回 503 和 Retry-After: 3600 头(提示 1 小时后重试)。可能伴随维护页面或排队系统。

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

4.HTTP 常见 Header

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

Content-Length: Body 的长度

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值