HTTP协议【Linux网络编程】

本文详细介绍了HTTP的基本原理,包括请求和响应格式、常用方法、状态码、Header中的关键字段如User-Agent和Cookie,以及短连接与长连接的区别。同时讨论了Cookie在会话保持中的作用和安全问题,以及如何通过Session管理和Redis来优化Cookie管理。
摘要由CSDN通过智能技术生成

目录

 

一、预备知识

二、http的请求和响应的格式

​编辑

三、看看响应

 四、看看请求

五、HTTP的方法

六、HTTP的状态码

七、HTTP常见Header 

短连接 & 长连接 

 八、Cookie


一、预备知识

1)域名

https://www.baidu.com/  这是一个域名,经过域名解析后,会得到一个ip。一般http服务器端口是80,https的端口是443。我们没加端口号也能访问某个网页就是因为浏览器帮我们添加了默认的端口号。

2)url:统一资源定位符

3)urlencode和urldecode

少量情况下,我们提交的数据可能会带有一些如“\\”等和url特殊字符冲突的字符,这时浏览器会先对这些字符进行编码和解码。

转义规则:

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

二、http的请求和响应的格式

请求格式:

首行: [方法] + [url] + [版本]
报头(Header): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示

空行:用于分隔报头和正文。

正文(body):Header部分结束Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
 

响应格式:

首行: [版本号] + [状态码] + [状态码解释]
报头(Header): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。

空行:用于分隔报头和正文。
正文(Body): 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中。

三、看看响应

可以用telnet看到响应(\是根目录,一般是首页)

 四、看看请求

User-Agent字段的两个作用:

1)反爬虫,User-Agent是HTTP协议头中的一个字段,用于标识发起HTTP请求的用户代理(User-Agent)信息,通常包括浏览器类型、操作系统、设备类型等信息。在网站防爬虫的情况下,服务器通常会通过检查User-Agent来识别爬虫程序。

2)也常用于网站根据用户不同的设备类型和浏览器类型推荐适配的下载版本或页面内容。

五、HTTP的方法

方法很多,但常用的就前两个:

1、GET - 获取资源,http 1.0 /1.1

2、POST  - 也可以获取资源,但更多的是向服务器提交数据资源

3、其他(只列举部分):

PUT - 传输文件       

HEAD - 只要报头不要正文部分       

DELETE - 删除文件(大部分不允许)

OPTIONS - 询问服务器支持哪些方法

当我们以get方法提交参数时,参数是通过url提交的,参数数量大小受限,会回显,不私密;

而POST方法则是通过请求的正文提交的。

六、HTTP的状态码

1XX:信息状态码,表示接收的请求正在处理(不常见)。

2XX:成功状态码,表示请求正常处理完毕(常见)。

3XX:重定向状态码,需要添加附加操作以完成请求。

4XX:客户端错误状态码,服务器无法处理请求(比如请求的路径不存在404)

5XX:服务器错误状态码,服务器处理请求出错。

永久重定向 & 临时重定向

1. 临时重定向(302 Found):当服务器收到一个请求时,会向浏览器发送一个状态码302,表示请求的资源临时移到另一个位置。浏览器会立即根据响应头信息的Location字段跳转到新的URL所指示的位置。适用于暂时性的重定向,浏览器下次请求还会访问原始URL。 2. 永久重定向(301 Moved Permanently):当服务器收到一个请求时,返回状态码301,表示请求的资源已经永久移到其他位置。浏览器会记住这个重定向,并且下次请求时会直接访问新的URL。适用于永久性的重定向,搜索引擎抓取时也会更新链接。 

七、HTTP常见Header 

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

Connection:
Content-Length: 正文(body)的长度

Host: 客户端告知服务器,所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用,告诉客户端接下来要去哪里访问;

Cookie: 用于在客户端存储少量信息.通常用于实现会话(session)的功能;

短连接 & 长连接 

 1. 短连接:短连接指的是在完成一次通信后立即断开连接的方式。客户端发送请求到服务器,服务器响应后即刻关闭连接。每次通信都需要建立连接、传输数据和断开连接,因此在短时间内可能需要频繁地建立和关闭连接。

2. 长连接:长连接指的是在完成一次通信后保持连接不断开的方式。客户端和服务器之间在建立连接后可以进行多次交互通信,不必重复建立连接,减少了连接的建立和断开过程,提高了通信效率。

Connection选项是用来控制连接的行为的:

(1)keep-alive:表示保持连接。当Connection设置为keep-alive时,表示客户端和服务器之间的连接在请求和响应之后保持打开状态,可以被用于多个请求和响应交互。

(2)close:表示关闭连接。当Connection设置为close时,表示在请求和响应之后立即关闭连接。

 八、Cookie

http协议默认是无状态的,每次请求都是独立的,那当我们登录b站后,关掉浏览器,再打开b站,就不需要我登录了,这是怎么做到的?(http对登录用户的会话保持功能)

登录后,服务器响应报头里的set-Cookie会保存登录信息(账号密码等),浏览器会将set-Cookie保存到Cookie文件中,之后的每次请求就会自动携带set-Cookie。

Cookie文件保存有两种方式:

文件级:写入磁盘了,即使关掉浏览器、客户端、Cookie还是保存着的,不用重新登录。

内存级:没有写入磁盘,关掉浏览器就要重新登录

Session + Cookie

Cookie的会话保持功能虽然给用户的使用带来很大的便利,但也有一些个人隐私和信息泄露的隐患。黑客可以通过盗取用户浏览器的Cookie文件,来进行登录,修改用户密码等操作。有什么解决方案呢?

用户提交登录信息后,服务端会进行认证,认证成功,就生成一个session文件,这个session文件有一个全服务器唯一的sessionid,服务端会将这个id给客户端,客户端浏览器就可以以这个Session id作为Cookie来登录,服务端通过校验这个唯一的id来判断其是否登录。

那如何管理这么多的session文件?先描述,在组织!先在企业一般用Redis集群来托管。 

 session ID是由服务器端统一分配管理的,所以当用户行为出现异常的时候,服务端可以将   该用户的session ID设置为暂停状态,让你重新进行登录认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值