http请求的基础知识
一、什么是http协议?
http协议(Hyper Text Transfer Protocol,超文本传输协议),客户端和服务器进行数据交互的协议。
http协议的特点:
(1)支持客户端/服务端(C/S)模式
(2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
(3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
(4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
二、什么是http请求?
http请求是从客户端向服务端发送请求数据。
一次完整的http请求的步骤
(1)输入url
根据域名/IP找到对应的服务器
(2)建立TCP连接(TCP三次握手)
HTTP协议是基于TCP/IP协议来进行通信的。在HTTP进行工作前,客户机需要与服务器建立连接,而连接是需要通过TCP协议进行传输的,TCP协议与IP协议共同构建了了internet。HTTP协议是比TCP协议更高一层的应用层协议,按照规定,只有低层协议建立后,才能建立更高层协议的连接。因此,在HTTP请求前,首先要建立TCP连接。
(3)客户端向服务器发送请求
TCP连接建立后,客户端向服务端发送请求,包括请求行、请求头、请求体
请求行:①请求方法:GET、POST、PUT、DELETE等;②请求url;③HTTP协议以及版本
请求头:HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,例如:Cookie、UA、Accept-Language等
请求体:POST请求时传递的信息;GET请求没有请求体
(4)服务器接收请求,进行相应处理
(5)处理完成后,做出响应,向客户端发送数据
响应的信息主要包括:响应码、响应头、响应体
响应码:又称状态码,一般响应码由3位数字组成
1XX:指示信息—服务器已经接收请求,继续处理
2XX:成功—请求已经被接收成功
3XX:重定向—完成请求需要更进一步的操作
4XX:客户端错误—请求有语法错误或请求无法实现
5XX:服务器错误—服务器在处理请求的过程中发生了错误
常见的状态码以及出现的原因:
200:客户端请求成功
302:临时重定向
401:请求未经过授权
403:服务器接收到请求,但是拒绝执行
404:请求的资源不存在(通常是请求的url错误)
500:服务器内部错误
502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
响应头:响应报文头,例如cache、cookie等信息
响应体:服务器返回给客户端的数据
三、cookie、session和token
因为http请求是无状态的,服务器无法从网络连接上识别访问者的身份,为了解决这个问题,就有了cookie
cookie:客户端请求服务器,如果服务器需要记录该用户的状态,就向客户端发送一个cookie,客户端会把这个cookie保存下来,当下次访问服务器时,把请求的网址连同cookie信息,一起发送给服务器,服务器根据接收到的cookie来辨别用户信息。cookie存放在客户端中
session:session是另一种存放会话的机制,主要存放在服务端。当客户端访问浏览器的时候,服务器把客户端信息以某种形式存放在服务器中,这就是session;当程序需要为某个客户端的请求创建session时,先检查客户端的请求中有没有sessionId(用户首次登录服务器创建,并返回给客户端的信息),如果有sessionId,服务器就根据sessionId把这个用户的相关session信息检索出来并使用;如果请求不包含sessionId,则根据session为该用户新创建一个sessionId。session信息譬如:用户账户余额、购物车等信息
token:token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库(个人理解,主要是避免不合法)
使用token进行身份验证的流程:
①客户端使用用户名跟密码请求登录
②服务端收到请求,去验证用户名与密码
③验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
④客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者数据库里
⑤客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
⑥服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
参考文章:https://www.cnblogs.com/jiu0821/p/5641600.html;
https://blog.csdn.net/tobetheender/article/details/52485948;
https://www.jianshu.com/p/fb9eb7b6fec6