目录
一、HTTP协议
1.1 HTTP概念
1.2 HTTP协议的格式
1.3 URL
1.4 HTTP的请求方法
1.5 HTTP的状态码
1.6 HTTP报头
1.7 长链接与短链接
1.8 Cookie与Session
1.8.1 Cookie的概念
1.8.2 Cookie的应用场景
1.8.3 Session的概念
一、HTTP协议
1.1 HTTP概念
HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本的协议。它是客户端和服务器之间进行通信的基础协议,它是超文本传输协议的缩写,更准确地说是用于从万维网服务器传输超文本到本地浏览器的传送协议。
1.2 HTTP协议的格式
其中请求行(状态行)和请求报头(响应报头)被统称为http报头,而请求正文(响应正文)被称为有效载荷。
接下来我们来逐一认识请求行中的元素。
1.3 URL
URL其实就是我们平时所称的“网址”:
urlencode和urldecode像 / ? : 等这样的字符 , 已经被 url 当做特殊意义理解了 . 因此这些字符不能随意出现 .比如 , 某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义 .转义的规则如下:将需要转码的字符转为 16 进制,然后从右到左,取 4 位 ( 不足 4 位直接处理 ) ,每 2 位做一位,前面加上 % ,编码成 %XY格式如下图中 "+" 被转义成了 "%2B"urldecode 就是 urlencode 的逆过程。
1.4 HTTP的请求方法
其中GET和POST方法是最常用的:
- GET方法,如果提交参数,是通过url方式进行提交的。
- POST方法,如果提交参数,是通过正文进行提交的。
它们的区别在于:
- 参数提交的位置不同,POST方法比较私密(私密 != 安全),不会回显到浏览器的url输入框。
- GET是通过url传参的,而url是有大小限制的,和具体浏览器有关。POST方法是由正文部分传参,一般大小没有限制。
1.5 HTTP的状态码
最常见的状态码,比如:
200(OK), 404(Not Found),403(Forbidden),302(Redirect, 重定向), 504(Bad Gateway)
其中重定向是指当访问一个网站的时候,会跳转到另一个网址(老网站过期,跳转到新网站),或者是访问网站时,提示登陆,然后跳转到登录页面,登陆后自动跳转会原来的页面,像这些现象就是重定向。
重定向状态码,需要浏览器提供支持,server要告诉浏览器应该跳转到哪里。而http报头中的Location就起到这个作用。
1.6 HTTP报头
HTTP常见Header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能。
1.7 长链接与短链接
- 在HTTP/1.0中,每次请求和响应都需要建立和关闭连接,这被称为短链接。
- 而在HTTP/1.1中,引入了持久链接(也称为长链接)的概念,允许多个请求和响应通过同一个TCP链接进行传输。
- 在HTTP/1.1中,持久链接通过在请求头中添加"Connection: keep-alive"来表示客户端希望保持链接,而服务器则可以在响应头中添加"Connection: keep-alive"来确认是否支持持久链接。如果服务器不支持持久链接,会在响应头中添加"Connection: close"来表示关闭链接。
1.8 Cookie与Session
1.8.1 Cookie的概念
Cookie是一种在客户端(通常是Web浏览器)和服务器之间传递数据的机制。Cookie由服务器生成,服务器发送一个Cookie给客户端时,它会包含一个Key-Value键值对,以及一些可选的属性,如过期时间、域名、路径等。客户端接收到Cookie后,会将其保存在本地,并在后续的请求中自动将该Cookie发送给服务器。
- 在浏览器角度:Cookie其实是一个文件,该文件里保存的是用户的私密信息。
- 在http协议角度:一旦该网站有对应Cookie,在发起任何请求的时候,都会自动在request中携带该Cookie信息。
1.8.2 Cookie的应用场景
那么Cookie有什么作用呢?
① 避免重复登录(记住密码)
当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页(例如:Bilibili)。
② 权限验证
由于HTTP是一种无状态(不知道上一次访问该网站的用户是谁)的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie其实是存在一定的安全隐患的,别人盗取自己的Cookie文件,就可以用我的身份进行认证访问特定资源;如果Cookie中保存了,用户名和密码,那么自己的账号可能会被盗取。
因此就有了Session。
1.8.3 Session的概念
session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。
虽然session并不能有效的防止信息泄露,但是衍生出了一些防御措施,例如通过常用ip地址判定用户账号是否存在异常。如果存在异常地址登录,服务器则会废弃掉当前的session_id,让用户重新认证登录。