HTTP协议之防盗链与反防盗链

使用HTTP协议。利用referer做防盗链(不需要用PHP编写,而是在服务器层面控制就OK了) 我们在网页里访问站外的图片的时候,在图片本站是可以看得,在外头就不能看了 因为header信息中的referer元素。 还有是做统计的时候, 我们能够统计出来用户是从哪个地方,什么时间访问网站的。比如腾讯分析网站 统计的时候是靠什么知道用户从什么地方去的网站   在HTTP协议中  头信息中有一个很重要的选项 referer referer 表示的是网页的来源以及上一页的地址 如果直接在浏览器输入地址,进入网站,则没有referer头信息 所以,服务器可根据referer来知道用户从哪个网站进来的和图片是从哪个网站进来的 利用referer头信息来设置防盗链的具体操作步骤如下: /** 如何配置apache服务器。用于图片防盗链(使用url重写)          在web服务器层面,我们可以在http协议的referer头信息来判断,                         如果来自站外,则统一重写到一个很小的防盗链提醒图片上去 步骤:     1.打开 apache 重写模块 mod_rewrite             (D:\wamp\bin\apache\apache2.4.9\conf)            #LoadModule rewrite_module modules/mod_rewrite.so                            把#去掉,重启apache     2.在需要防盗的网站或者目录下,写 .htaccess 文件(windows下不能直接创建,可以另存)             并指定防盗链规则                 分析referer信息,如果不是来自本站,则重写 **/ 重写规则 .htaccess 文件  1.哪种情况重写规则     是jpeg/gif/png图片的时候     是referer头与localhost不匹配的时候  2.怎么重写     统一 rewrite 到某个防盗链图片上     RewriteEngine On     //只是在改页面下生效     Rewrite Base /HTTPxieyi/day1     //会对以下格式的文件进行重写规则     RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]     //如果不是来自localhost的用户,会重写     RewriteCond %{HTTP_REFERER} !localhost [NC]     //会重写到自学it网的logo上        RewriteRule .* http://www.zixue.it/static/image/common/zixuelogo.png html的具体代码如下 <!DOCTYPE html> <html lang=“en”> <head>     <meta charset=“UTF-8”>     <title>图片的防盗链</title> </head> <body>     <p>         <img src=“http://imgsrc.baidu.com/forum/w%3D580%3B/sign=5547962a02d162d985ee621421e4a8ec/0d338744ebf81a4c06403427df2a6059242da6ea.jpg” alt=“”>         <img src=“./bb.jpg” alt=“”>…

函数式编程

转自:阮一峰 你可能听说过函数式编程(Functional programming),甚至已经使用了一段时间。 但是,你能说清楚,它到底是什么吗? 网上搜索一下,你会轻松找到好多答案。 与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)并列的编程范式。 最主要的特征是,函数是第一等公民。 强调将计算过程分解成可复用的函数,典型例子就是map方法和reduce方法组合而成 MapReduce 算法。 只有纯的、没有副作用的函数,才是合格的函数。 上面这些说法都对,但还不够,都没有回答下面这个更深层的问题。 为什么要这样做? 这就是,本文要解答的问题。我会通过最简单的语言,帮你理解函数式编程,并且学会它那些基本写法。 需要声明的是,我不是专家,而是一个初学者,最近两年才真正开始学习函数式编程。一直苦于看不懂各种资料,立志要写一篇清晰易懂的教程。下面的内容肯定不够严密,甚至可能包含错误,但是我发现,像下面这样解释,初学者最容易懂。 另外,本文比较长,阅读时请保持耐心。结尾还有 Udacity 的《前端工程师认证课程》的推广,非常感谢他们对本文的赞助。 一、范畴论 函数式编程的起源,是一门叫做范畴论(Category Theory)的数学分支。 理解函数式编程的关键,就是理解范畴论。它是一门很复杂的数学,认为世界上所有的概念体系,都可以抽象成一个个的”范畴”(category)。 1.1 范畴的概念 什么是范畴呢? 维基百科的一句话定义如下。 “范畴就是使用箭头连接的物体。”(In mathematics, a category is an algebraic structure that comprises “objects” that are linked by “arrows”. ) 也就是说,彼此之间存在某种关系的概念、事物、对象等等,都构成”范畴”。随便什么东西,只要能找出它们之间的关系,就能定义一个”范畴”。 上图中,各个点与它们之间的箭头,就构成一个范畴。 箭头表示范畴成员之间的关系,正式的名称叫做”态射”(morphism)。范畴论认为,同一个范畴的所有成员,就是不同状态的”变形”(transformation)。通过”态射”,一个成员可以变形成另一个成员。 1.2 数学模型 既然”范畴”是满足某种变形关系的所有对象,就可以总结出它的数学模型。 所有成员是一个集合 变形关系是函数 也就是说,范畴论是集合论更上层的抽象,简单的理解就是”集合 +…

掌握ES6/ES2015核心内容

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。 也就是说,ES6就是ES2015。 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了。所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了… 在我们正式讲解ES6语法之前,我们得先了解下Babel。 Babel Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。大家可以选择自己习惯的工具来使用使用Babel,具体过程可直接在Babel官网查看: https://babeljs.io/docs/setup/ 最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments 这些是ES6最常用的几个语法,基本上学会它们,我们就可以走遍天下都不怕啦!我会用最通俗易懂的语言和例子来讲解它们,保证一看就懂,一学就会。 let, const 这两个的用途与var类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途。 首先来看下面这个例子: var name = ‘zach’ while (true) { var name = ‘obama’ console.log(name) //obama break } console.log(name) //obama 使用var两次输出都是obama,这是因为ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景就是你现在看到的内层变量覆盖外层变量。而let则实际上为JavaScript新增了块级作用域。用它所声明的变量,只在let命令所在的代码块内有效。 let name = ‘zach’ while (true) { let name…