收集了一些最近面试碰到的面试题答案,回答不妥的请大家补充或留言哦
1.http的连接的三次握手:
(1)首先由客户端发起一个含有同步序列号标志位的数据(SYN)给服务端,告诉它我已经准备好了,你可以用哪个序列号作为起始数据回应我
(2)服务端收到SYN包以后,会返回一个带有确认ack包和SYN包的数据,告诉客户端,我已经收到了你的请求,你可以发送数据了;你要用 哪个序列号作为起始回应我
(3)客户端收到后,再次发送ack确认包,告诉服务器,我收到了你的回复,现在要开始传输数据了
2.http的4次挥手
(1)主机A通知TCP数据已经发送完成,TCP向主机B发送一个fin标志的报文
(2)主机B收到这个报文以后,向主机A发送一个确认包。并告诉自己的程序,对方要关闭连接
(3)主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段
(4)主机A收到fin报文以后,向主机B发送一个ACk,彻底断开连接
3.HTTP的常用的响应代码和含义
200:请求成功,成功的意义与请求类型有关系:
GET: 资源已经被提取,并作为响应体传回客户端
POST: 服务器已经处理了客户端传来的数据,适合的资源作为响应体传回客户端
301:永久重定向
302:临时重定向
304:未修改,可以从缓存里获取
400:访问的页面域名不存在或者请求错误
401:没有访问权限,需要进行身份认证
403:资源不可用,没有权限,服务端拒绝访问
404:服务器找不到所请求的资源,
500:服务器内部错误,比如说请求数量过多,处理不过来
502:网关错误
503:服务器忙
505:服务器不支持客户端发送的HTTP请求中所使用的HTTP协议版本.
4.get和post的区别
(1)传参方式的区别
get 方法会把请求的数据以key-value的形式放在url里,以?分割url和参数,参数之间用&来连接,所以相对不安全;而post方法,则是把数据放在请求体里面,相对比较安全,但是是明文的,抓包就可以抓到,其实也不安全
(2)发送数据大小区别
get请求受限于浏览器和web服务器,数据大小有限
post发送数据受限于服务端设置,比GET长得多
(3)安全性区别
(4)设计用途的区别
get一般用来获取数据,不操作数据,参数少
post一般用来修改数据,新增,修改,需要更安全,参数多
(5)性能上
get会把数据缓存起来,加载静态资源(如图片、js这类)都是用get请求
post则不会缓存,相对来说慢点
5.http和https的区别
http:超文本传输协议,用明文传输。用80端口
https:安全套接字层超文本传输协议,在Http的基础上加入了ssl+证书,加密传输数据,用443端口。要用到ca证书,需要一定费用
6.cookie 和session的区别
cookie是以文本格式存在客户端的,存储数量有限,用户看得见,不安全;
session是存在服务端的,可以存无限多个,但是要频繁从服务器读取,比较耗服务端内存.但是比cookie更可靠。
7.HTTP请求报文与响应报文格式
请求报文:请求行(请求方法,URI,http版本信息),请求头,空行,请求体
响应报文:响应行(包括http版本,状态码),响应头,空行,响应体
8.一般请求的header里有什么字段
Host:请求资源所在服务器
accept:客户端可以接受的body格式,application/json 就是json格式;text/plain 纯文本格式;text/html html格式;*/* 所有格式。逗号隔开,有顺序,如果没有这个字段,默认接收所有
accept-Encoding:指定浏览器支持的返回编码类型
accept-Language:可接受的自然语言
Connection:是否需要持久连接,keep-alive,如果是http1.1则默认是持久连接
cookie:这是最重要的请求头信息之一
user-agent:当前请求的客户端类型
Authorization:授权信息
Content-Length:消息正文的长度
9.一次完整的http请求事务包含的环节
1.客户端和服务端建立连接
2.客户端向服务端发送请求
3.服务器收到后给与响应信息
4.客户端将返回的内容解析呈现,断开连接