文章目录
一、get 和 post 的区别?
- get 和 post 都是 HTTP 协议中的两种发送请求的方法。底层都是 TCP 链接。
- http 报文层面:get 是把数据放在 url 中,而 post 将数据放在请求体中。
- 数据库层面:get 符合幂等性(幂等性:对数据库的一次操作和多次操作的结果都是一致的)和安全性(对数据库的操作没有改变数据库的数据),因为get 请求一般用于做查询操作;post 不符合幂等性和安全性(post 一般是作用在上一级 url 上的,每次请求都会添加一份新资源,因此不符合幂等)post 一般是往数据库提交数据改变数据库,不符合安全性
- get 请求携带参数有限,post 可以携带更多数据;
- get 可以被缓存、被存储(会保存在浏览器的浏览记录中,url 可以保存为浏览器书签),而 post 不行。
- get 产生一个 TCP 数据包,post 产生两个 TCP 数据包。对于 get 请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 post,浏览器先发送 header,服务器响应 100,然后浏览器再发送 data,服务器响应 200 ok(返回数据)。但是并不是所有的浏览器都会在 post 中发送两次包,Firefox 只发送一次。
二、详解 http 协议
三、在浏览器地址栏键入URL,按下回车之后经历的流程
- 浏览器查询 DNS 服务器解析出该域名对应的 ip 地址
- 浏览器根据解析出的 ip 地址和默认的端口号(80)与服务器建立一个 TCP 连接
- 浏览器向服务器发起 http 请求
- 服务器对该请求做出响应并把对应带有 html 文本的 http 响应报文发送给浏览器
- 浏览器收到 html 并渲染在页面上
- 浏览器释放 TCP 连接
四、http 的状态码
- 五种可能的取值:
- 1xx:指示信息:表示请求已接收,继续处理
- 2xx:成功:表示请求已经被成功接收、理解、接受
- 3xx:重定向:要完成请求必须进行进一步操作
- 4xx:客户端错误:请求有语法错误或请求无法实现
- 5xx:服务器端错误:服务器未能实现合法的请求
- 常见状态码:
200 ok:成功
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务。比如:IP 被禁了
404 Not Found:请求资源不存在。比如:输入了错误的 URL
500 Internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的额请求,一段时间后可能恢复正常
五、Cookie 和 Session 的区别
HTTP 本身是无连接,正常我们每次请求数据都要重新建立携带数据连接(如登录),但是这样相当麻烦,因此我们引入了某些机制让 http 具备状态,其中两个便是 cookie,session。
cookie简介
- cookie 是客户端的解决方案
- 是由服务器发起客户端的特殊信息,以文本的形式存放在客户端
- 客户端再次请求的时候,会把 cookie 回发
- 服务器接收到后,会解析 cookie 生成与客户端相对应的内容
session 简介
- session 是服务端的机制,服务器使用一种类似于散列表的结构在服务器保存信息
- 解析客户端请求并操作 session id,按需保存状态信息
- 当程序需要为某个客户端创建 session,首先检查客户端请求中是否包含一个 session id,如果已经包含则说明以前已经为这个客户端创建了一个 session,服务器就按照这个 session id 从服务器把这个 session 检索出来使用。如果不包含 session id,则为这个客户端创建一个 session 并生成 session id,并把这个 session id 发送回客户端进行保存。
cookie 和 session 的区别
- 存储位置不同:cookie 数据放在客户的浏览器上,session 数据放在服务器上
- 存储容量不同:cookie 有大小限制以及浏览器在存 cookie 的个数也有限制,session 是没有上限的,但出于对服务器端的性能考虑,session 内不要存放过多的东西,并且设置 session 删除机制。
- 存储方式不同:cookie 只能保管 ASCII 字符串,并需要通过编码方式存储为 Unicode 字符或者二进制数据,session 中能够存储任何类型的数据。
- 有效期不同:开发可以设置 cookie 的属性,达到使 cookie 长期有效的效果。
- session 依赖于名为 JSESSIONID 的 cookie,而 cookie JSESSIONID 的过期时间默认为 -1,只需要关闭窗口该 session 就会失效,因而 session 不能达到长期有效的效果
- 跨域支持上不同:cookie 支持跨域名访问,而 session 不支持。
六、http 中的 keep-alive?
http 协议采用 ”请求-应答“ 模式,当使用普通模式,即非 keep-alive 模式时,每个请求/应答,客户端和服务器都要建立连接,完成之后立即断开连接。当使用 keep-alive 模式(持久化连接)时,keep-alive 功能使客户端和服务器连接持久有效,当出现对服务器后继请求时,keep-alive 功能避免了重新建立连接。
七、服务器上,请求服务的时候,响应速度特别慢,你帮我分析一下?
这种问题,无非四方问题。客户端,网络,服务器硬件,服务器软件。
- 排查本地客户端所处的网络是否比较拥塞,可以尝试访问不同的网址来进行验证
- 有可能是公司服务器内部网络比较拥塞,可以看看公司的其它服务是否正常对外提供服务。
- 服务器硬件,可以查看一下服务器的硬件资源,比如,cpu 是否被打满,带宽是否被打满,内存是否不足,硬盘空间是否被占满而导致系统运行慢。
- 服务器软件,看看是否是我们的服务器当前请求过多,服务器满载,服务器是否在处理请求的时候,内部因为 bug 的问题而导致响应慢,服务器内部是否 IO 相关的代码没有优化,导致性能瓶颈之类的。
八、1G内存的服务器存100G的文件该怎么弄?
服务器是否可以有多台,切分存储是否可以,是要把数据真正存储在内存?还是要通过一定的方式,暂存在硬盘,需要的时候,再分批导入。