SilenceHVK / blog

:books: :octocat: Github static blog post, experience the fun of using Issues.Welcome star( 静态博客文章,体验一下使用 Issues 的乐趣,欢迎 star )个人博客地址:blog.hvkcoder.me/love
https://github.com/SilenceHVK/Articles/issues
MIT License
231 stars 9 forks source link

【JavaScript Ajax】AJAX 跨域详解 #35

Open SilenceHVK opened 6 years ago

SilenceHVK commented 6 years ago

产生 AJAX 跨域的原因

  1. 浏览器的限制:浏览器出于安全考虑,当它发现请求是跨域时,会进行一些校验,如果校验不通过就回报跨域安全问题。
  2. 跨域:发出的请求不是本域下的,协议、域名、端口任何一个不一样,浏览器就会认为跨域。
  3. XHR(XMLHttpRequest)请求:XHR 能够在不重新加载页面的情况下更新网页,多用于 AJAX 请求,但会受到同源策略的影响,而导致跨域问题。

解决方案

  1. 禁止浏览器检查(需要对浏览器单独设置,并且不安全,不推荐)

  以 chrome 为例,通过命令行关闭其安全模式:

  1. 使用 JSONP 解决跨域问题:

  JSONP(JSON with Padding)json 的一种“使用模式”,是一种非正式传输协议。其实现原理是利用了 <script> 标签没有跨域限制的“漏洞”,来达到与第三方通讯的目的。此时服务器端将不再返回 JSON 格式的数据,而是返回一段调用某个函数的代码。