jsonp的工作原理,归根结底一句话:
远程库可调用本地库或另一远程库中的方法。
它不是一种数据格式,更不是一种协议,仅仅只是一种数据调用方式。
当前端调用后台服务时,只有同时满足下列三种情况之一,才属于同域:
- 相同协议
- 相同域名
- 相同端口
跨域调用服务时,如果服务器没有返回相应的响应头信息或者特殊处理,通过ajax的方式无法取到数据,往往会报如下的错误:
jsonp的工作原理,归根结底一句话:
远程库可调用本地库或另一远程库中的方法。
它不是一种数据格式,更不是一种协议,仅仅只是一种数据调用方式。
当前端调用后台服务时,只有同时满足下列三种情况之一,才属于同域:
跨域调用服务时,如果服务器没有返回相应的响应头信息或者特殊处理,通过ajax的方式无法取到数据,往往会报如下的错误:
在Kettle中创建好的Transformation、Jobs除了可以利用Spoon工具来执行外,还可以有其它的执行方式,如下:
这里就简单介绍下如何以服务的形式来访问、执行配置好的Transformation、Jobs。这里要利用Carte工具,我们使用kettle来搭建集群的时候肯定要用到此工具的。
webpack是一个很好用的模块加载及前端构建工具,我在学习相关知识的过程中被其给深深的吸引了。
当我使用其自动刷新及模块热替换时,总是无法成功。后来没办法了,去看官方文档(working-with-editors-ides-supporting-safe-write)才知道问题出在哪:
对于喜欢编程,爱折腾的人来说,使用nodejs搭建后台是一件很有意思的事情:所有的东西从头到尾都是自己来写。当然,你可以使用express 、koa这样的工具来简化你的工作,这是另一回事。如果你或者你们公司尝试打算转nodejs,那么不得不考虑的一件事情就是源代码加密的问题。因为一旦使用nodejs,这就意味着所有的代码都是明文了。
那有没有办法对源码加密使用呢?当然有,先上代码!很简单,就三个文件:
函数式接口(以下简称FI)的定义其实很简单:任何接口,如果只包含唯一一个方法(默认和静态方法除外),那么它就是一个FI。为了让编译器帮助我们确保一个接口满足FI的要求,Java8提供了@FunctionalInterface注解。虽然这个注解的使用不是强制性的,但是使用它的好处是让此接口的目的更加明确,同时编译器也会对代码进行检查,来确保被该注解标注的接口的使用没有语法错误。Runnable接口就是一个FI,下面是它的源代码:
|
|
下面这些示例也属于函数式接口:
|
|
项目地址:https://github.com/DistChen/DDoc.js
Demo :https://distchen.github.io/DDoc.js/
前不久因为项目的一些需求,琢磨了下如何利用 JS 来生成 word 文档,并可以往文档中插入一些基本的元素:段落、标题、列表、表格、图片等,并给这些元素设置一些样式,如颜色、字体等。一番摸索后,发现可行,这里就把最基本的成果分享出来。
- 段落
- 超链接
- 标题
- 表格
- 列表
- 图片
项目地址:https://distchen.github.io/DistSpringWebsocketClient-CSharp/
如果你用过WebSocket 的话,你会觉得用来做推送等消息服务真轻松,同时你也会意识到因为其太简单,导致很多事情都需要自己处理。为了简化二次处理的过程,Spring 提供了一个 Spring WebSocket 模块,此模块用 Stomp 协议来处理消息,使得我们可以用发布、订阅的模式来使用WebSocket。
这里要弄明白的是:Spring WebSocket 仅仅只是用了 Stomp 协议 协议的消息格式,并不是说 Spring WebSocket 自己是一个 Stomp Server,所以是无法使用 Stomp 协议 提供的各种 Client 来进行连接并使用的(Stomp.js除外)。因此如果想用 C# 等语言连接上 Spring WebSocket,只要保证发送的消息符合 Stomp Frame 的格式就行了。
Stomp Frame 示例
COMMAND
header1:value1
header2:value2
Body^@
大家都知道开启 GZIP 后的好处显而易见:提高网页的浏览速度。不管是精简代码,还是压缩图片都不如启用 GZIP 来的实在。GZIP 压缩效率非常高,通常可以达到70%的压缩率,也就是说,如果你的网页有30K,压缩之后就变成了9K左右,极大的减少了传输的数据量。web程序在进行性能优化的时候,都会启用GZIP支持。
之前在做项目的过程中,有一件很痛苦的事情就是每次前端修改文件后(静态资源),必须得清空下浏览器缓存才能生效,所以就看了下浏览器缓存相关的知识点。
http 协议中有这样几个 header:Last-Modified、ETag、Cache-Control、Expires 、If-None-Match 、If-Modified-Since等。访问一个网页可以在地址栏回车,可以F5刷新,Ctrl+F5强制刷新、浏览器的刷新按钮等多种方式。让人想不到的是:不同的访问方式对于缓存的使用有很大区别。
CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。在这篇文章(http://www.coin163.com/java/cas/cas.html)里面有对CAS 的一些介绍,这里我就不进行介绍了,我直接说我的实践过程和改造过程。
这里说下我对cas 这个sso解决方案的看法:cas基于session。因为我们每打开一个浏览器,都会生成一个session,该session 的id值 以cookie 的形式保存在浏览器中,当浏览器关闭或者手动设置 session 失效 invalidate的时候,保留session id 值的cookie会消失。所以当访问某个web应用程序时,如果request 所携带的头消息中的sessionid没有在sso验证中心检测到,那么就会自动跳转到sso验证中心提供的登录页面去进行登录,然后再将请求返回;如果有检测到对应的sessionid,那么就可以直接访问程序。所以cas的模式就是一个验证中心,多个客户端,登录、注销等页面由sso统一提供。