前端面试关于cookie、session、HTTP - Go语言中文社区

前端面试关于cookie、session、HTTP


1、cookie和session的区别

session是基于cookie实现的,cookie保存在客户端浏览器中,而session保存在服务器上。如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
区别:
1、存在位置:
cookie存在客户端临时文件夹中;session存在于服务器内存中,一个session域对象为一个用户浏览器服务。
2、安全性
cookie是以明文的方式存在客户端的,安全性低,可以通过一个加密算法进行加密后存放;session存放于服务器内存中,所以安全性好。
3、生命周期
cookie的生命周期是累计的,从创建时就开始计时,时间到后生命周期结束。
session的生命周期是间隔的,从创建时开始计时,如果时间到了还没有访问session,那么session的生命周期被销毁。但是如果期间访问过session,那么将重新计算session的生命周期。关机会造成session生命周期的结束,但是对cookie没有影响。
4、访问范围
cookie为多个用户浏览器共享;session为一个用户浏览器独享。

2、浏览器存储的方式

在这里插入图片描述
补充:
cookie 原本并不是用来储存的,而是用来与服务端通信的,需要存取请自行封装 api。而 localStorage、sessionStorage 则自带 getItem 和 setItem 方法,使用很方便。

localStorage /sesstionStorage注意点:
只能存字符串,存取 JSON 数据需配合 JSON.stringify() 和 JSON.parse()。遇上禁用 setItem 的浏览器,需要使用 try…catch 捕获异常

3、HTTP的传输原理

在这里插入图片描述
HTTP想要发送一条报文的时候,需要经过以下两个步骤:
TCP三次握手建立起连接管道,HTTP报文会以流的形式通过该管道按顺序传输;
TCP会将这些数据分别切割成数据块,并且封装在IP分组中,通过IP去传输;

使用TCP作为传输层:
传输可靠
有序

一个典型的HTTP请求过程如下图所示:
在这里插入图片描述
HTTPS的原理:
在这里插入图片描述
HTTPS缺点
慢,初次建立SSL连接,算法复杂,消耗资源
贵,需要每年交一定的费用给证书颁发机构

4、HTTP有哪些方法

1、HTTP1.0定义了三种请求方法:GET、POST、HEAD
2、HTTP1.1新增了六种请求方法:OPTIONS、PUT、DELETE、TRACE、CONNECT、PATCH

这些方法的具体作用是什么:
GET:通常用于请求服务器发送某些资源
POST:发送数据给服务器
HEAD:请求资源的头部信息,并且这些头部信息与GET方法请求时返回的一致。该请求方法的一个使用场景是在下载一个文件前先获取其大小再决定是否下载,这样可以节约带宽资源
OPTIONS:用于获取目的资源所支持的通信选项
PUT:用于新增资源或者使用请求中的有效负载替换目标资源的表现形式
DELETE:用于删除指定资源
TRACE:回显服务器收到的请求,主要用于测试或诊断
CONNECT:HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器
PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新 。

GET和POST有什么区别:
1、数据传输方式不同:
GET请求通过URL传输数据,而POST通过请求体传输数据
2、安全性不同:
POST的数据在请求体内,所以有一定的安全性,而GET的数据在URL中,通过历史记录,缓存很容易查到数据。
3、数据类型不同:
GET只允许ASCII字符,而POST无限制
4、GET无害:
刷新、后退等操作GET请求是无害的,而POST可能重复提交表单。
5、特性不同:
GET安全,这里的安全是只读特性,就是使用这个方法不会引起服务器状态变化。且幂等,幂等是指同一个请求多次执行和执行一次的效果相同。而POST是非安全非幂等的。

PUT和POST都是给服务器发送新增资源,有什么区别:
1、PUT是幂等的,而POST是非幂等的。
2、PUT的URI指向的是具体的单一资源,而POST可以指向资源集合。比如:
我们在开发一个博客系统,当我们要创建一篇文章的时候往往用POST https://www.jianshu.com/articles,这个请求的语义是,在articles的资源集合下创建一篇新的文章,如果我们多次提交这个请求会创建多个文章,这是非幂等的。
PUT https://www.jianshu.com/articles/820357430的语义是更新对应文章下的资源(比如修改作者名称等),这个URI指向的就是单一资源,而且是幂等的,比如你把『小刘』修改成『小华』,提交多少次都是修改成『小华』

PUT和PATCH都是给服务器发送修改资源,有什么区别:
PUT和PATCH都是更新资源,但PATCH是对已知资源进行局部更新。比如:
比如我们有一篇文章的地址https://www.jianshu.com/articles/820357430,这篇文章的可以表示为:

