跨域请求(一)
2018-06-27 09:10:42来源:未知 阅读 ()
1.cors 跨域资源共享
cors是W3C标准,可以通过XMLHttpRequest 解除ajax的同源使用限制。
1.1基本使用
前台请求和正常ajax请求没有任何区别,浏览器发现是跨域请求则会在请求头中增加 “Origin” 请求头
Origin:http://localhost:8080
cors的实现主要是后台提供接口Access-Control-Allow-Origin
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); // * 代表接受任意域的请求 response.setHeader("Access-Control-Allow-Origin", "*");
1.2发送Cookie
如果要发送Cookie则后台需要设置Access-Control-Allow-Credentials响应头
response.setHeader("Access-Control-Allow-Credentials", "true");
前台js则需要设置XMLHttpRequest对象的withCredentials属性
var xhr = new XMLHttpRequest(); xhr.open("POST","http://localhost:8090/javascriptDemo/CrosDemo",true); xhr.withCredentials = true;
不过这个请求中的Cookie是8090域中的Cookie,并不是8080的,另外如果要发送Cookie那么“Access-Control-Allow-Origin”必须设置成指定的域,不能使用“*”
原网页也没有办法通过document.cookie访问到服务器域下的Cookie
2.JSONP
JSONP是英文JSON with Padding的缩写,是一个非官方的协议。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。 JSONP是一种script tag的注入,将server返回的response添加到页面实现特定功能。
个人理解:前台将回调函数传递给后台,服务端直接返回可执行的JavaScript函数调用
前台代码:
<script src="http://localhost:8090/javascriptDemo/CrosDemo?jsonp=test"></script>
后台代码:
response.setContentType("text/javascript"); PrintWriter out = response.getWriter(); String callBack = (String) request.getParameter("jsonp"); Map map = new HashMap(); map.put("name", "test"); map.put("id", "12"); JSONObject jsonObj = JSONObject.fromObject(map); out.print(callBack+"("+jsonObj+")"); out.close();
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 前端笔记之微信小程序(三)GET请求案例&文件上传和 2019-08-14
- vue动态请求到的多重数组循环遍历,取值问题,如果某个值存 2019-08-14
- 关于ajax异步请求的一个细节问题 2019-08-14
- http请求post,文件导出兼容IE10+ 2019-08-14
- 前端之:传统的DOM是如何渲染的? 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash