ajax跨域访问问题

  1. 什么是跨域访问

    从一个域名去访问另一个域名的资源

    或者从一个站点去访问另一个站点的资源

  2. 哪些请求方式可以发送跨域请求

    • 超链接

    • form表单

    • 传统js代码

    • javascript标签加载(后期可以改造为jsonp方式)

    • img标签

    相同点:直接改变地址栏地址

  3. 哪些方式不能发送跨域请求

    • 默认情况下,ajax请求方式:被同源策略阻止
  4. 什么是同源策略?

    • 浏览器的一种安全策略
    • 同源三要素:协议一致,域名一致,端口号一致
    • 只有同源才可共用同一个XMLHttpRequest
  5. 为什么不能不同源则不能共用同一个XMLHttpRequest?

    • 安全角度
  6. 解决ajax跨域请求的方案

    方案1:设置响应头

    //被访问的资源,设置允许访问自身的访问源
    response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080") //允许某个访问源
    response.setHeader("Access-Control-Allow-Origin", "*") //允许所有访问源

    方案2:jsonp(压根没有用到XMLHttpRequest对象,不受同源策略的限制)

    • json with padding(带填充的json)

    • 不是一个真正的ajax请求,但是可以完成局部刷新效果,是一种类ajax请求

    • 并且可以完成ajax跨域请求

      <!--利用<script>标签,不用超链接(页面跳转,非局部刷新)-->
      <script src="http://localhost;8081/b/jsonp1"></script> <!--
      后端响应的js代码,在返回到前端后,浏览器会执行这段js代码
      --> <!--
      前端可以动态的向后端传递要调用的函数的名称
      -->

      jsonp 解决跨域问题时,只支持get请求

      jsonp底层原理实现

         自定义时机执行<script>标签
      var scriptElement = document.createElement("script") //创建script元素
      scriptElement.type = "text/javascript" //设置script元素属性
      scriptElement.src = "http://localhost:8081/b/jsonp1?fun=sayHello"
      document.getElementsByTagName("body")[0].appendChild(scriptElement) //将script对象添加到body标签中(相当于完成了script标签的加载)
      后端返回数据时参照前端函数名返回

    方案3:官方jQuery类库封装的jsonp

      本质:方案2的高度封装
    核心代码 ```javascript
    $.ajax({
    type : "GET",
    url : "http://localhost:8081/b/jsonp1",
    dataType : "jsonp" //数据类型
    jsonp : "fun" //指定参数名,不设置的时候默认为"call back" ----> 指定第一层回调函数(主要用来作为入口,接受后端传来的json数据)
    jsonCallback : "sayHello" //指定回调函数的名字,不设置的时候,随即生成一个回调函数,且会调用success的回调函数 ----> 指定第二层回调函数(主要用于按照程序员需求处理后端传来的数据)
    })
    ```

    方案4 : 代理机制

    java程序如何发送get或者post请求?

    1. jdk内置的API

      1. java.net.URL... 可以发送http请求
    2. 第三方的开源组件
      1. apache的httpclient组件(开源免费)

    方案5:nginx反向代理

    学习了nginx再继续研究

ajax03_跨域访问问题的更多相关文章

  1. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  2. Angular2中对ASP.NET MVC跨域访问

    应用场景 项目开发决定使用angular2进行前后端分离开发,由我负责后端服务的开发,起初选择的是web api进行开发.对跨域访问通过API中间件+过滤器对跨域访问进行支持.开发一段后,通知需要移植 ...

  3. cookie 跨域访问的解决方案

    Cookie 同域单点登录  最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录.    ...

  4. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  5. flash跨域访问,crossdomain.xml,error #2048

    最近遇到了flash的万年老梗,跨域访问的问题.之前一直没有处理过这类问题,是因为做项目的时候别人已经处理好了.真到自己遇到的时候,还是很费脑筋的. 1遇到的问题 客户端发布到网页的时候,socket ...

  6. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  7. Jsonp跨域访问

    很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...

  8. js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource

    js跨域访问提示错误:XMLHttpRequest cannot load http://...... No 'Access-Control-Allow-Origin' header is prese ...

  9. ajax 跨域访问

    后台方法添加 HttpServletResponse response=ServletActionContext.getResponse(); response.addHeader("Acc ...

随机推荐

  1. Java语言的词法分析器的Java实现

    一.实验目的 1. 学会针对DFA转换图实现相应的高级语言源程序. 2. 深刻领会状态转换图的含义,逐步理解有限自动机. 3. 掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理. 二.实验内 ...

  2. 基于Docker&Kubernetes构建PaaS平台基础知识梳理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...

  3. Python-100-Days-master

    跟着python100学习一下 100以内的素数 # 输出100以内的所有素数 # 想法:从1到100遍历,假设得到了i=17,那么此时从1到9遍历,如果找到了一个数用17能除尽则跳出循环 # 如果找 ...

  4. scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium

    今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...

  5. 142_Power BI之同比预测

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近刚好在做一个简单同比预测的模型,预测方法很简单,就是累计同比预测,把MTD展示出来. [video widt ...

  6. 116_Power Pivot 先进先出原则库龄库存计算相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 前面写过了一个关于进销存的案例,留一个话题就是先进先出的库存计算. 刚好有朋友提了相关这样的需求.先来看看效果. ...

  7. 广义SAM

    参考 还有首先你要会SAM吧~ 用途 相比与单串SAM,广义自动机能存储的是多个字符串. 有两种写法,第一种是离线利用trie树结构,第二种是在线伪广义SAM 离线+Trie 首先构建出trie树. ...

  8. 【leetcode 206】 反转链表(简单)

    链表 概念: 区别于数组,链表中的元素不是存储在内存中连续的一片区域,链表中的数据存储在每一个称之为「结点」复合区域里,在每一个结点除了存储数据以外,还保存了到下一个结点的指针(Pointer). 由 ...

  9. 使用git提交和拉取gitee的代码

    使用git提交和拉取gitee的代码 1. 安装Git(自行摸索) 2. 在gitee新建仓库 名称和路径自己写 这两个二选一足矣 默认分支master就行 复制这个链接,待会要用 3. 新建项目目录 ...

  10. 接口测试postman深度挖掘应用①

    一.测试接口前需要搞明白的原理: 1.在讲如何使用postman时,我们首先应该要了解网络的请求相应的知识,下面以fiddle进行抓包为例分析: 通过fiddler抓包我们不难发现,客户端也就是用户会 ...