article = {
    author: 'dxy',
    creationDate: '2019-6-12',
    content: '我写文章像小华',
    id: 820357430
}

当我们要修改文章的作者时,我们可以直接发送PUT https://www.jianshu.com/articles/820357430,这个时候的数据应该是:

{
    author:'小华',
    creationDate: '2019-6-12',
    content: '我写文章像小华',
    id: 820357430
}

这种直接覆盖资源的修改方式应该用PUT,但是你觉得每次都带有这么多无用的信息,那么可以发送PATCH https://www.jianshu.com/articles/820357430,这个时候只需要:

{
    author:'小华',
}

5、HTTP请求报文

请求报文由四部分组成:
1、请求行
2、请求头部
3、空行
4、请求体

在这里插入图片描述
请求行包括请求方法字段、URL字段、HTTP协议字段。它们用空格分隔。如:POST /web/index.html HTTP/1.1
请求头部由关键字/值对组成,每行一堆,关键字和值用英文冒号“:”分隔。如:
User-Agent:Mozilla/5.0 (产生请求的浏览器类型)
Accep:text/html,application/xhtml+xml(客户端可识别的内容类型列表)
Host:123.222.22(请求的主机名,允许多个域名同处一个IP地址,即虚拟主机)
**请求体:**请求携带的数据
在这里插入图片描述

6、HTTP响应报文

响应报文由四部分组成:
1、响应行:由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。
2、响应头部:响应部首组成
3、空行
4、响应体:服务器响应的数据

在这里插入图片描述

7、HTTP响应状态码

2XX 成功
200 成功, 表示从客户端发来的请求在服务器被正确处理。
201 已创建,表示请求已经被实现,而且一个新的资源已经依据请求的需要而建立。
202 已接受, 表示请求已被接受,但还没执行。
204 无内容,表示请求成功,但是响应报文不含实体的主体部分。
206 部分内容,表示服务器成功处理了部分GET请求。

3XX 重定向
301 永久性重定向,表示资源已经被分配了新的URL。
302 临时重定向,表示资源临时被分配了新的URL。
303 查看其他位置,表示资源存在着另一个URL,应使用GET方法定向获取资源。
304 未修改,表示服务器允许访问资源,但服务器不会反回页面内容。
307 临时重定向,和302含义相同。

4XX 客户端错误
400 错误请求,表示请求报文存在语法错误。
401 未授权,表示发送的请求需要有通过HTTP认证的认证信息。
403 禁止,表示请求资源的访问被服务器拒绝。
404 未找到,表示服务器上没有找到请求的资源。
408 请求超时,表示客户端请求超时。
409 冲突,表示服务器在完成请求时发生冲突。

5XX 服务器错误
500 服务器内部错误,表示服务器端在执行请求时发生了错误。
501 尚未实施,表示请求超出服务器能力范围。
502 错误网关 ,表示服务器作为网关或代理,从上游服务器无法收到无效响应。
503 服务器不可用,表示服务器目前无法使用(由于超载或者停机维护)。
504 网关超时,表示服务器作为网关代理,但是没有及时从上游服务器收到请求。
505 HTTP版本不受支持,表示服务器不支持请求中所用的HTTP协议版本。

8、同样是重定向307、303、302的区别

302是HTTP1.0的协议状态吗,在HTTP1.1版本为了细化302状态码又出来了303和307。303明确表示客户端应当采用GET方法获取资源,会把POST请求变为GET请求进行重定向。307会遵照浏览器标准,不会从POST变为GET。

9、HTTP的keep-alive用什么作用

在早期的HTTP/1.0中,每次HTTP请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。后来的HTTP/1.0和HTTP/1.1中,引入了重用连接的机制,就是在HTTP请求头中加入Connection:keep-alive来告诉对方这个请求响应完成后不要关闭,下一次还用这个请求继续交流。

keep-alive的优点:
1、较少的CPU和内存的使用,因为同时打开的连接减少了
2、允许请求和应答的HTTP管线化
3、降低拥塞控制,因为TCP连接减少了
4、减少了后续请求的延迟,因为无需进行握手
5、报告错误无需关闭TCP连接

10、强制缓存和协商缓存

强制缓存是我们在第一次请求资源时,在HTTP响应头设置一个过期时间,在时效内部都直接从浏览器进行获取,常见的HTTP响应头字段如:Cache-Control和Expires
协商缓存是我们通过HTTP响应字段ETag或者Last-Modified等判断服务器上资源是否修改了,如果修改了则从服务器重新获取,如果没有修改则304指向浏览器缓存中进行获取。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39066827/article/details/102930708
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