ajax发送http请求会有跨域问题,为啥在浏览器地址栏上输入同样的url没有跨域问题?

ajax请求和浏览器地址栏上输入url都是http请求,为啥前者有跨域问题,后者没有跨域问题呢?

阅读 14.9k
8 个回答

显然你对跨域的概念不清。我简单点讲哈,你的ajax文件所在的位置相当于一个域,服务器里的文件相当于一个域,显然你不能从这个域直接拿到另一个域里面的数据,如果可以,你想想多可怕,多不安全! 而你在浏览上输入url,只是让客户端(浏览器)想服务里发送请求,把相关的东西 html js 什么的全加载下来。而这些东西其实都是保存在同一个服务器这个域里面的(后台跟前端文件在一起),所以不存在什么跨域说法了。

Ajax可以偷偷摸摸发请求,而不需要用户操作,用户不知情,那么问题就大了,如果你上了一个不安全的网站,这个网站Ajax偷偷发一个请求到你的网银网站(这里跨域了)拿到你的Cookie,把Cookie传到这个不安全的网站自己的服务器,那么你的网银就会被盗。所以浏览器不允许Ajax跨域。

那么为什么我在浏览器上直接输入地址可以访问?很简单,这一定是用户自己主动操作的,而不是某些不安全网站偷偷摸摸干的,浏览器认为这是安全的,所以允许。

跨域到底说的是跨的什么域呢?
你直接在地址栏里输入url有什么域可以跨呢?

这就好比一个陌生人(跨域)要求查看你的身份证,你认为不安全拒绝查看,换作警察(浏览器)要求查看,你认为警察的可信度很高,允许查看。去看看同源策略与跨域请求。

你本地启了一个服务发起一个ajax请求,你本地的服务一个域,服务端一个域,不一样所以跨域了。而在浏览器地址栏上直接输入url来发起一个请求,就只存在服务端这一个域。

首先不了解跨域是什么问题,就问为什么会出现跨域问题 。

这么说吧,ajax能实现http请求和响应,主要依赖于 XMLHttpRequest(XHR),XHR是受到了同源策略的限制。

直接通过地址栏发起请求,对于服务器而言,这就是一个正常的浏览器请求,并不涉及到另一个域,也不存在一些脚本攻击,所以浏览器并不会对这种请求加以限制。就像我们通过地址栏访问https://www.baidu.com一样,就一个正常用户的请求,我们除了请求百度首页的数据外,并不能对百度做什么,所以浏览器默认这种方式是安全的。

所以浏览器通过URL直接访问一个地址不存在跨域问题

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