如何理解同源策略与跨域的一个问题?

如题详述:
今天看廖雪峰老师文章,其中的一句话不太理解:图片描述
其实这也是我最近项目中不太明白的一个点,我的操作是:本地新建html,利用jqueryajax通过数据接口向公司服务器请求数据,将数据填充页面,再本地直接点击打开(知道这样不好)。按道理本地页面,和请求远程服务器数据,这应该是明显的跨域啊,可是我却不需要做任何的跨域处理。

这就是我不明白的点,并且我的这种做法,明显和廖雪峰老师说的这句话相违背

注:希望懂我疑惑的朋友回复,静候您的佳音.....

阅读 3.8k
5 个回答

估计是服务器配置了"Access-Control-Allow-Origin":"*"

后台允许跨域了呗

同源策略是浏览器基于安全的考虑所做的行为

廖雪峰老师说的“默认情况下,JavaScript在发送ajax请求时,url的域名必须和当前页面完全一致。”这个意思是默认情况下是发送请求的域(源域)和请求的域(目的域)是同源的,也就是相同的,不需要跨域。

你描述的操作是,在本地创建html文件,并用ajax发送请求,请求某个域的资源,没有发生跨域,可以这样解释:

如果是用node前端服务器发出请求的话,源域是:localhost,而直接点击html运行时请求的源域为:null。如果请求成功了没被拒绝,说明请求的目的域是开放了权限,也就是在服务端加上了”Access-Control-Allow-Origin: *“,这个表示任何域都可以请求。

但是,如果服务端没加”Access-Control-Allow-Origin: *“的话,请求会被拒绝的。

比如我创建了html中ajax请求我的一个资源,我没有设置“Access-Control-Allow-Origin: *“,结果浏览器会阻止:

Failed to load http://tp-api.tcs-y.com/account.php/login/login: The 'Access-Control-Allow-Origin' header has a value 'http://account.tcs-y.com' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access.

可以参考我的博客:跨域控制

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题