Intelligence without ambition is a bird without wings.

2015-11-17
跨域共享

预检

  1. Origin HTTP请求头

    • 任何涉及CORS的请求都必须携带
  2. Access-Control-Request-Method HTTP请求头

    • 真实请求的方法
  3. Access-Contrl-Request-Headers HTTP请求头

    • 真实请求的自定义header列表
  4. Access-Control-Allow-Origin HTTP响应头

    • 允许进行CORS的来源域
  5. Access-Control-Allow-Method HTTP响应头

    • 允许进行CORS的请求方法列表(响应预检请求)
  6. Access-Control-Allow-Headers HTTP响应头

    • 允许进行CORS的请求头列表(响应预检请求)
  7. Access-Control-Max-Age HTTP响应头

    • 用在响应预检请求上,表示本次预检响应的有效时间.
      在此时间内,浏览器都可以根据此次协商结果决定是否有必要直接发送真实请求,而无需再次发送预检请求
阅读此文

2015-11-16
js-跨域

什么是跨域?

在了解什么是跨域问题之前,先需要了解同源策略

同源策略

什么是同源?

同源是指协议,域名,端口完全一致

为什么需要同源策略?

为了信息安全,最基本的原则即同源的东西是安全的,除此之外都是不安全的.

示例:

一个中间层(代理服务器,路由网关,运营商等),通过IFrame把登录网银的页面嵌套起立,
里面加入了一段恶意代码,将用户的数据发送到指定位置.

参考

  1. 同源策略——浏览器的安全卫士
阅读此文

2015-11-16
http-OPTIONS

用途

  • 获取URL支持的HTTP请求方法
阅读此文

2015-11-16
http-head

说明

HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。
一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。

一个HEAD请求的响应可被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存就被视为过期了

特点

  • 简单,快速,耗用资源少

  • 响应可被缓存

用途

  • 测试超链接的有效性、可用性和最近的修改

  • 用来获取资源的元数据

参考

  1. wiki-超文本传输协议
阅读此文

2015-11-16
ajax

什么是ajax?

全称”Asynchronous Javascript And XML”(异步JavaScript和XML)

作用

在不用重新载入整个网页的前提下(刷新),获取数据,更新网页内容

应用案例

该技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。

要点

  • 核心是XMLHttpRequest对象

参考

  1. XMLHttpRequest 对象
阅读此文

2015-11-16
nginx-允许跨域

1
add_header Cache-Control "Access-Control-Allow-Origin:*";
阅读此文

2015-11-10
go-interface

要点

  1. interface是一组method的集合(而不是function, 因为function没有reciver)

  2. 若某个类型实现了interface内所有method,则该类型对象与该interface对象转换

  3. interface是一种语义上的抽象,该对象提供了某种语义抽象功能,而该功能的具体实现不同

    coder(编码器),存在编码,解码功能,但具体可能有json,xml等多种方式实现

  4. 赋值给interface

    • 若为值,则该类型methodreciver也必须是值类型

    • 若为指针值,则该类型methodreciver也必须是指针类型

    因为methodreciver是否为指针,代表的语义功能可能完全不一样

    reciver为指针类型,意味着在该method中,很可能会改变该对象自身(具体由实现决定)

    若一个method要求的是指针类型,而在给interface赋值时,只是传值的话,是无法改变该对象的!

参考

  1. https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.6.md
阅读此文

2015-11-09
go-rpc

要点

  1. 注册一个类型,即提供一个服务(访问该类型相关的方法)

  2. 方法的原型约定

    • the method’s type is exported.(只有导出的,在rpc包中才可访问)
    • the method is exported.(只有导出的,在rpc包中才可访问)
    • the method has two arguments, both exported (or builtin) types.(只有导出的或内建类型,在rpc包中才可访问)
    • the method’s second argument is a pointer.(第二个为返回参数)
    • the method has return type error.(go风格)

参考

  1. https://golang.org/pkg/net/rpc/
阅读此文

2015-11-06
go-array

要点

  1. 长度是数组类型的一部分

  2. 数组长度不可变

参考

  1. http://blog.golang.org/slices
阅读此文

2015-11-06
go-slice

# 要点

  1. slice是一个数组的封装

    1
    2
    3
    4
    5
    type slice struct {
    array unsafe.Pointer
    len int
    cap int
    }
  2. 使用fmt.Printf("%T")打印显示为[]type,跟数组类似,但不包括长度

  3. 作为传入参数时

    • 若只是改变slice中元素的值,不需要穿引用

    • 若改变了slice长度或容量,则需要穿指针或返回新slice

  4. 用数组初始化slice时,slice容量等于数组的长度减去切割时的索引

1
2
3
4
5
6
7
var array [10]int
slice := array[1:5] // cap = 10 - 1 = 9, len = 5 - 1 = 4(array[1, 2, 3, 4])
fmt.Printf("%T %v\n", array, array)
fmt.Printf("%T %v %v %v\n", slice, slice, len(slice), cap(slice))

[10]int [0 0 0 0 0 0 0 0 0 0]
[]int [0 0 0 0] 4 9

参考

  1. http://blog.golang.org/slices
  2. https://blog.go-zh.org/go-slices-usage-and-internals
阅读此文