0%

url

1. URL

一般格式如下:

1
<scheme>://<netloc>/<path>?<query>#<fragment>

比如:

1
http://www.foo.com/path/f.php?id=1&type=cool#new

对应的关系是:

1
2
3
4
5
<scheme> - http
<netloc> - www.foo.com
<path> - /path/f.php
<query> - id=1&type=cool
<fragment> - new

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前端–黑客技术揭秘