在浏览器中输入网址,回车后会发生什么
- 首先是解析网址到IP地址,包括浏览器可能会有网址到IP地址的缓存,以及本地的hosts文件如果有相关记录会直接使用,如果都没有记录,则会向域名服务器发查询请求,域名服务器有层级结构,我们会先向最底层域名服务器请求,如果服务器中也没有记录,会一层层向上请求,得到结果后返回浏览器。
- 然后是向IP地址发送请求,具体说是向IP的特定端口发送请求,一般http协议是80端口,https协议是443端口。这一步会涉及网络7层模型,及各层的各种协议,比如TCP协议,IP协议,ICMP协议等等。
- IP地址对应的服务器收到请求后,会执行相应的动作,这里具体的动作与服务端的架构有关,比如如果是请求静态资源,可能直接返回,如果是某个后端服务接口,还可能向后转发请求等等,最终,会返回一个响应。
- 浏览器收到响应后,也会执行相应的逻辑,如果是静态资源,如HTML或CSS文件,会解析文件并渲染页面,如果是json格式响应体,通常由js代码接收并处理。
网络7层模型都是哪7层
从上层向下分别是:
- 应用层
- 会话层
- 表示层
- 传输层
- 网络层
- 数据链路层
- 物理层
现在使用比较广泛的是TCP/IP4层模型:
- 应用层
- 传输层
- 网络层
- 物理层
常用状态码的含义:401,403,404,500
- 401:未登录
- 403:已登陆,但没有权限
- 404:请求的资源不存在
- 500:服务端产生内部错误
按照REST风格设计一个学生管理系统的路由
定义一个学生实体,对该实体分别定义增删改查的路由:
- 增加学生:POST方法,路由:/student,学生信息放到请求体中
- 删除学生:DELETE方法,路由:/student/{studentId},没有请求体
- 修改学生信息:PUT方法,路由:/student/{studentId},要修改的内容放到请求体中
- 查询学生信息:GET方法,路由:/student/{studentId},没有请求体,也不加参数
- 批量查询学生列表:GET方法,路由:/student,通过query参数增加筛选条件
GET方法和POST方法的区别
- 从使用场景上看,GET通常用来获取资源,POST通常用来提交资源
- GET方法不能有请求体,POST方法可以有,或者说,GET方法既是带了请求体,服务端也大概率不处理
- GET方法把参数放到query里,POST方法把参数放到请求体里,这也导致了GET方法携带的参数长度会受请求长度限制,而POST方法通常没有限制,请求体可以很大
- GET方法通常来说比POST方法更不安全,因为参数是直接拼接在URL后的