1. URL
一般格式如下:
1 | <scheme>://<netloc>/<path>?<query>#<fragment> |
比如:
1 | http://www.foo.com/path/f.php?id=1&type=cool#new |
对应的关系是:
1 | <scheme> - http |
URL的编码方式有3类:escape, encodeURI, encodeURIComponent, 对应的解码函数是:unescape, decodeURI, decodeURIComponent.
这3中编码函数是有差异的, 甚至在自动URL编码中也存在差异.
2. 同源策略
同源策略是众多安全策略中的一个, 是web层面上的策略.
同源策略规定:不同域的客户端脚本在没有明确授权的情况下, 不能读写对方的资源.
2.1. 同域
同域是指URL的协议, 域名, 端口都相同.
例如, 以下URL是否与http://www.foo.com同域:
| url | 是否同域 | 原因 |
|---|---|---|
| https://www.foo.com | No | 协议不同 |
| http://abc.foo.com | No | 子域名不同 |
| http://foo.com | No | 域名不同 |
| http://www.foo.com:8080 | No | 端口不同 |
| http://www.foo.com/a/ | Yes | 协议, 域名, 端口都相同, 只是多了一个目录 |
2.2. 客户端脚本
主要是指:JavaScript, ActionScript.
2.3. 授权
例如HTML5新标准中提到关于AJAX跨域访问的情况, 默认情况下是不允许跨域访问的, 只有目标站点(假如是http://www.foo.com)明确返回HTTP响应头:
1 | Access-Control-Allow-Origin: http://www.evil.com |
那么www.evil.com站点上的客户端脚本就有权通过AJAX技术对www.foo.com上的数据进行读写操作.
2.4. 读写权限
Web上的资源有很多.
有的只有读权限, 比如HTTP请求头里的Referer(表示请求来源).
有的具备读写权限, 比如document.cookie.
这样区分是出于安全上的考虑.
2.5. 资源
资源是一个很广泛的概念, 只要是数据, 都可以认为是资源.
同源策略里的资源是指:Web客户端的资源.
一般来说, 包括:HTTP消息头, 整个DOM树, 浏览器存储(Cookie, FlashCookie, localStorage等)
3. Resource
- Web前端–黑客技术揭秘