我为什么我拒绝了那些不懂http协议的面试者?
Posted JPress海哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我为什么我拒绝了那些不懂http协议的面试者?相关的知识,希望对你有一定的参考价值。
我想,如果是你来当面试官,你也是拒绝的。
故事1
张小明是我之前一个同事,我们一起在开发一个电视的App,为了满足“极客”们的要求,我们开发了这样的一个小功能。
用电脑,通过浏览器,可以管理自己的电视。
实现这个功能的原理能简单,就是在电视上内置一个http服务器。智能电视都是android的系统,市场上没有可以运行在Android系统的http服务器,所以只能手动开发。
但是,张小明遇到了一个问题,当通过浏览器访问我们自己写的http服务器的时候,不能正确显示网页,大概只显示了如下图片的内容。
css始终无法渲染出来,但是通过电脑浏览器来加载,css确实又加载了,某些浏览器是好的,某些是这样。
刚开始我们以为是缓存的问题,换了一台电脑还是如此。
没有办法,只能让担任架构师的海哥出马,经过半小时的排查后,终于发现了问题的所在,发现问题后,1秒钟解决。
什么原因导致的呢?原因是浏览器去加载css的时候,css返回http的content-type不是 text/css
类型导致的。
虽然css文件能够正常加载,但是http response类型不是text/css
的时候,很多浏览器是无法正常使用该css文件渲染的。
故事2
杨小明,是我之前的一个下属,我们用JFinal开发了一个直播系统。
例如,踢掉某个正在看直播的用户,API是这样的。
/api/v1/clients/{id}
但是,这个API有点特殊,需要用 delete 方法, curl 的命令如下(文档在:https://github.com/ossrs/srs/wiki/v2_CN_HTTPApi ):
curl -v -X DELETE http://127.0.0.1:1985/api/v1/clients/1 && echo ""
使用过JFinal的同学可能知道,JFinal内置了一个叫HttpKit的工具类,这个工具可以发送get请求和post请求,但是却没有delete请求的方法。
于是,杨小明非常聪明,自己写了一个,代码大概如下:
String command = "curl -v -X DELETE http://127.0.0.1:1985/api/v1/clients/1"
Runtime.getRuntime().exec(command)
测试人员本地进行黑盒测试的时候,竟然测试通过了。
部署到测试环境后,过几个小时,运维人员发现,测试服务器竟然多了几百个curl进程。
故事3
公司刚刚进来了一个不错的实习生,叫周小明。
由于是新人,没敢让他做核心的项目和功能,正好公司有个小项目让他去“练手”,没过多久就把项目的用户模块做完了,登录、注册、进入用户中心等基本功能堪称完美,项目经理简单看了下代码,代码风格也按照我们的文档编写,没有太多的问题。
由于项目要进行分布式部署,让他把用session记录信息的,缓存cookie,这个可以减少分布式项目带来的一些session问题。
没过多久周小明提交了代码。
但是,如何来做呢?
直接用cookie来记录登录用户的ID,没有任何的加密。
这样就导致了非常严重的安全问题。由于cookie是可以修改的,黑客可以修改自己的浏览器cookie,模拟任何人直接登录系统。
故事4
刘小明是公司的前端开发人员。
由于微信小程序开发所需技能,其实基本都是前端的知识,稍微不一样的是微信小程序不是通过cookie来记录用户信息。
所以我们打算让刘小明来负责开发公司的微信小程序。
既然微信小程序使用cookie不方便,怎么办呢?我们打算用 jwt 这种技术来代替cookie,记录当前的“用户”信息。
刚刚开会准备讨论 jwt 的时候,刘小明大发雷霆,说我不懂什么 jwt ,我只知道 js 怎么去获取cookie信息,不知道 jwt 这个玩意。
殊不知的是,Jwt和加密的cookie,其实没什么两样。
当公司招到合适的前端后,找个理由把刘小明开除。
后记
以上故事,全是海哥的亲身经历,为了避免尴尬,名字没有用真实的。故事的所有问题,都是不懂http协议造成的。
张小明,不懂 content-type 正在含义。
杨小明,不懂 get请求、post请求、delete...具体意义。
周小明,不同 cookie 的原理。
刘晓明,不懂 http 协议的基础。
经历了这些事情后,我要求公司的所有技术经理,在面试程序员的时候,无论是前端的职位还是后端的,无论是app的还是web的,都必须有一个要求:了解http协议。
在我离职出来后,我开源了JPress并成立了JPress School。很多同学在群里问的很多问题,其实也都是不懂 http 协议造成的。
例如:
Java后端调用 redirect 方法,可以当做代理使用吗?
通过Jboot设置Jwt信息后,为什么前端请求的时候获取不到了?
上传文件JFinal为什么先调用 getFile() 方法之后才能正常后去数据?
上传文件时,html的form表单为什么需要添加属性
enctype="multipart/form-data"
既然cookie可以代替session,那session还有什么用?
...
问题真的是千奇百怪。
于是,为了让JPress School学员避免这样的小白问题,也为了让大家吃透http协议本身,在未来的职业生涯中不要出现像小明这样的错误。
我决定来一个直播,通过直播抓包、讲解原理、并和学员互动的方式,彻底把 http 协议讲透。
这个直播的开播时间是:本周五晚上8点开始,讲透结束。
这个直播的收费是49.9元(看完直播后,觉得没有收获,退款50),JPress School 会员免费。
要看直播,扫码以下二维码后,添加海哥的微信:wx198819880,拉你进直播交流群。
也可以直接扫码,加入JPress School,
加入JPress School一年内免费看所有JPress School的直播课程。
点击下方的阅读原文,可以查看直播预览。
以上是关于我为什么我拒绝了那些不懂http协议的面试者?的主要内容,如果未能解决你的问题,请参考以下文章