【任务4】网站首次打开网页在前端判断好还是在服务端好呢?

我只能说,各有好处,看你要怎么想,比如对于一个功能实现,要采取什么样的方式,那么我们可以考虑的点很多,比如性能方面,比如简便性,比如安全性,等等。

大家或许可以说一说,总之没有对错。

本问题对应的项目链接:从0设计一个web项目

共以下 12 个回答

  • 星河揽我入梦 永久会员 2024年6月6日 下午8:59

    对于网站首次打开网页时的性能优化,通常建议将一些关键逻辑放在前端进行判断,以加快页面加载速度。这样可以让用户更快地看到页面内容,并提升用户体验。同时,在服务端进行一些必要的校验和安全性检查也是很重要的,以确保用户输入的数据安全可靠。综合来看,前端和服务端各有其优势,合理分配逻辑判断和处理任务可以提高网站性能和用户体验。

    0 赞同 0 条回复
  • 豆子彩虹 普通 2022年10月17日 下午4:15
    • 前端:性能较好,不需要进行网络传输;
      • 后端:将判断放在后端更符合前后端分工的要求;安全性较好(但仅仅是判断是否是首次使用似乎也没必要过分在意安全性)
    0 赞同 0 条回复
  • Sco 普通 2022年10月17日 上午11:20
    1. 从性能考虑 — 前后端都可以
    2. 从私密考虑 –放后端
    3. 烂点的浏览器可能会很慢或者崩溃 — 放后端
    4. JS只有一个主线程,数据需要放到异步线程上去处理 — 放后端
    5. 网络开销 — 放后端
    0 赞同 0 条回复
  • 忆霁昕 永久会员 2022年10月15日 上午9:04

    我认为放在后端好。
    1. 从前后端分工的角度讲,判断用户是否首次打开网页的功能,是应该由后端实现的业务逻辑,而不应该交给负责页面展示的前端实现。
    2. 从安全性的角度,前端的很多内容都可以被查看,可能被攻击者伪造cookie,安全性差。
    看了别人的想法,我才知道思考问题可以从这些方面入手。

    0 赞同 0 条回复
  • mpweixin用户 普通 2022年10月8日 下午3:19

    网站首次打开网页在前端判断好还是在服务端好呢?,我认为放在后端比较好,前端只需要把后端传过来的数据展示就行了,后端判断比较安全。

    0 赞同 0 条回复
  • lucca 普通 2022年10月4日 上午1:47

    我认为如果只是判断首次登录这类的简单需求的话,不涉及复杂的校验逻辑和敏感的用户数据,完全可以放在客户端实现。
    因为实现方便,简单,也不涉及什么重要数据泄露,只需要很简单的字段就能实现,对其他逻辑也不会有什么入侵。

    维持登录态则不同,如果是维护登录态这样的需求,涉及用户的敏感数据,或者有比较重的逻辑,又或者涉及到后端模块调用等。
    我认为就应该放到后端处理,保证数据的安全性和充分利用服务器算力。

    如有不合理的地方,欢迎批评指正。

    0 赞同 0 条回复
  • 月诉长安 永久会员 2022年9月22日 下午2:35

    还是放在后端比较好。
    1.既然前后端分离,从项目管理来说,业务逻辑的代码都放到后端来做比较符合规范,前端只用来做页面的展示。
    2.又了解了一下登陆验证的常用方案,基本使用拦截器拦截请求,验证cookie中存贮的token,从而验证用户的身份。如果这部分直接放到前端,前端容易伪造,安全性得不到保证。

    0 赞同 0 条回复
  • 明华 普通 2022年9月18日 下午5:28

    谈一下我自己的想法,我觉得功能实现要采取什么样的方式或者技术,常常是和具体的业务场景相关联的。网站的会话判断最重要的是保证安全,前端判断相对来说是不适合的,保证了安全的前提下才需要去考虑并发等问题。

    0 赞同 0 条回复
  • 猫南北 永久会员 2022年9月17日 下午1:40

    这段时间做了项目之后的一些感想吧,首次打开网页的判断放在后端会好一点:
    网站初始化的时候都是需要去后端加载数据的,而前端页面的东西是可以通过开发者模式都能查看到的,数据容易被篡改,安全性不高。那我们所有的业务逻辑以及数据就都应该存在后台,才能保证数据的安全性,前端的话可以做一个缓存,这样子可以加速网页的处理速度。而且后端有很多安全框架比如spring security可以在很大的程度上保证数据的安全;性能方面可能会增大了一些服务端的压力,不过后端可以做成微服务化、负载均衡,这样也能保障服务端的性能不会被影响太多。

    0 赞同 0 条回复
  • 潜行1 我是火车王! 普通 2022年9月17日 下午1:33

    同零基础,直接说个人想法:

    前端还是后端?

    1. 从流行的前后端分离的角度:前端侧重(或者说负责)页面展示,后端侧重业务处理;那么从功能上来说这个应该交给后端处理,返回结果给前端渲染;
    2. 从性能的角度:肯定前端,直接就在前端拦截(或者说处理),而不需要一个网络传输的过程,这样性能肯定是比较好的;
    3. 从安全性:前后端均可。但是前端一般不负责安全性这部分,或者说不擅长这写内容,而后端现在有验证码机制的,交给后端安全性更高,也更符合设计直觉;
    4. 从简便性:差不多,添加一个验证的模块,前后端的工作量差不多;

    设计

    设计的话,先考虑情境:应该只有两种
    1. 长时间未登录,cookie和 session都无效,此时必须重新登录
    1. 短暂关闭网页或者浏览器后,重新打开网页,自动登录好
    我想到的也就是黑马的那个基于 Cookie和 session实现了。

    不知道有没有专门的高性能框架解决这个问题

    0 赞同 0 条回复
  • mpweixin用户 永久会员 2022年9月14日 下午3:49

    感觉这个问题可以扩展为怎么判断用户是否在这个浏览器第一次登录网站和下一次用这个浏览器实现自动登录相似。我之前做过知识星球里的博客项目、微信点餐项目的订购订单后端实现部分,对前后端分离的web项目有一定的了解。不过我当初是直接简单学了html+css+javascript和xml就直接做项目了,web知识有些不牢(博客项目中的token我也是跟着视频做了好几次和看博客简单知道它是用来验证用户身份的一种标识符),这次看了黑马web中cookie和session,和几篇博客,了解了下。我简单说下怎么判断用户是否是第一次登录网站,我的实现思路:我认为主要是在服务端实现,理由和上面那位兄弟差不多。
    首先,客户端浏览器向服务端发送一个登录请求,如果用户是在这个浏览器中第一次登录,通过了登录验证的话,服务器创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器在把这个sessionId以Cookie的形式返回给客户端浏览器,客户端浏览器会把这个sessionId记到自己的cookie缓存中,以及cookie生效的路径(你只有向目标服务器发送请求才会携带这个sessionId的cookie)。下一次客户端浏览器再向服务器发送请求就会携带上sessionId,服务器就可以根据这个sessionId判断是否是第一次登录(如果客户端请求中包含sessionId,说明不是第一次登录,如果不包含,则进行登录验证,验证通过,返回sessinId),后面服务器也可以直接根据请求中sessionId判断这个请求是否有执行某个操作的权限。比如,你关闭浏览器后,当你下次再用这个缓存了sessionId的cookie的浏览器(只要这个sessionId的cookie在浏览器的生存时间不是关闭浏览器被清除,而是持久化到硬盘中一段时间)进入服务端,在前端页面初始化时可以发送一个login请求,携带上sessionId的cookie,给服务端,服务端根据sessionId的合理性判断是否登录成功,若通过,客户端浏览器就成功登录了,实现了自动登录。要实现这个功能可能需要对cookie和session的作用和原理有个比较清楚的了解,我也是看了网上几篇博客以及帅地哥他对cookie面试总结,可能简单了解了cookie和session。
    这个方法应该考虑到安全性,前端只负责发送请求,没有对数据做任何验证处理,如果用户自己构造一个不存在的sessionId的cookie发给服务端,服务端验证是可以不通过的。

    2 赞同 1 条回复
  • Second(S) 普通 2022年9月12日 下午10:10

    说一下我自己的想法,提前声明一下哈,我并没有什么项目的经验,以下内容纯属自己的想法,如有错误的地方还请大家批评指正。
    首先,我认为首次打开网页的判断在服务端会更好一些,原因有二:
    一、为了更好的做到前后端分离,前端和服务端最好有自己的分工,前端主要任务是做好页面展示,而服务端的主要任务是去处理业务逻辑。很明显,判断用户是否首次打开网页是一个业务逻辑,所以应该把工作交给后端去判断。
    二、安全性,前端页面的很多内容都是可以被查看的,如果把判断首次登录的逻辑写在前端,那么很容易被其他人“看穿”我们的处理逻辑,从而“别有用心”的去“破解”我们的逻辑。当然,破解是否首次打开网页这件事可能是非常没有必要的,但是我觉得,破不破解是“攻击者”的事情,给不给“攻击者”破解机会,是我们开发者的事情。所以,为了更安全的开发,我认为应该在服务端去判断。
    当然,这样做可能确实会增加服务端的压力,但这些只是我自己目前的想法,如果大家有更好的想法,希望能和大家多多交流。

    4 赞同 2 条回复

# 回答此问题

后才能回答