通用HTTP身份验证有几种身份验证模式,每种模式在安全强度不同,在客户机或服务器软件中的可用性方面可能有所不同。最常见的认证方案是“基本”认证方案,下面将详细介绍它。参考:https://javascript.net.cn/article?id=628IANA维护着一个认证方案列表,但是主机服务也提供了其他的认证方案,比如Amazon AWS。常见的认证方案包括:BasicSee RFC 7617, base64-encoded credentials. More information below.https://tools.ietf.org/html/rfc7617BearerSee RF
飞翔的鱼丸 2021-01-29 开发技巧 1430
Content-Disposition 通常作用于两种情况中,“作为消息主体中的消息头”或“作为multipart body中的消息头”作为消息主体中的消息头一般情况下,Content-Disposition 响应头指示返回的内容,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。Content-Disposition: inline默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示Content-Disposition: attachment表示消息体应该被下载到本地;Content-Disposition: attachment; filename=
飞翔的鱼丸 2021-01-28 开发技巧 1498
一,简介我们做一个大项目会把项目分解成很多不不同的模块(Module),通常分为 Controller,Service,Model,Dao 和 Utils。有没有其实都可以,叫不叫这些名字也无妨,你要把Service的内容全写在Controller里也没问题,你要把Utils的工具函数分散在所有需要用的文件也Ok。但是久而久之,一堆人做一件事做的多了,就会形成这些约定俗成的部分,就好比形成了人行道,车行道,形成了红绿灯,当然这些终归还没有加进标准里去,所以你遵不遵守,都靠你自己。所以,项目中是否包含这些模块或者单词,和你的项目结构是否完善一毛钱关系没有。但是当你的项目结构相对完善的时候,你会发
飞翔的鱼丸 2020-06-27 开发技巧 2695
1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。3. 【强制】用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入, 禁止字符串拼接 SQL 访问数据库。反例:某系统签名大量被恶意修改,即是因为对于危险字符 # --没有进行转义,导致数据库更新时,where 后边的信息被注释掉,对全库进行更新。4. 【强制
飞翔的鱼丸 2020-04-27 开发技巧 1120
诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来越多的迹象表明,函数式编程已经不再是学术界的最爱,开始大踏步地在业界投入实用。也许继"面向对象编程"之后,"函数式编程"会成为下一个编程的主流范式(paradigm)。未来的程序员恐怕或多或少都必须懂一点。但
飞翔的鱼丸 2020-04-24 开发技巧 1036
今天,写篇文章介绍一下 RESTful API 中的动词覆盖吧。在开发各种小程序的时候,总是会遇到不能正常支持 HTTP 请求的平台,比如支付宝小程序只支持 GET 和 POST 请求,这时候充分利用 HTTP 请求方法的 RESTful API 就会遇到问题,不支持 PUT, PATCH, DELETE 请求,该怎么办呢?嗯,使用动词覆盖。什么是动词覆盖我最初遇到不支持全部 HTTP 请求的时候,解决方案是修改 API 路径,比如 DELETE /user/:id 时,我的方案是 POST /user/:id/delete。后来看了阮一峰的《RESTful API 最佳实践实践 》,才明白有
飞翔的鱼丸 2020-04-09 开发技巧 1353
1,为什么要画流程图很多人拿到需求就火急火燎的开始画原型,然后画着画着觉得有些地方没有考虑到,又回头去改,如果在画原型之前,你能将自己的业务流程想好,用户的操作流程想好,页面跳转想清楚,你就能少做很多无用功,达到事半功倍的效果。2,什么是流程图流程图是表示算法、工作流或流程的一种框图表示,它以不同类型的框代表不同种类的步骤,每两个步骤之间则以箭头连接。这种表示方法便于说明解决已知问题的方法。流程图在分析、设计、记录及操控许多领域的流程或程序都有广泛应用。3,流程图常用元素定义4,一般流程图有三种结构:顺序结构、选择结构、循环结构5,常用的三种流程图产品中设计的流程图主要有三种,业务路程图(泳道
飞翔的鱼丸 2020-03-13 开发技巧 2142
写好代码,阿里专家沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家,相信同样的方法论可以复制到大部分复杂业务场景。一文教会你如何写复杂业务代码了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。针对该命题,我进行了比较细致的思考和研究。结合实际的业务场景,我沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家。我相信,同样的方法论可以复制到大部分复杂业务场景。一个复杂业务的处理过程业务背景简单的介绍下业务背景,零售通是给线下小店供货的B2B模式,我们希望通过数字化重构传统
飞翔的鱼丸 2020-03-11 开发技巧 1035
一、简介在HTTP中,基本认证(Basic access authentication)是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。最明显的特征是,Basic Auth 就是在请求的时候在headers中设置 Authorization: "Basic 用户名和密码的base64加密字符串"。JWT Token 认证,建议把 Token 保存在 Authorization Bearer中。二、访问形式1、使用浏览器在使用浏览器访问设置了 HTTP Basic Auth 的服务器时,会弹出对话框,输入用户名和密码即可。2、使用 HTTP Cl
飞翔的鱼丸 2019-08-18 开发技巧 2017
1,令牌桶算法(Token Bucket)令牌桶算法(Token Bucket) 随着时间流逝,系统会按恒定1/QPS时间间隔(如果QPS=100,则间隔是10ms)往桶里加入Token,如果桶已经满了就不再加了。新请求来临时,会各自拿走一个Token,如果没有Token可拿了就阻塞或者拒绝服务。令牌桶的另外一个好处是可以方便的改变速度。 一旦需要提高速率,则按需提高放入桶中的令牌的速率。 一般会定时(比如100毫秒)往桶中增加一定数量的令牌, 有些变种算法则实时的计算应该增加的令牌的数量。2,算法实现对于每个 Bucket 设置一个定时器,而一个定时器就是一条线程。那么在你的服务器上,光是分
飞翔的鱼丸 2019-08-06 开发技巧 1402
General 通用信息Request URL:详细地址   如域名,参数传值等信息。Request Method: 请求方式 如:get,post,head,put,delete optionsStatus Code : 返回的状态码 如:200,400,403,500等等Remote Address 请求远程ip 地址Referrer Policy:1、no-referrer-when-downgrade(默认值) 在没有指定任何策略的情况下用户代理的默认行为,在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送(HTTPS->HTTP)
飞翔的鱼丸 2019-07-31 开发技巧 1188
一,推荐方法下单渠道1位+支付渠道1位+业务类型1位+时间信息4位+下单时间的Unix时间戳后8位(加上随机码随机后的数字)+用户user id后4位。然后你会说,这样算下来就订单号就19位了啊,一点都不精简啊,不好记不好念不好输的。但我说的上面的这些业务标记,你不一定要全部加上啊。你看淘宝/天猫那么大的订单量,16位订单号就搞定了。细心的网友已经发现了,订单号的后4位是取自用户user id的后四位,前12位中有10位可能是由Unix时间戳加随机规则生成的。二,从用户体验和数据库优化的角度来看1.利用数据库主键值产生一个自增长的订单号(订单号即数据表的主键)2.日期+自增长数字的订单号(比如
飞翔的鱼丸 2019-07-27 开发技巧 2407
为什么需要链表数组不总是组织数据的最佳数据结构,在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难。在数组中,添加和删除元素也很麻烦,因为需要将数组中的其他元素向前或向后平移,以反映数组刚刚进行了 添加或删除操作。然而,JavaScript 的数组并不存在上述问题,因为使用 split() 方法不需要再访问数组中的其他元素了。JavaScript 中数组的主要问题是,它们被实现成了对象,与其他语言(比如 C++ 和 Java) 的数组相比,效率很低,如果你发现数组在实际使用时很慢,就可以考虑使用链表来替代它。除了对数据的随机访问,链表几乎可以用在任何可
飞翔的鱼丸 2019-06-18 开发技巧 1027
1. JavaScript 正则表达式API 共有 6 个,字符串实例 4 个,正则实例 2 个:String#search String#split String#match String#replace RegExp#test RegExp#exec 字符串对象正则方法 字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search()和split()。 ES6 将这 4 个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。String.prototype.match 调用 RegExp
飞翔的鱼丸 2019-06-12 开发技巧 1378
替换和分组:替换使用 | 字符来允许在两个或多个替换选项之间进行选择。/^Chapter|Section [1-9][0-9]{0,1}$/上面的正则表达式要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字。如果输入字符串是 Chapter 22,那么上面的表达式只匹配单词 Chapter。如果输入字符串是 Section 22,那么该表达式匹配 Section 22。可以使用括号来限制替换的范围,即,确保它只应用于两个单词 Chapter 和 Section。/^(Chapter|Section) [1-9][0-9]{0,1}$/尽管这些表达式正常
飞翔的鱼丸 2019-06-04 开发技巧 1295
一、URL 设计1.1 动词 + 宾语RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。比如,GET /articles这个命令,GET是动词,/articles是宾语。动词通常就是五种 HTTP 方法,对应 CRUD 操作。GET:读取(Read) POST:新建(Create) PUT:更新(Update) PATCH:更新(Update),通常是部分更新 DELETE:删除(Delete) 根据 HTTP 规范,动词一律大写。1.2 动词的覆盖有些客户端只能使用GET和POST这两种方法。服务器必须接受POST模拟其他三个方法(PUT、PAT
飞翔的鱼丸 2019-04-24 开发技巧 1450
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题
飞翔的鱼丸 2019-04-24 开发技巧 1177
AES是一种区块加密标准算法 Advanced Encryption Standard,它的提出是为了升级替换原有的DES加密算法。因此它的安全强度高于DES算法。但不应片面理解,系统和数据的安全不仅与应用的加密算法有关,更与加密应用方案有关。和DES算法一样,AES也属于对称加密算法,对密钥的存储与保护,直接决定了整个系统的安全。 AES最常见的有3种方案,分别是AES-128、AES-192和AES-256,它们的区别在于密钥长度不同,AES-128的密钥长度为16bytes(128bit / 8),后两者分别为24bytes和32bytes。密钥越长,安全强度越高,但伴随运算轮数的增
飞翔的鱼丸 2018-10-23 开发技巧 1298
在实际资源操作中,总会有一些不符合 CRUD(Create-Read-Update-Delete) 的情况,一般有几种处理方法。1. 使用 POST 为需要的动作增加一个 endpoint,使用 POST 来执行动作,比如: POST /resend 重新发送邮件。2. 增加控制参数 添加动作相关的参数,通过修改参数来控制动作。比如一个博客网站,会有把写好的文章“发布”的功能,可以用上面的 POST /articles/{:id}/publish 方法,也可以在文章中增加 published:boolean 字段,发布的时候就是更新该字段 PUT /articles/{:id}?publish
飞翔的鱼丸 2018-09-16 开发技巧 1249
当一个api是GET请求, 地址是http://javascript.net.cn/user/comments 正常的GET请求是没有问题的,但是有时候该GET请求会变成非简单请求。比如: this.$http({     method: 'GET',     url: '/user/comments',     params: {page:1, object_id:that.article.id, table_name:"portal_post"},     headers: {     'XX-Token':  tools.getCookie('token'),    
飞翔的鱼丸 2018-05-16 开发技巧 1443
随机推荐
JavaScript Global 对象
WordPress 添加 Favicon 图标的方法
Land APP 小程序
WordPress 语言文件
WordPress 修改 RESTful API 的请求和响应
WordPress 文章排序
JavaScript 代码混淆加密工具 javascript-obfuscator
如何使主题支持 Woocommerce