关于前后端分离的Cookie的事项

这篇具有很好参考价值的文章主要介绍了关于前后端分离的Cookie的事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前后端分离了是不是服务器就不能设置Cookie了?

错误。前后端分离并不意味着服务器不能设置Cookie。在前后端分离的架构中,前端通常是通过API调用与后端进行通信,而不是直接渲染后端生成的HTML页面。这导致服务器无法像传统的服务器端渲染应用程序那样,在响应中设置Cookie。

然而,服务器仍然可以设置Cookie,并通过响应中的Set-Cookie标头将其发送给客户端。在前后端分离架构中,这通常是在登录或认证成功后进行的操作,以便服务器可以将身份验证令牌或会话信息存储在Cookie中,并在随后的请求中进行验证。

前端应用程序(通常是JavaScript)可以从响应中读取并处理这些Cookie,然后在后续的API请求中将它们作为请求标头的一部分发送回服务器。这允许服务器在后续请求中使用Cookie来验证用户身份或提供其他会话相关的功能。

总结起来,尽管前后端分离架构改变了服务器设置Cookie的方式,但服务器仍然可以在响应中设置Cookie,并通过API请求和响应来处理会话和用户身份验证。

前后端分离服务器也可以给浏览器设置cookie

首先要理解服务器是如何给浏览器设置cookie的

比例后端中以php为例,是调用了setcookie();

但这只是表象,具体设置机制是给返回浏览器的header中添加了set-cookie信息,例如:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT

浏览器是根据response header来设置cookie,所以跟前后端分离没有关系

前端服务器和后台服务器跨域情况

当前端服务器和后台服务器存在跨域情况时,设置Cookie会受到限制。跨域是指在浏览器中,前端应用程序的域与后台服务器的域不同。

在跨域情况下,默认情况下,浏览器会阻止通过响应的Set-Cookie标头设置跨域Cookie。这是为了保护用户隐私和安全。浏览器遵循同源策略,该策略要求网页只能访问与其来源相同的资源。

然而,有一些方法可以绕过这个限制:

CORS(跨域资源共享):后台服务器可以通过设置适当的CORS响应标头来允许特定的跨域请求,并包括允许携带Cookie。例如,可以通过设置"Access-Control-Allow-Origin"标头为前端服务器的域,以及设置"Access-Control-Allow-Credentials"标头为"true"来允许跨域请求携带Cookie。

代理服务器:前端服务器可以通过代理服务器来转发请求,将跨域请求发送到后台服务器,并在代理服务器上设置Cookie。这样前端服务器和后台服务器之间的通信就不会被浏览器的同源策略限制。

需要注意的是,如果存在跨域情况,设置Cookie时需要考虑安全性和隐私性。确保只在必要的情况下允许跨域请求携带Cookie,并对请求进行适当的验证和授权处理,以防止潜在的安全漏洞。

如何判定为跨域

在前端开发中,判定是否为跨域请求通常基于以下三个因素:协议、域名和端口号。如果任何一个因素不同,则认为是跨域请求。

举例来说,假设前端应用程序正在运行在 http://a.log.com 上,下面是一些示例,用于判定是否为跨域请求:

跨协议请求:如果前端应用程序是通过 http://a.log.com 运行,但请求的 URL 是以 https:// 开头的,例如 https://b.log.com/api/data,则被认为是跨域请求,因为协议不同。

跨域名请求:如果前端应用程序是通过 http://a.log.com 运行,但请求的 URL 是以 http://b.log.com/api/data 开头的,或者只是使用了不同的二级域名,例如 http://subdomain.log.com/api/data,则被认为是跨域请求。

跨端口请求:如果前端应用程序是通过 http://a.log.com:8000 运行,但请求的 URL 是以 http://a.log.com:9000/api/data 开头的,或者使用了不同的端口号,则被认为是跨域请求。

需要注意的是,浏览器中的同源策略会限制跨域请求的访问,这是出于安全考虑。可以通过使用CORS(跨域资源共享)或其他跨域解决方案来允许跨域请求的访问。

前端服务器通过代理服务器来转发请求并处理跨域

在前端服务器上配置代理服务器设置:前端服务器需要配置一个代理服务器来接收跨域请求,并将其转发到后台服务器。这可以通过使用常见的代理服务器软件(如Nginx、Apache)或自定义的代理服务器脚本来实现。

前端应用程序发送请求到代理服务器:前端应用程序发送跨域请求时,将请求发送到前端服务器上的代理服务器地址,而不是直接发送到后台服务器。例如,前端应用程序发送请求到 http://frontend-server/proxy。

代理服务器转发请求到后台服务器:代理服务器接收到前端应用程序的请求后,将其转发到后台服务器的对应地址。例如,代理服务器将请求转发到 http://backend-server/api。

后台服务器处理请求并设置Cookie:后台服务器接收到代理服务器转发的请求后,进行相应的处理,并在响应中设置Cookie(如果需要)。后台服务器可以根据业务逻辑处理请求,并在响应中包含 Set-Cookie 标头以设置Cookie。

代理服务器将响应返回给前端应用程序:后台服务器处理请求后,将响应发送回代理服务器。

代理服务器将响应返回给前端应用程序:代理服务器收到后台服务器的响应后,将其返回给前端应用程序。前端应用程序在收到响应后可以进行相应的处理。

