【网络】HTTP协议——应用层协议、URL、HTTP协议格式、HTTP的方法、HTTP的状态码、HTTP常见Header

Linux网络

1. 应用层

  应用层是 OSI 七层模型或 TCP/IP 四层模型中的最高层,它直接为用户的应用程序提供服务。

  应用层的主要作用是实现不同应用进程之间的通信和交互,使得用户能够通过网络获取所需的信息或完成各种任务。

  

  协议是一种 “约定”。socket api的接口,在读写数据时,都是按 “字符串” 的方式来发送接收的,如果我们要传输一些"结构化的数据" ,此时就要使用我们的应用层协议。

  

  应用层协议:

  应用层协议则是定义了应用程序之间通信的规则和数据格式。

  常见的应用层协议有 HTTP(用于网页浏览)、FTP(文件传输)、SMTP(电子邮件发送)、POP3(电子邮件接收)等。

  例如,当您在浏览器中输入网址访问网页时,浏览器就会使用 HTTP 协议与服务器进行通信,按照 HTTP 协议规定的格式和规则来请求和接收网页数据。

  

  我们只要保证,由一端发送构造的数据,在另一端能够正确的进行解析,就是ok的,这种约定,就是应用层协议。

  

在这里插入图片描述

  

2. HTTP协议

  HTTP 协议(超文本传输协议)

  HTTP 协议是用于在万维网(World Wide Web)上进行通信的核心协议。

  它是一种基于请求 - 响应模式的应用层协议,客户端(通常是浏览器)向服务器发送 HTTP 请求,服务器则返回相应的 HTTP 响应。

  HTTP 请求:

  请求包含三部分:请求行、请求头和请求体。请求行指明了请求方法(如 GET、POST、PUT、DELETE 等)、请求的资源 URL 和使用的 HTTP 版本。请求头包含了关于客户端和请求的各种信息,例如客户端支持的语言、编码方式等。请求体通常在 POST 等方法中用于传输数据。

  

2.1 URL

  URL(统一资源定位符)是用于标识互联网上资源位置的字符串。

  它就像是一个地址,告诉浏览器或其他网络应用程序如何找到特定的资源,如网页、图片、文件等。

  互联网上的所有资源都具有一个唯一的名称标识,这个标识叫URL。

  

  URL 通常由以下几个部分组成:

  协议:如 http(超文本传输协议)、https(安全的超文本传输协议)、ftp(文件传输协议)等,指明了访问资源所使用的规则和方法。

  域名或 IP 地址:表示资源所在的服务器地址。例如,www.baidu.com 或 192.168.0.1 。

  端口号(可选):如果使用的不是默认端口(如 http 的 80 端口,https 的 443 端口),则需要指定端口号。

  路径:服务器上资源的具体位置。

  查询字符串(可选):用于向服务器传递参数,以获取特定的资源或执行特定的操作。

  片段标识符(可选):用于指定文档内的特定部分。

  

  例如,https://www.example.com/page?param1=value1&param2=value2#section 这个 URL 中:

  https 是协议。

  www.example.com 是域名。

  /page 是路径。

  ?param1=value1&param2=value2 是查询字符串。

  #section 是片段标识符。

  

2.2 urlencode和urdecode

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

  比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。

  

  转义的规则如下:

  将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。

  如 “+” 被转义成了 “%2B”

  

  urlencode(URL 编码)

  urlencode 是一种将字符串转换为符合 URL 格式的编码方式。 它的主要目的是将可能在 URL 中引起歧义或不被支持的字符进行编码,以确保 URL 的正确传输和解析。
例如,空格会被编码为 %20 ,特殊字符如 & 会被编码为 %26 等。这样可以避免这些字符在 URL 中被误解为分隔符或具有其他特殊含义。

  

  urldecode(URL 解码)

  urldecode 则是 urlencode 的逆过程,它将经过编码的 URL 字符串还原为原始的字符串。
  比如,接收到一个编码后的 URL

  https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Dhello%2Bworld ,通过 urldecode 可以将其解码为 https://www.example.com/search?q=hello world 。

  

2.3 HTTP协议格式

在这里插入图片描述
  

