【Javaweb】Ajax跨域问题及其解决方案

目录

  • 什么是Ajax
  • 为什么Ajax不能跨域
  • 如何解决Ajax跨域的问题?
    • CORS
      • CORS例子
    • Jsonp

什么是Ajax

在Ajax没有出现的时候,大部分的网络资源获取都要经过这种过程:
1、浏览器发送请求
2、服务器接受请求,返回资源
3、浏览器得到资源,进行界面刷新(这个刷新是强制的)
但是这样就会出现一个问题,就是我不能局部刷新网页内容,如果要进行内容刷新就必须刷新整个界面。这样就很鸡肋了,比如说我想要给一篇文章点赞,点赞后需要刷新文章的总点赞数量,总不能把整个网页都给我刷新一遍吧,这样体验就太差了。
为了解决这个问题,Ajax出现了,Ajax不是一个语言,也不是一门新技术,它是一系列技术的结合,Ajax的全称为Asynchronous JavaScript + XML。使用Ajax获取资源时,只是动态响应操作,发出对应的请求,得到返回结果或者资源,将其快速显示(或更新)到局部界面,这样就可以在得到资源的同时,不刷新整个界面。

为什么Ajax不能跨域

Ajax不能跨域,是因为浏览器都遵循了同源政策:不是“同协议、同域名、同端口” 的网页资源无法相互访问。Ajax就是采用了同源协议,所以Ajax无法访问非同源的资源。

但是from表单是可以跨域的,这是为什么呢?知乎上有个大佬说的很详细:
因为原页面用 form 提交到另一个域名之后,界面进行了刷新,原页面的脚本无法获取新页面中的内容,所以浏览器认为这是安全的。
而 AJAX 是可以读取响应内容的,因此浏览器不能允许你这样做。

如果你细心的话你会发现,其实请求已经发送出去了(Status Code: 200 OK ),你只是拿不到响应而已。所以浏览器这个策略的本质是,一个域名的 JS ,在未经允许的情况下,不得读取另一个域名的内容。但浏览器并不阻止你向另一个域名发送请求。

作者:方应杭
链接:https://www.zhihu.com/question/31592553/answer/190789780
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如何解决Ajax跨域的问题?

目前普遍存在两种解决Ajax跨域问题的方法,一种是Jsonp(Json with padding),原理就是用

你可能感兴趣的:(【前端学习之路】)