通过使用代理服务器,前端应用程序可以绕过浏览器的同源策略限制,并实现前端与后台服务器之间的跨域通信,同时允许Cookie的设置和处理。具体的实现细节和配置方式可能因所选代理服务器软件或自定义脚本而有所不同,因此需要根据具体情况进行相应的配置和开发。

同源策略限制说明

实际上,同源策略主要是由浏览器实施的一种安全机制,用于限制不同源(协议,域名,端口)之间的客户端脚本访问。同源策略确实会限制浏览器中前端应用程序对不同源服务器的访问,但在服务器与服务器之间的通信中,同源策略并不适用。

当服务器与服务器之间进行通信时,不受浏览器的同源策略的限制。服务器之间的通信可以自由地进行跨域请求和响应,并共享数据,因为服务器可以直接访问资源而无需经过浏览器的安全限制。

因此,如果在前端应用程序中使用代理服务器来转发请求到后台服务器,代理服务器与后台服务器之间的通信不受浏览器的同源策略的限制。这允许在代理服务器上进行Cookie的设置和处理,以及实现跨域请求和响应的处理。文章来源地址https://www.toymoban.com/news/detail-479868.html

到了这里,关于关于前后端分离的Cookie的事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运维是不是没有出路了?

    瑞典马工的​​《是时候让运维集体下岗了》一出,就让运维人为之一颤,​人人自危。文章开篇就提到:​​明人不说暗话,在云原生和DevOps成熟的今天,运维作为一个岗位和团队已经完成了历史任务,应该退出舞台了。文中​观点令人振聋发聩,虽然我们都知道,随着科

    2023年04月15日
    浏览(29)
  • 人脸检测是不是目标检测呢?

    人脸检测是不是目标检测呢? 人脸识别和目标检测都是计算机视觉领域的重要应用之一,但它们的应用场景和方法有所不同。 人脸识别是一种通过计算机技术对照片、视频等图像中的人脸进行识别的技术。人脸识别一般分为两个步骤: 人脸检测和人脸识别 。人脸检测是指在

    2024年02月06日
    浏览(40)
  • 【C语言】判断是不是闰年

    闰年的判断方法(两个条件都满足): 1)年份能被4整除 ,但不能被100整除。 2)年份能被400整除。 输入一个年份,判断它是不是闰年  我们可以利用bool或者_Bool的返回值来判断是否为闰年(bool(布尔类型)是一种数据类型,只有真(true)和假(false)两个值) 判断1000~2

    2024年02月06日
    浏览(37)
  • 如何辨别ChatGPT是不是真的

    随着ChatGPT爆红,国内陆续出现了几个所谓的“ChatGPT 反向代理站点”,乍一试回答似乎还挺靠谱,但它们真的是ChatGPT吗?本文以其中一个站点为例,对其真伪进行辨别。 其实最多只需要问两个问题,基本上就可以做出判断了。 1.你是谁? 2.列举两条2023年发生的新闻   而Ch

    2024年02月11日
    浏览(33)
  • AIGC是不是有点虎头蛇尾

    一、前言 2023年上半年AI与AIGC真是风风火火,不管是技术界还是资本界还是其他任何领域,如果你不知道chatgpt和AIGC,你就是个跟不上时代的人儿。如今大半年过去了,好像这个chatgpt和AIGC比没有太多的人提起,是不是有点虎头蛇尾了呢。了解本博主的人应该知道,本博主并不

    2024年02月09日
    浏览(35)
  • PostgreSQL 是不是大小写敏感

    如果你踩过 MySQL 的大坑的话就知道:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。 如果你稍加不注意就会出现在本机开发的程序运行一切正常,发布到服务器行就出现表名找不到的问题。 这是我们前一个项目遇到的巨大问题,开发是在 Windows 下进行,但是

    2024年01月25日
    浏览(39)
  • bash: 睡觉的冒号;是不是两个点?

    在bash里冒号和躺着的冒号的用法不一样一定要注意别用错。 难道正常的不是两个点)的作用: A sequence expression takes the form {x…y[…incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer. When integers are supplied, the expression expands to each number between x

    2024年02月15日
    浏览(32)
  • 3DTile是不是没有坐标的选择?

    可参考以下内容: 一、坐标参考系统(CRS) 3D Tiles 使用右手笛卡尔坐标系;也就是说,x和y的叉积产生z。3D Tiles 将z轴定义为局部笛卡尔坐标系的向上。tileset的全局坐标系通常位于WGS 84地心固定(ECEF)参考系(EPSG4978)中,但它不是必须的,例如,发电厂可以在其本地完全定义用于没

    2024年02月22日
    浏览(34)
  • 程序员未来是不是会大量失业?

    程序员宝藏库 :https://gitee.com/sharetech_lee/CS-Books-Store 会,但是主要原因并不是来自最近爆火的AIGC。 生成式AI对比与传统的工具的确很强大,但是要说替代某种工作岗位还为时尚早。最近铺天盖地的相关推文,热度一波未平又起一波,想想前两年的元宇宙、web3就知道,这背后

    2023年04月10日
    浏览(33)
  • Java判断一个实体是不是空的

    在Java中,我们可以使用以下方法来判断一个实体是否为空: 对象是否为null 可以使用Java中的 == 运算符来判断一个对象是否为null,如果对象为null,则表示对象为空。 例如: 字符串是否为空 可以使用Java中的 isEmpty() 方法来判断一个字符串是否为空,如果字符串为空,则返回

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包