Linux—应用层协议HTTP
HTTP协议
虽然我们说,应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现 成的,又非常好用的应用层协议,供我们直接参考使用.HTTP(超文本传输协议)就是其 中之一。
在互联网世界中,HTTP(HyperTextTransfer Protocol,超文本传输协议)是一个至 关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输 超文本(如HTML文档)。
HTTP协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送 请求,服务器收到请求后处理并返回响应。HTTP协议是一个无连接、无状态的协 议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。
认识URL
平时我们俗称的"网址"其实就是说的URL

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

"+" 被转义成了"%2B"
urldecode 就是urlencode的逆过程;
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中.

HTTP的方法

其中最常用的就是GET方法和POST方法.
GET方法(重点)
用途:用于请求URL指定的资源。
示例:GET /index.html HTTP/1.1
特性:指定资源经服务器端解析后返回响应内容。
POST方法(重点)
用途:用于传输实体的主体,通常用于提交表单数据。
示例:POST /submit.cgi HTTP/1.1
特性:可以发送大量的数据给服务器,并且数据包含在请求体中。
PUT方法
用途:用于传输文件,将请求报文主体中的文件保存到请求URL指定的位置。
示例:PUT /example.html HTTP/1.1
特性:不太常用,但在某些情况下,如RESTfulAPI中,用于更新资源。
HEAD方法
用途:与GET方法类似,但不返回报文主体部分,仅返回响应头。
示例:HEAD /index.html HTTP/1.1
特性:用于确认URL的有效性及资源更新的日期时间等
DELETE方法
用途:用于删除文件,是PUT的相反方法。
示例:DELETE/example.htmlHTTP/1.1
特性:按请求URL删除指定的资源。
OPTIONS方法
用途:用于查询针对请求URL指定的资源支持的方法。
示例:OPTIONS*HTTP/1.1
特性:返回允许的方法,如GET、POST等。
HTTP的状态码

最常见的状态码,比如200(OK),404(NotFound), 403(Forbidden), 302(Redirect, 重定 向), 504(Bad Gateway)
重定向相关状态码的表格:

关于重定向的验证,以301为代表 HTTP状态码301(永久重定向)和302(临时重定向)都依赖Location选项。以下 是关于两者依赖Location选项的详细说明:
HTTP状态码301(永久重定向): • 当服务器返回HTTP301状态码时,表示请求的资源已经被永久移动到新的位 置。 • 在这种情况下,服务器会在响应中添加一个Location头部,用于指定资源的新位 置。这个Location头部包含了新的URL地址,浏览器会自动重定向到该地址。 • 例如,在HTTP响应中,可能会看到类似于以下的头部信息:

HTTP状态码302(临时重定向): • 当服务器返回HTTP302状态码时,表示请求的资源临时被移动到新的位置。 • 同样地,服务器也会在响应中添加一个Location头部来指定资源的新位置。浏览 器会暂时使用新的URL进行后续的请求,但不会缓存这个重定向。 • 例如,在HTTP响应中,可能会看到类似于以下的头部信息:

总结:无论是HTTP301还是HTTP302重定向,都需要依赖Location选项来指定资 源的新位置。这个Location选项是一个标准的HTTP响应头部,用于告诉浏览器应该 将请求重定向到哪个新的URL地址。
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连接。
HTTPCookie
HTTP Cookie(也称为WebCookie、浏览器Cookie或简称Cookie)是服务器发送到 用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一 浏览器,如保持用户的登录状态、记录用户偏好等。
工作原理
当用户第一次访问网站时,服务器会在响应的HTTP头中设置Set-Cookie 字段,用于发送Cookie到用户的浏览器。
○ 浏览器在接收到Cookie后,会将其保存在本地(通常是按照域名进行存 储)。
○ 在之后的请求中,浏览器会自动在HTTP请求头中携带Cookie字段,将之 前保存的Cookie信息发送给服务器。
分类
○ 会话Cookie(Session Cookie):在浏览器关闭时失效。
持久Cookie(Persistent Cookie):带有明确的过期日期或持续时间, 可以跨多个浏览器会话存在。 如果cookie 是一个持久性的cookie,那么它其实就是浏览器相关的,特 定目录下的一个文件。但直接查看这些文件可能会看到乱码或无法读取的内容, 因为cookie 文件通常以二进制或sqlite格式存储。一般我们查看,直接在浏览 器对应的选项中直接查看即可。
用途
用户认证和会话管理(最重要)
跟踪用户行为
缓存用户偏好等
比如在chrome浏览器下,可以直接访问:chrome://settings/cookies
设置cookie
○ HTTP 存在一个报头选项:Set-Cookie,可以用来进行给浏览器设置Cookie 值。
○在HTTP响应头中添加,客户端(如浏览器)获取并自行设置并保存 Cookie。 基本格式 C++ Set-Cookie: = 其中 是 Cookie 的名称, 是 Cookie 的值。
基本格式
Set-Cookie: <name>=<value>其中 是 name是Cookie 的名称, value是 Cookie 的值。
HTTPSession
HTTP Session是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP 协议是无状态的(每个请求都是独立的),因此服务器需要通过Session来记住用户 的信息。
工作原理
当用户首次访问网站时,服务器会为用户创建一个唯一的Session ID,并通过 Cookie 将其发送到客户端。 客户端在之后的请求中会携带这个Session ID,服务器通过Session ID来识 别用户,从而获取用户的会话信息。 服务器通常会将Session信息存储在内存、数据库或缓存中。
更多推荐




所有评论(0)