默认端口
http:80 https:443 ftp: 21
协议 认证/登陆信息 域名 路径 ?查询字符串 #hash
hash 改变的时候 会跳转到id为 hash 值的元素位置 没有刷新页面 不会发起请求 只是改变文档内部的东西
对服务器没用 浏览器不会把 hash 这部分 发送给服务器
请求里看不到 hash http 不会传
源是指 协议 域名 端口号
指令: location origin
//ie下不支持
if(location.origin===undefined){
location.origin=location.protocol+location.hostname+":"+location.port
}
.protocol
.hostname域名
.port端口
在访问一个域名的时候,会到服务器请求他的ip 也可以手动指定hosts
将一个域名固定到一个ip
可以在hosts 文件里 写127.0.0.1 www.baidu.com
本地开一个服务器 默认为127.0.0.1:3000
然后清除缓存之后 地址栏 输入 http:www.baidu.com:3000 就可以映射百度为本地服务器的域名了
chrome://net-internals/#sockets
清除缓存
模拟 a.com的js 访问b.com的资源
因为本地的服务器打开后 127.0.0.1:3000 这个ip就存在了
可以把a.com和b.com 都指向这个ip 端口改为80
在 test/index.js文件里改端口
80端口只有系统管理员身份才能启动
linux可以用sudo +启动服务命令来监听80端口
win用使用管理员身份运行命令行
a.com 用ajax来请求b.com的资源
会提示 错误
可以引用 但是不能用ajax读
可以跨站的引用 js css png 不属于同源策略
你那ajax来读他的内容 就不可以
a.com 引用(下载 )自 b.com/main.js 不能读写 b.com的资源
因他已经属于a.com 的脚本了
如果 b.com/main.js里 有请求b.com里的其他文件 则属于跨域 报错
降域
// iframe 形式的跨域 或者 有同样后缀的域名
child.a.com 只能设置域名为a.com
把域名变成一样的
我们的协议一样 端口一样 只要改变域名 就可以同源
每个页面都加一句话 document.domain='a.com'
两个iframe就可以互相调用对方的数据和方法了 不过是在两个iframe加载完 可以把回调函数 包含在 window.onload=function(){...}里
问题是 如果 所有页面都改写成同样的域名
那么 任何一个子域名被攻击注入 可能就会影响 主域名里的重要数据泄露
引起大面积的安全问题
更改域名时:
可以访问他的上一级或上上级域名 xxx.child.a.com 可以 改为 child.a.com 或者a.com
不能往回改 当改为a.com了 就不能改回 child.a.com 了
- 接受一个 callback 的名字 : xxx
- 返回JS的内容,调用 xxx
JSONP 就是动态的 script
a.com 定义了函数xxx
请求了b.com里的data.js
data.js的参数是xxx,xxx隐射到文件里的xxx ,真正的数据呢是“a”:“1”
把数据传到函数xxx,让函数xxx调用
a.com已埋好了坑 调用a.com里的xxx方法
1.接受一个callback的名字 xxx
2.返回js的内容,调用xxx
本身没有安全性可言; 只能get 不能post
解决jsonp 的安全问题 约定一个别的域名拿不到的东西 比如cookie
c.com是拿不到a.com的cookie的
jsonp有个token变量