前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ajax(四)

Ajax(四)

作者头像
且陶陶
发布2023-04-12 15:38:05
2550
发布2023-04-12 15:38:05
举报
文章被收录于专栏:Triciaの小世界

同源策略

概念

同源

是指两个URL地址具有相同的协议、主机名、端口号

同源策略

浏览器提供的一个安全功能。(没有浏览器,就没有同源策略)

浏览器同源策略的规定:不允许非同源的URL之间进行资源交互。

非同源但能访问

💡 非同源但能访问的场景 => imgscriptsrc标签请求不受同源策略的限制

跨域

概念:

同源指的是两个 URL 的协议、主机名、端口号完全一致,反之,则是跨域。

出现跨域的根本原因: 浏览器的同源策略不允许非同源的 URL 之间进行资源的交互。

浏览器对跨域请求的拦截过程

浏览器允许发起跨域请求。但跨域请求回来的数据,会被浏览器拦截,无法被页面获取到。

突破浏览器跨域限制的两种方案

1. JSONP

JSONP 出现较早 来自民间(非官方)

优点:

兼容性好(兼容低版本 IE)

缺点:

  • 仅支持 GET 请求
  • 不是真正的Ajax技术,因为没有用到XMLHttpRequest对象

底层实现原理:

使用了 <script> 中的src属性

  • 利用script标签, 不受同源策略限制, 加载一个js
  • 后台返回函数调用
  • 前端声明函数

原因:

  1. src属性不受同源策略的限制
  2. 可以把非同源的JavaScript代码请求到本地并执行
  3. 把非同源的JavaScript代码请求到本地并执行
代码语言:javascript
复制
<!-- script的src是请求一个js文件 -->
  <script src="http://www.liulongbin.top:3009/api/getscript"></script>
在这里插入图片描述
在这里插入图片描述
  1. 如果请求回来的 JavaScript 代码只包含函数的调用,则需要程序员手动定义 show 方法。
代码语言:javascript
复制
  <!-- 首先要先声明函数 -->
  <!-- 函数虽然可以先调用后声明,但是是在同一个script标签中的 -->
  <!-- 这里声明的函数是挂载到window上的 -->
  <script>
    function show(obj) {
      console.log(obj)
    }
  </script>

  <script src="接口/api/getscript2"></script>
在这里插入图片描述
在这里插入图片描述
  1. 在指定<script> 标签的 src 属性时,可以通过查询参数中的callback,自定义回调函数的名称:
代码语言:javascript
复制
<script>
    function myFn(data) {
      console.log(data)
    }
  </script>
  <script src="接口/api/jsonp?callback=myFn"></script>
在这里插入图片描述
在这里插入图片描述
  1. 在指定 <script> 标签的 src 属性时,还可以通过查询参数的方式,指定要发送给服务器的数据:
代码语言:javascript
复制
<script>
    function myJSONP(data) {
      console.log(data)
    }
  </script>
  <script src="接口/api/jsonp?callback=myJSONP**&username=Tt&age=18**"></script>
在这里插入图片描述
在这里插入图片描述

2. CORS ⭐

CORS 出现较晚 来自W3C 官方标准

优点:

  • 是真正的Ajax请求
  • 支持 GET、POST、PUT、DELETE、PATCH等常见 的请求方式 。
  • 只需要后端开启CORS功能即可,前端代码无需任何改动。

缺点 :

不兼容某些低版本浏览器

💡 结论:只要用到了 XMLHttpRequest 对象,发起的就是 Ajax 请求

概念:

CORS 技术需要浏览器和服务器同时支持,二者缺一不可。

  • 浏览器要支持 CORS 功能(主流的浏览器全部支持,IE 不能低于 IE10)
  • 服务器要开启 CORS 功能(需要后端开发者为接口开启 CORS 功能)

原理:

服务器端通过 Access-Control-Allow-Origin 响应头,来告诉浏览器当前的 API 接口是否允许跨域请求。

响应头

可以访问的网站

Access-Control-Allow-Origin: *

所有的网站

Access-Control-Allow-Origin: http://www.baidu.com

只有百度

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 同源策略
    • 概念
      • 同源
      • 同源策略
    • 非同源但能访问
    • 跨域
      • 概念:
        • 浏览器对跨域请求的拦截过程
          • 突破浏览器跨域限制的两种方案
            • 1. JSONP
            • 2. CORS ⭐
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档