V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
xinzhognyi
V2EX  ›  JavaScript

工作好几年的前端不明白 ajax 跨域,会不会有点差

  •  
  •   xinzhognyi · 2018-10-15 17:03:54 +08:00 · 7822 次点击
    这是一个创建于 1991 天前的主题,其中的信息可能已经有所发展或是发生改变。

    侥幸面试过几个前端。
    发现有些工作了 3 年左右的前端说不清楚 ajax 跨域问题。
    有些还能说出来使用 jsonp 解决办法,有些什么都不知道。
    但都不能说出来跨域的原因。
    这样的前端算不算很差?

    第 1 条附言  ·  2018-10-15 17:39:46 +08:00
    友好发言,只是讨论讨论。
    顺带加个问题:5 年高级 java 不去看 jvm,是不是也算偏差了。
    63 条回复    2020-08-19 12:27:45 +08:00
    whypool
        1
    whypool  
       2018-10-15 17:08:25 +08:00
    跨越和前端 ajax 有啥关系?
    TomatoYuyuko
        2
    TomatoYuyuko  
       2018-10-15 17:11:30 +08:00
    一般配合服务端解决的,前端自己搞很烦的,可以试着配合 node 写点简单的接口就懂了。
    34C
        3
    34C  
       2018-10-15 17:11:45 +08:00
    yoshiyuki
        4
    yoshiyuki  
       2018-10-15 17:13:40 +08:00
    算,足以说明毫无学习意识
    ianva
        5
    ianva  
       2018-10-15 17:14:40 +08:00
    只能通过这种 API 的方式面试前端的人,怎么能得出前端水平如何来的,大部分时候前端不会关注一些服务器端的配置,所以这些的实现在前端看来并不长接触,了解也不会天天应用实践,说不清楚也正常,只能说是对细节平实不探究。
    无论前端后端,重要的是编程能力,抽象能力,面对不同规模项目的选择和架构能力,这和知道个 API 细节,协议细节没有关系,前端大部分时间不关注协议细节,这只是前端获取数据时被黑盒后的东西。
    ianva
        6
    ianva  
       2018-10-15 17:25:39 +08:00
    1 楼说的更是,大部分时候 Ajax 和跨域没关系,跨域还是靠的 script 标签封装出来的 jsonp,而最新的 HTML5 的 XMLHttpRequest Level2 你也用不上,那是 IE10 以上版本的支持,国内估计大部分公司都用不上,所以说你能用上的一切方案都和 Ajax 没关系,你这问题自己都搞不明白
    xinzhognyi
        7
    xinzhognyi  
    OP
       2018-10-15 17:38:49 +08:00
    @ianva 对于你的观点表示赞同,协议对于前端确实是个黑盒。
    但我的问题还有个条件就是三年前端,如果是刚毕业或者工作一两年的话,还算正常。
    三年前端如果还没有深入底层的主动观的话,是不是有点偏差了。
    举个栗子:5 年高级 java 不去看 jvm,是不是也算偏差了。
    annielong
        8
    annielong  
       2018-10-15 17:40:40 +08:00
    ajax 牵扯跨域最好的解决方法也不是前端来处理吧,真用到跨域的场景,最好还是由后端或者构架师之类统一出一个解决方案,
    qq976739120
        9
    qq976739120  
       2018-10-15 17:41:00 +08:00
    跨域难道不是 nginx 去解决的吗???到底怎么做才是最正常的解决跨域呢?
    chenno9
        10
    chenno9  
       2018-10-15 17:44:12 +08:00
    跨域不应该是后台解决的吗,我这里的后台不会弄,我才自己去学的
    FINDCBI
        11
    FINDCBI  
       2018-10-15 17:45:23 +08:00
    你拿这发贴的时间,去看篇博客,就差不多懂了
    ianva
        12
    ianva  
       2018-10-15 17:47:57 +08:00
    @xinzhognyi 你看 JVM 你用 JVM 实现什么项目了么?和前端一样,前端大部分关注点完全不在这里,哪怕不了解协议的,我也不觉得和前端水平有啥差别,十多年过去了你问我汇编当时咋学的我记不住几个指令和寄存器细节,问我编译器后端的方案我也记不住了,因为项目上用不到,你了解和和用上是两回事情。

    如此情况看来我不认为用来评判一个人的前端水平有什么帮助,只不过面试者自己没有判断能力罢了。
    898601566
        13
    898601566  
       2018-10-15 17:48:32 +08:00
    我个一年 php 的都要搞跨域,服务端很好解决
    k9982874
        14
    k9982874  
       2018-10-15 17:49:22 +08:00
    前端能说出 jsonp 的算过。
    后端能说出 nginx 端 cros 的算过。
    geshansuiyue
        15
    geshansuiyue  
       2018-10-15 17:51:28 +08:00
    要么浏览器设置跨域 要么就 nginx 要么配置 proxy
    beny2mor
        16
    beny2mor  
       2018-10-15 17:55:16 +08:00
    @FINDCBI 什么博客
    helone
        17
    helone  
       2018-10-15 17:56:31 +08:00
    。。。前端工作中就没遇到过跨域问题吗?现在都 vue react 这种前后端分离了啊
    deming
        18
    deming  
       2018-10-15 17:57:24 +08:00   ❤️ 3
    我感觉 不是 “该谁做的” 问题 。
    而是 前 /后 端 人员都得了解 “跨域”是个什么玩意。得理解什么是跨域。
    无论前端后端,如果工作好几年仍然不理解什么是 “跨域”。
    那说明他不怎么关心技术,技术体系也不怎么更新。反正现在会的那一点还能干活。
    vevlins
        19
    vevlins  
       2018-10-15 17:57:29 +08:00
    oyosc
        20
    oyosc  
       2018-10-15 18:00:04 +08:00
    感觉有很多吧,之前我也面过一些前端,大部分都说不知道,这个是跟后端去说下就可以了...
    royeyu
        21
    royeyu  
       2018-10-15 18:02:24 +08:00
    工作一年只会 cors 跨域很正常,工作三年不会 ajax 跨域不正常
    FINDCBI
        22
    FINDCBI  
       2018-10-15 18:03:55 +08:00
    @beny2mor 阮一峰的博客
    allanzhuo
        23
    allanzhuo  
       2018-10-15 18:04:14 +08:00
    我知道四种,响应头设置,jsonp,网关,还有后台服务转发,还有其他方案吗。不过感觉也没啥用啊,用到的时候随便看看就懂了
    wfd0807
        24
    wfd0807  
       2018-10-15 18:05:48 +08:00
    98jiang
        25
    98jiang  
       2018-10-15 18:07:23 +08:00
    只知道个 jsonp 我后端
    guolaopi
        26
    guolaopi  
       2018-10-15 18:14:14 +08:00
    @98jiang +1 哈哈哈哈哈哈哈
    sagaxu
        27
    sagaxu  
       2018-10-15 18:16:04 +08:00 via Android
    看过 JVM 的大佬们,倒是说说看,你在项目里是如何用到这个知识点的。
    ianva
        28
    ianva  
       2018-10-15 18:48:57 +08:00
    估计也就调个堆大小,真的要是有能力有自信,让面试的来问问面试官前端问题,自然知道自己知识的局限性了
    bucky
        29
    bucky  
       2018-10-15 18:50:17 +08:00
    跨域问题只能靠后端配合,没有什么方式是纯前端能解决的,否则设置这个安全策略就失去意义了
    iyaozhen
        30
    iyaozhen  
       2018-10-15 19:21:15 +08:00
    @sagaxu 书到用时方恨少,最近有个 JAVA 项目( tcp server )老是假死,报了一堆 JVM 的错,看不懂
    iyaozhen
        31
    iyaozhen  
       2018-10-15 19:23:03 +08:00
    @deming 赞同,之前就见一个 FE 和后端两个人都不懂,鸡同鸭讲了半天。
    sxlzll
        32
    sxlzll  
       2018-10-15 19:25:15 +08:00
    说明缺少 owner 意识,
    如果只是招一个撸代码的,可以多方面考量,
    如果想招能独当一面、把控整个项目的,可以减(很多)分了
    helloworld12
        33
    helloworld12  
       2018-10-15 19:29:08 +08:00
    工作碰到搜索下就会了...但是,过一两年,没用到,想不起来很正常啊,除非一直在同一个领域工作
    kerr92
        34
    kerr92  
       2018-10-15 19:39:11 +08:00
    很差,日常项目不可能说都是后端提前帮你处理好,往往需要前端主动去沟通,CORS 或者 JSONP 都需要前端参与,接入外部那种没有办法改代码的接口,可能还要你去找后端同事帮你做代理
    66beta
        35
    66beta  
       2018-10-15 19:51:24 +08:00 via Android
    @helone 跨域跟用什哪个 MVVM 框架有什么关系?
    ChristopherWu
        36
    ChristopherWu  
       2018-10-15 20:02:59 +08:00   ❤️ 1
    我简单总结一下:

    跨域就是 从 a.com 发起对 b.com 的 网络请求,因为是两个不一样的域名,所以跨域了。
    浏览器会根据 http 请求过来时的 origin 头部,对比是否允许访问当前网站, 从而对跨域做限制。
    作此限制是历史原因:在以前 a.com 偷偷的弄了一个按钮,用户点了后,利用 cookies 就可以在背后成功访问 b.com/update_profile 之类的 API。

    所以一般后端需要在做跨域限制时,根据 origin 头部,允许一些白名单访问。

    #当然漏了很多细节: 如 POST 且多了几个头部的复杂请求,要先用 http 方法 OPTIONS 检查跨域与否,再发请求。
    ---
    前端简单懂一些,吹吹也是必须的,不然面对黑盒子可不靠谱。
    xiaoxinshiwo
        37
    xiaoxinshiwo  
       2018-10-15 20:14:41 +08:00 via Android
    @qq976739120 nginx 也行,服务端返回消息头添加允许跨域也可以,总之服务端处理,前端 jsonp 也行吧
    rekulas
        38
    rekulas  
       2018-10-15 20:28:22 +08:00
    不是有点差,是很差
    PythonAnswer
        39
    PythonAnswer  
       2018-10-15 20:39:47 +08:00 via iPhone
    一天之内肯定能搞清楚 何必发帖
    sologgfun
        40
    sologgfun  
       2018-10-15 20:40:30 +08:00
    看到这个贴 复习了一下这方面的知识。。 分享个链接吧 前端 4 种方法+后端 2 种方法 查漏补缺呀
    https://segmentfault.com/a/1190000003642057
    bestkayle
        41
    bestkayle  
       2018-10-15 20:52:56 +08:00
    现在水货越来越多了
    helone
        42
    helone  
       2018-10-15 21:10:43 +08:00
    @helone 我的意思是现在都用前端框架了,后端都用接口了,大概率不同域名,很常见跨域的情况,不懂吗?
    SoulGem
        43
    SoulGem  
       2018-10-15 21:14:46 +08:00 via iPhone
    差,就是这么不客气
    xiaojie668329
        44
    xiaojie668329  
       2018-10-15 21:28:43 +08:00
    人家问的是跨域的原因,都说起后端解决办法来了,怎么就跟前端无关。这是跟浏览器的渲染原理有关,跟同源策略、内容安全策略有关。不仅是 api 接口,加载图片、canvas 什么的都会需要注意好吗。动不动就扯架构,这点东西都不会谈什么架构。工作三年不知道就是菜。
    leconio
        45
    leconio  
       2018-10-15 21:48:00 +08:00 via Android
    我觉得跨域设计就是一坨屎
    今天下午都在用 socket 实现 http,双端编写代码。就解决这个夸域问题,真恶心。
    何况 http 本来就是不安全的,夸域限制也不能很好解决问题
    hackerang
        46
    hackerang  
       2018-10-15 22:01:56 +08:00
    @sagaxu 你服务挂过几次就知道 jvm 调优怎么用了
    yhxx
        47
    yhxx  
       2018-10-15 22:06:59 +08:00

    这不是楼上说的 API 的问题
    这说明这个人连同源都不知道
    ChristopherWu
        48
    ChristopherWu  
       2018-10-15 22:11:26 +08:00
    @leconio http 不安全,那 https 安全了吧?一样要做跨域限制啊。
    Debiancc
        49
    Debiancc  
       2018-10-15 23:05:38 +08:00
    没人说同源策略??
    t6attack
        50
    t6attack  
       2018-10-15 23:23:43 +08:00   ❤️ 1
    搞清楚浏览器为什么要限制跨域请求,不就好理解了嘛?

    访客访问一个页面,该页面可以自由对它域进行操作。会导致什么后果?

    可以在访客不知情的情况下,对其他网站进行注册机式攻击、垃圾信息轰炸。可以给其他网站页面刷点击量,给某个视频刷攒。刷某个关键词刷搜索量。。甚至可以 保持长连接 /定时循环请求,让在线访客 随时等候服务端指令,收到指令后,在线用户集体对外域执行各种操作。。
    还可以据此实现一个访客代理,每个访客都可以变成一个代理 IP 资源。服务端爬虫受到 IP 限制是吧?那我就利用用访客端发送请求。
    只要你的网站有一个外国访客在线,那么你可以直接利用这个外国访客进行 科学上网 了。

    可以这么说:如果允许跨域,访客就成肉鸡了。
    initsa
        51
    initsa  
       2018-10-16 09:18:17 +08:00
    跨域是浏览器的问题, 工作几年还不懂的前端,要不是后端惯的,要不就是虚报的工作年限·····刚工作我感觉就会遇到跨域的问题了``不可能不知道吧
    xinzhognyi
        52
    xinzhognyi  
    OP
       2018-10-16 09:32:24 +08:00
    @sagaxu 对于这种观点不敢苟同,意思工作中用不到就不用去了解,那那么多大牛就都不用看什么 jvm 了。
    都只用明白个增删改查就好了,反正项目中也用不到。国外又有人去写源码。调调框架就好了,何必费那么多力气去看什么源码。
    yoshiyuki
        53
    yoshiyuki  
       2018-10-16 10:57:11 +08:00
    @k9982874 光说出不行呀,JSONP 至少要能说明白需要后端支持和以及不支持 POST 等缺点; CORS 至少要搞明白区分简单请求和复杂请求、以及浏览器兼容性和 cookie 跨域的问题。
    sagaxu
        54
    sagaxu  
       2018-10-16 11:56:30 +08:00 via Android
    @xinzhognyi 我觉得知识来源不应该是某个软件源码或者熟悉某个软件的参数。有那么多经典著作和论文,可以系统和深入的学习。

    业界 jvm 大牛,有几个不是实际工作需要改造或者优化 jvm 本身的?很多公司面试问 jvm 的时候,也仅限于粗犷的描述一下内存布局,几种 gc 的原理,hashmap 的实现,再加上点内存模型,这些东西在 jvm 之外,有更系统全面和深入的书可以看。

    @hackerang 那不是 jvm 调优,只是调几个运行参数,没什么技术含量。



    纸上谈兵没有意义,举几个实际例子才有说服力。
    jiangruilove123
        55
    jiangruilove123  
       2018-10-16 13:31:49 +08:00
    那估计是培训班出来的,真的三年不可能不了解跨域的,不了解跨域,根本没法写 ajax 请求吧
    wolfie
        56
    wolfie  
       2018-10-16 13:34:34 +08:00
    刚遇到跨域问题时候,同一部门包括项目经理,2 ~ 7 年的,没有一个知道的。
    小城市,小外包公司,平时不看博客之类的,不知道很普遍吧。
    TomIsion
        57
    TomIsion  
       2018-10-16 14:05:25 +08:00
    @ianva 前端的架构还是浅了点...
    Anshi
        58
    Anshi  
       2018-10-16 14:27:28 +08:00
    跨域有个大前提 是 浏览器才会出来跨域限制了,一些策略也是浏览器自己做的,不说怎么解决跨域问题,理解一下我觉得很正常吧。。不说浏览器怎么实现了,至少浏览器的行为我觉得就算是一年的前端也应该清清楚楚。。。

    知道为什么发生,离知道解决方法也不远了,就算答不出解决方法,知道为什么出现这种问题我觉得面试官对你印象不会太差。。。
    fulvaz
        59
    fulvaz  
       2018-10-16 14:37:10 +08:00
    - - 在这讨论前端怕是要自寻死路
    yuriko
        60
    yuriko  
       2018-10-16 15:06:50 +08:00
    我一个 android 都知道什么是跨域了……这三年前端是不是有点……
    js0816
        61
    js0816  
       2018-10-16 15:48:37 +08:00
    看什么年份 都是假的 这都不知道 那就约等于不能干活了说实在的 你说你干活只能写点 htmlcss 啥的就太过分了
    clare233
        62
    clare233  
       2018-10-17 12:22:28 +08:00
    因为跨域让后端去解决很容易呀.. 虽然前端也有跨域的解决方法, 但是不能为了考虑工作成本选择更方便的解决办法吗?
    ChanKc
        63
    ChanKc  
       2020-08-19 12:27:45 +08:00 via Android
    挖坟
    我觉得 cors 是最没有意思的问题。我搜了搜 v2ex,看到大部分和 cors 有关的问题其实都没有必要 cors 。我工作三年也没用在生产上用过 cors 。
    我感觉 cors 的应用场景非常有限:你有 API 开放给别人且允许别人在浏览器上使用。你要给静态资源做 domain sharding 图片浏览器的并发限制。你要在浏览器上用模块化 js ( mjs )。
    cors 的本意是浏览器觉得你请求一个不属于你的域名上的东西都是不安全的(实际上多数情况下确实是这样)。反过来说,都是属于你的东西就该尽可能放在一个域名下面。你的前端请求后端,都是你自己的东西,还分出俩域名 example.comapi.example.com 图啥?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1250 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:59 · PVG 01:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.