请求报文格式:

  请求行:包含请求方法(如 GET、POST、PUT、DELETE 等)、请求的 URL 以及使用的 HTTP 版本,例如:GET /index.html HTTP/1.1 。

  请求头:由一系列键值对组成,每行一个,例如:Host: www.example.com 、User-Agent: Mozilla/5.0 等,用于提供关于请求的附加信息,如客户端的类型、支持的语言等。

  空行:用于分隔请求头和请求体。

  请求体:在 POST 等请求方法中用于传输数据,其内容的格式由 Content-Type 请求头指定。

在这里插入图片描述

  

响应报文格式:

  状态行:包含 HTTP 版本状态码(如 200 OK、404 Not Found 等)和状态描述,例如:HTTP/1.1 200 OK 。

  响应头:与请求头类似,也是一系列的键值对,如 Content-Type: text/html 、Content-Length: 1234 等,用于提供关于响应的信息。

  空行:分隔响应头和响应体。

  响应体:包含服务器返回给客户端的实际数据,如网页的 HTML 代码、图片的二进制数据等。

在这里插入图片描述

  

2.4 HTTP的方法

  HTTP 定义了多种方法,用于指定对资源的操作类型。

在这里插入图片描述

  
在这里插入图片描述

  

2.5 HTTP的状态码

  1xx 信息性状态码

  这类状态码表示服务器正在处理请求。

  100 Continue:表示客户端应当继续发送请求。通常在发送大文件或分块请求时使用。

  

  2xx 成功状态码:

  表示请求已成功被服务器接收、理解、并接受。

  200 OK:最常见的成功状态码,表示请求成功,响应包含请求的资源。

  201 Created:表示请求成功并且服务器创建了新的资源。

  204 No Content:表示服务器成功处理了请求,但没有返回任何内容。

  

  3xx 重定向状态码:

  表示需要客户端采取进一步的操作以完成请求。

  301 Moved Permanently:表示请求的资源已被永久移动到新的 URL,客户端应使用新的 URL 访问。

  302 Found:表示请求的资源临时被移动到了其他位置。

  304 Not Modified:表示客户端的缓存版本仍然有效,服务器未返回新内容。

  

  4xx 客户端错误状态码:

  表示客户端的请求包含错误语法或无法完成请求。

  400 Bad Request:表示服务器无法理解客户端的请求。

  401 Unauthorized:表示请求需要用户认证。

  403 Forbidden:表示服务器拒绝访问,尽管客户端已通过认证。

  404 Not Found:表示服务器未找到请求的资源。

  

  5xx 服务器错误状态码:

  表示服务器在处理请求时发生内部错误。

  500 Internal Server Error:表示服务器内部错误,无法完成请求。

  502 Bad Gateway:表示作为网关或代理的服务器从上游服务器收到无效的响
应。

  503 Service Unavailable:表示服务器暂时无法处理请求,通常是由于过载或维护。

  
在这里插入图片描述

  

2.6 HTTP常见Header

HTTP 请求头:

  User-Agent提供有关发起请求的客户端的信息,包括浏览器类型、版本、操作系统等。

  例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

  

  Accept告知服务器客户端能够接受的内容类型。

  例如:Accept:   text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8

  

  Accept-Language指定客户端偏好的语言。

  例如:Accept-Language: en-US,en;q=0.5

  

  Accept-Encoding表明客户端支持的内容编码方式。

  例如:Accept-Encoding: gzip, deflate, br

  

  Referer提供当前请求页面的来源页面的 URL。

  例如:Referer: https://www.example.com/page1.html

  

  Cookie包含客户端发送给服务器的 Cookie 信息。

  例如:Cookie: session_id=12345; user_id=6789

  

HTTP 响应头:

  Content-Type指明响应体的内容类型。

  例如:Content-Type: text/html; charset=UTF-8

  

  Content-Length表示响应体的长度(以字节为单位)。

  例如:Content-Length: 1234

  

  Server标识处理请求的服务器软件。

  例如:Server: Apache/2.4.41 (Ubuntu)

  

  Location用于重定向,提供重定向的目标 URL。

  例如:Location: https://www.newpage.com

  

  Set-Cookie服务器向客户端设置 Cookie。

  例如:Set-Cookie: user_name=John; expires=Thu, 01 Jan 2025 00:00:00 GMT; path=/

  

  Cache-Control控制缓存策略。

  例如:Cache-Control: max-age=3600, public

  

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鳄鱼麻薯球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值