目录
一、预备知识
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设置为暂停状态,让你重新进行登录认证。