ajax03_跨域访问问题
ajax跨域访问问题
什么是跨域访问
从一个域名去访问另一个域名的资源
或者从一个站点去访问另一个站点的资源
哪些请求方式可以发送跨域请求
超链接
form表单
传统js代码
javascript标签加载(后期可以改造为jsonp方式)
img标签
相同点:直接改变地址栏地址
哪些方式不能发送跨域请求
- 默认情况下,ajax请求方式:被同源策略阻止
什么是同源策略?
- 浏览器的一种安全策略
- 同源三要素:协议一致,域名一致,端口号一致
- 只有同源才可共用同一个XMLHttpRequest
为什么不能不同源则不能共用同一个XMLHttpRequest?
- 安全角度
解决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请求?
- jdk内置的API
- java.net.URL... 可以发送http请求
- 第三方的开源组件
- apache的httpclient组件(开源免费)
方案5:nginx反向代理
学习了nginx再继续研究
ajax03_跨域访问问题的更多相关文章
- 解决cookie跨域访问
一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...
- Angular2中对ASP.NET MVC跨域访问
应用场景 项目开发决定使用angular2进行前后端分离开发,由我负责后端服务的开发,起初选择的是web api进行开发.对跨域访问通过API中间件+过滤器对跨域访问进行支持.开发一段后,通知需要移植 ...
- cookie 跨域访问的解决方案
Cookie 同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录. ...
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- flash跨域访问,crossdomain.xml,error #2048
最近遇到了flash的万年老梗,跨域访问的问题.之前一直没有处理过这类问题,是因为做项目的时候别人已经处理好了.真到自己遇到的时候,还是很费脑筋的. 1遇到的问题 客户端发布到网页的时候,socket ...
- Ajax跨域访问wcf服务中所遇到的问题总结。
工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...
- Jsonp跨域访问
很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...
- 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 ...
- ajax 跨域访问
后台方法添加 HttpServletResponse response=ServletActionContext.getResponse(); response.addHeader("Acc ...
随机推荐
- 机器学习-学习笔记(一) --> (假设空间 & 版本空间)及 归纳偏好
机器学习 一.机器学习概念 啥是机器学习 机器学习:假设用P来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验E在T中任务上获得了性能改善,则关于T和P,该程序对E进行了学习 通俗讲:通过计 ...
- 注解,lombok
使用注解开发 UserMapper public interface UserMapper { @Select("select * from db4.user") List< ...
- 【mq】从零开始实现 mq-08-配置优化 fluent
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- Springcloud及Git线上配置详解
SpringCloud 这个阶段该如何学? 三层架构 + MVC 框架: Spring IOC AOP SpringBoot,新一代的JavaEE开发标准,自动装配 模块化~ all in one,代 ...
- 网络:Tor
洋葱路由催生了暗网的产生 1995年,美国海军研究实验室的科学家开始开发一套匿名系统,可以避免人们在互联网上的行迹被追 踪到.由于在该系统中,数据被层层密码保护,这个技术被称为叫作"洋葱路由 ...
- consul系列文章02---替换掉.netcore的配置文件
如果是开发微服务的项目,多个服务的配置管理起来比较麻烦,需要集中管理,也就是需要有配置中心: consul集成配置中心的思路:读取配置文件时不在从本地的应用中读取,而是从consul的KEY/valu ...
- 《Effective C++》阅读总结(三):资源管理
C++中的资源管理非常重要,在将资源加载到内存后,便可以使用资源了,当我们不再需要资源时,我们要保证其正确的释放,才能将其占用的内存空间归还给操作系统,不正确的释放很容易造成内存泄漏.本章以资源管理类 ...
- nazo.io 通关记录
游戏网址 说在前面 答案错误页面 nazo.io/wrong 攻略 第0关 谜.io 纯粹是欢迎你来游戏. 所以他给你的start就是答案. 第1关 欢迎 它用灰体字写了key: welcome 直接 ...
- 从数字化概念到落地,都说是一道坎,JNPF能为企业带来什么呢?
数字经济席卷全球推动产业转型是必然趋势,人类社会正在数字化大潮中发生深刻变革,数字化越来越成为推动经济社会发展的核心驱动力.企业正处于数字经济大潮的风口浪尖,故企业经验决策者应深刻认识数字化转型对于企 ...
- fpm工具安装
概述 最近在对机房的编译环境做整理,过程曲折而痛苦,记录一下. 之前的一个老项目,在打包的时候用到了一个叫做fpm的工具. 编译环境涉及centos6和centos7,在新的编译环境的过程中,如何安装 ...