【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
🎁个人主页:我们的五年
🔍系列专栏:Linux网络编程
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
Linux网络编程笔记:
https://blog.csdn.net/djdjiejsn/category_12885098.html
前言:
前面讲了HTTP的请求,响应格式。但是里面的知识点还没有细讲。报文里面的内容没有讲。这篇就是对HTTP的详细讲解。
目录
1.简单信息
1.1HTTP的基本信息:
1.2URL网址:
2.请求格式:
2.1基本格式:
3.请求方法:
3.1GET方法:
3.2POST方法:
3.3PUT方法:
3.4HEAD方法:
3.5DELETE方法:
3.6OPTIONS方法:
4.HTTP响应状态码(了解):
4.1:1开头的状态码
4.2:2开头的状态码
4.3:3开头的状态码
4.3:4开头的状态码
4.3:5开头的状态码
5.重定向:
6.报头header
6.2关于session
6.3关于connection
1.简单信息
1.1HTTP的基本信息:
HTTP的英文是:(HyperText Transfer Protocol)超文本传输协议首字母的缩写。
超文本可以添加链接,有了链接,就可以从一个网站到另一个网站,可以传输图片,视频,音频,
超文本(Hypertext)是一种通过链接将文本的不同部分或不同文本之间相互连接的文本结构。
超文本最重要的部分就是链接功能了。
HTTP协议就是定义了浏览器(客户端Client)和服务器(服务端Server)的协议。HTTP是浏览器和服务器之间通信的基础。客户端给服务器发送请求,然后服务器收到以后,对请求进行处理,然后给客服端回响应。响应的可能是服务器上的资源(GET方法),或者提交资源(POST方法)……
HTTP是无连接的,无状态的协议,每次请求都要建立新的连接,服务器也不会保存客户端的信息。对于网站让我们登录进去可以,就认识我们了,以后每次请求都认识我们了,是服务器里面cookie的功劳。
1.2URL网址:
然后URL网址的基本信息,之前也讲过了,Encode,DeCode,下面的图讲的也是非常的清楚。
关于Encode,DeCode就可以去看这篇文章:
【Linux网络编程】:URL(encode),HTTP协议,telnet工具-CSDN博客
2.请求格式:
基本的格式这篇文章也讲了:(点击进入就可以)
【Linux网络编程】:URL(encode),HTTP协议,telnet工具-CSDN博客
2.1基本格式:
基本格式就是是这样,然后就是讲里面的具体参数了。
请求报头Header会有一个参数Content-Length来标识请求正文的长度。
空行后面的内容就是请求正文。
3.请求方法:
请求方法有很多种,用了区分请求是要干什么,服务器要知道客户端要干什么才有后面的。
虽然请求有很多种,但是每种不可能都执行,大部分都是不允许的,比如向服务器上次资源(百度网盘,这种服务方向的除外),基本的是不允许随便上传,或者再向写文章,在抖音上产视频,也只是开放了部分的资源。部分接口。在合理,正常功能内上传资源,删除资源肯定是没问题了。
下面的表格由Kimi生成。
3.1GET方法:
🍟作用:用于请求URL的指定资源。
🍟示例:GET(请求方法) /index.html(URL) HTTP/1.1(HTTP版本)。(请求行,要请求的就是服务器下面的iindex.html,当然可以对这个路径进行解析,在开头增加目录)。
🍟特性:指定资源经服务器端解析后返回响应内容。
3.2POST方法:
🍟用途:用于传输实体的主体,通常用于提交表单数据。
🍟示例:POST submit.cgi HTTP/1.1
🍟特性:可以发送大量的数据给服务器,并且数据包含在请求体中。
3.3PUT方法:
🍟用途:用于传输文件,将请求报文主体中的文件保存到请求 URL 指定的位置。
🍟示例:PUT /example.html HTTP/1.1
🍟特性:不太常用,但在某些情况下,如 RESTful API 中,用于更新资源。
3.4HEAD方法:
🍟用途:与 GET 方法类似,但不返回报文主体部分,仅返回响应头。
🍟示例:HEAD /index.html HTTP/1.1
🍟特性:用于确认 URL 的有效性及资源更新的日期时间等。
3.5DELETE方法:
🍟用途:用于删除文件,是 PUT 的相反方法。
🍟示例:DELETE /example.html HTTP/1.1
🍟特性:按请求 URL 删除指定的资源。
3.6OPTIONS方法:
🍟用途:用于查询针对请求 URL 指定的资源支持的方法。
🍟示例:OPTIONS * HTTP/1.1
🍟特性:返回允许的方法,如 GET、POST 等。
4.HTTP响应状态码(了解):
虽然定了规定的状态码,但是各个浏览器器直接没有好好的遵循。各个浏览器之间是竞争关系,状态码也各不一样。对于对于状态码浏览器来说,状态码也没那么重要。
所以在不同的浏览器之间,相同的状态码表示不同的信息。
前端工作人员可能也不会严格遵循,毕竟还要做兼容性检查。不同状态码也能被解释。
4.1:1开头的状态码
1xx(信息性状态码):请求已被接受,正在继续处理。
具体的看下表:
100,主要是在上传大型文件的时候,表示服务器已经接受到了,正在处理。
4.2:2开头的状态码
2xx(成功状态码):请求已成功被服务器处理。
4.3:3开头的状态码
3xx(重定向状态码):客户端需要进一步操作才能完成请求
4.3:4开头的状态码
请求有错误,客户端可能需要修改请求
4.3:5开头的状态码
5xx(服务器错误状态码):服务器在处理请求时发生了错误
5.重定向:
重定向有两种,一种是临时重定向,还有一种是永久重定向。不管是永久重定向还有临时重定向,都是和报头中的location有关的,当请求的URL需要重定向到新的URL时,header就会带location信息。
比如下面就是302临时重定向,错误码描述是Found,然后需要重定向到https://www.new-url.com。(这里)
HTTP/1.1 302 Found\\r\\n
Location: https://www.new-url.com\\r\\n
6.报头header
报文里面可能下面以下信息,也可以一个都没有,比如有正文body,但是没有Content,浏览器一样可以解释,浏览器还是很厉害的。
然后就是我们可以根据请求的资源区分是什么类型的文本,HTML还是TXT,还是其他的。
Content-Type: 数据类型(text/html 等)。
Content-Length: Body 的长度。
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
6.1关于cookie:
cookie会保存我们的信息,比如我们登陆一个网站,输入了用户名,密码。下次访问这个网站的时候,就直接把这些信息加到HTTP请求里面。我们就不需要进行登录了,然后就可以查看这些信息了,当然这些信息我们解析不出来是什么。
6.2关于session
session的话,就是防止我们的信息泄露,再保存了cookie信息的时候,只用代号进行传输,当然代号也可以被盗走,但至少我们具体的用户名,信息不会盗走。也就是可能黑客可以登录盗走的QQ,但是没有办法知道密码,进行改密码。
6.3关于connection
这个就表示连接的信息:需要长连接还是短连接。HTTP1.1版本默认使用长连接,即报头没有connection信息的时候,就是和服务器建立长的连接。HTTP1.0使用的是短连接,要长连接需要再报头中加入Connection: keep-alive。
HTTP/1.1:在 HTTP/1.1 协议中,默认使用持久连接。当客户端和服务器都不明确指定关闭连接时,连接将保持打开状态,以便后续的请求和响应可以复用同一个连接。
HTTP/1.0:在 HTTP/1.0 协议中,默认连接是非持久连接。如果希望在 HTTP/1.0上实现持久连接,需要在请求头中显式设置 Connection: keep-alive。