ajax请求和浏览器地址栏上输入url都是http请求,为啥前者有跨域问题,后者没有跨域问题呢?
ajax请求和浏览器地址栏上输入url都是http请求,为啥前者有跨域问题,后者没有跨域问题呢?
Ajax可以偷偷摸摸发请求,而不需要用户操作,用户不知情,那么问题就大了,如果你上了一个不安全的网站,这个网站Ajax偷偷发一个请求到你的网银网站(这里跨域了)拿到你的Cookie,把Cookie传到这个不安全的网站自己的服务器,那么你的网银就会被盗。所以浏览器不允许Ajax跨域。
那么为什么我在浏览器上直接输入地址可以访问?很简单,这一定是用户自己主动操作的,而不是某些不安全网站偷偷摸摸干的,浏览器认为这是安全的,所以允许。
这么说吧,ajax能实现http请求和响应,主要依赖于 XMLHttpRequest(XHR),XHR是受到了同源策略的限制。
直接通过地址栏发起请求,对于服务器而言,这就是一个正常的浏览器请求,并不涉及到另一个域,也不存在一些脚本攻击,所以浏览器并不会对这种请求加以限制。就像我们通过地址栏访问https://www.baidu.com一样,就一个正常用户的请求,我们除了请求百度首页的数据外,并不能对百度做什么,所以浏览器默认这种方式是安全的。
所以浏览器通过URL直接访问一个地址不存在跨域问题。
8 回答4.9k 阅读✓ 已解决
6 回答3.6k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
5 回答1.4k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
显然你对跨域的概念不清。我简单点讲哈,你的ajax文件所在的位置相当于一个域,服务器里的文件相当于一个域,显然你不能从这个域直接拿到另一个域里面的数据,如果可以,你想想多可怕,多不安全! 而你在浏览上输入url,只是让客户端(浏览器)想服务里发送请求,把相关的东西 html js 什么的全加载下来。而这些东西其实都是保存在同一个服务器这个域里面的(后台跟前端文件在一起),所以不存在什么跨域说法了。