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

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

  •  
  •   xinzhognyi · 29 天前 · 3891 次点击

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

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

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

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

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

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

    这不是楼上说的 API 的问题
    这说明这个人连同源都不知道
        48
    ChristopherWu   29 天前
    @leconio http 不安全,那 https 安全了吧?一样要做跨域限制啊。
        49
    Debiancc   29 天前
    没人说同源策略??
        50
    t6attack   29 天前   ♥ 1
    搞清楚浏览器为什么要限制跨域请求,不就好理解了嘛?

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

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

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

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

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



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

    知道为什么发生,离知道解决方法也不远了,就算答不出解决方法,知道为什么出现这种问题我觉得面试官对你印象不会太差。。。
        59
    fulvaz   28 天前
    - - 在这讨论前端怕是要自寻死路
        60
    yuriko   28 天前
    我一个 android 都知道什么是跨域了……这三年前端是不是有点……
        61
    js0816   28 天前
    看什么年份 都是假的 这都不知道 那就约等于不能干活了说实在的 你说你干活只能写点 htmlcss 啥的就太过分了
        62
    clare233   27 天前
    因为跨域让后端去解决很容易呀.. 虽然前端也有跨域的解决方法, 但是不能为了考虑工作成本选择更方便的解决办法吗?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3078 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 36ms · UTC 01:11 · PVG 09:11 · LAX 17:11 · JFK 20:11
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1