`

【转载】JavaScript跨域

阅读更多

使用JQuery Json的兄弟们经常会碰到这样的问题,使用AJAX往远程服务端发送请求,获取JSON数据并在前台页面进行操作。而这时前台往往会出现js错误,拒绝访问。这是为什么?
首先我们必须明白json是基于Javascript实现的

 

其次需要了解关于网站的同源策略,什么是同源策略?
同源策略是客户端脚本(尤其是Javascript)的重要安全度量标准,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都使用这个策略。同源策略不允许来自于其它站点的脚本运行于本站点之中。为什么要使用同源策略呢?
假如没有同源策略,众所周知,JavaScript可以做很多事情,比如:读取/修改网页中某个值。假设浏览器同时打开两个网站,一个是银行网站,另一个是专门盗取银行信息的恶意网站,如果没有同源策略,恶意网站可以轻易盗取用户的用户名和密码,这个后果是很严重的

 

最后,我们来说说怎么解决这个问题,达到间接跨域访问的目的
首先必须明白一点跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的。
可从这一点切入,通过后台作为一个代理,接受远程站点返回的数据再返回前台而面,达到“同源”的目的。
具体代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);
}

	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
			IOException {
		boolean requestType = false;// 标记远程请求类型,默认为GET方式
		resp.setCharacterEncoding("UTF-8");
		req.setCharacterEncoding("UTF-8");
		PrintWriter out = resp.getWriter();
		Enumeration keys = req.getParameterNames();// 取出客户端传入的所有参数名
		ArrayList<String> params = new ArrayList<String>();
		String url = ""; // 远程地址
		while (keys.hasMoreElements()) {
			String key = (String) keys.nextElement();

			params.add(key);// 其它加入参数列表,此处为参与远程请求的参数
			requestType = true;// 修改标记,表求远程请求为POST方式

		}

		HttpClient client = new HttpClient();
		HttpMethod method = null;
		if (requestType) {// 判断请求方式,并实例化HttpMethod对象,true:POST,false:GET
			method = new UTF8PostMethod(url);
			for (String name : params) {// 迭代POST参数,加入到请求中
				String _value = req.getParameter(name);
				// System.out.println(name+"="+_value);
				((PostMethod) method).setParameter(name, _value);
			}
		} else {
			method = new GetMethod(url);
		}
		client.executeMethod(method);// 执行请求
		String bodystr = method.getResponseBodyAsString();// 返回结果
		out.println(bodystr);// 将结果返回给客户端
	}

	/**
	 * 内部类,转换URL字符串为UTF-8
	 * 
	 * @author Administrator
	 * 
	 */
	private static class UTF8PostMethod extends PostMethod {
		public UTF8PostMethod(String url) {
			super(url);
		}

		@Override
		public String getRequestCharSet() {
			return "UTF-8";
		}
	}

	public void init() throws ServletException {
		// Put your code here
	}

 

分享到:
评论

相关推荐

    Javascript跨域和Ajax跨域解决方案

    JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...

    javaScript跨域通信

    JavaScript跨域通信是Web开发中的一个重要概念,它涉及到浏览器的安全策略和Ajax请求的限制。由于浏览器的同源策略,一个域名下的JavaScript无法直接访问或操作不同域名下的资源,这就需要我们采用特定的方法来实现...

    javascript跨域插件 实现双向跨域

    实现javascript跨域,可以在不同域名双向通信,内含demo,支持IE6+、火狐,谷歌等浏览器 配套文章:http://blog.csdn.net/mycwq/article/details/16344171

    arcgis api for javascript跨域处理方案

    在使用ArcGIS API for JavaScript开发Web应用程序时,经常会遇到跨域问题。这是因为浏览器的安全策略限制了JavaScript从一个源(域名、协议或端口)请求另一个源的数据。ArcGIS API for JavaScript是一个强大的工具...

    javascript跨域调试工具Javascript Debug Toolkit 1.0.2

    在Web开发的浪潮中,JavaScript跨域调试一直是困扰开发者的一个技术难题。由于浏览器的安全策略限制,JavaScript在不同源之间无法自由交互,这给开发者带来了极大的不便,尤其是在涉及到跨域资源共享(CORS)的场景...

    javascript跨域方案总结

    JavaScript跨域方案是Web开发中的一个重要主题,尤其是在构建现代Web应用程序时。由于浏览器的安全策略,JavaScript在不同域名之间默认不允许进行通信,这就是所谓的“同源策略”。然而,开发者经常需要在多个域之间...

    Javascript跨域访问解决方案

    JavaScript跨域访问解决方案 在Web开发中,JavaScript的同源策略是浏览器为了保障用户安全而实施的一项重要机制。它限制了脚本只能访问与当前页面具有相同协议(如http或https)、主机名和端口号的资源。然而,在...

    JavaScript 跨域通信方法

    ### JavaScript父子页面跨域通信详解 #### 一、引言 在现代Web开发中,跨域通信是一个常见的问题。由于浏览器的安全策略——同源策略(Same-origin policy)的存在,JavaScript在处理不同源之间的数据交互时会受到...

    JavaScript跨域总结

    JavaScript跨域总结 在Web开发中,由于浏览器的同源策略限制,JavaScript代码通常只能访问与自身页面协议、域名和端口完全相同的资源。这种安全机制是为了防止恶意脚本通过跨站点请求获取用户敏感信息。然而,随着...

    javascript跨域访问的方法.pdf

    JavaScript跨域访问是Web开发中的常见挑战,由于浏览器的安全策略——同源策略,JavaScript通常只能访问与当前页面同源(协议、域名、端口都相同)的资源。然而,为了实现不同源之间的通信,开发者可以采取多种方法...

    JavaScript跨域总结与解决办法

    ### JavaScript跨域总结与解决办法 #### 跨域的基本概念 跨域问题源自于浏览器的安全策略之一——**同源策略**。同源策略是浏览器为了防止恶意网站通过脚本访问其他网站的数据而采取的一种安全措施。它规定了一个...

    JavaScript跨域 node example.

    JavaScript跨域是Web开发中一个常见的挑战,尤其是在进行Ajax请求或者使用API时。由于浏览器的安全策略,不同源的HTTP请求会被禁止,这就是所谓的"同源策略"。然而,随着Web应用的发展,跨域需求日益增加,Node.js...

    javascript跨域原因以及解决方案分享

    JavaScript跨域问题主要源于浏览器的同源策略,这是一种安全机制,限制了JavaScript脚本只能访问与当前页面同协议、同域名、同端口的资源。当尝试从一个域名下的网页去请求另一个域名的数据时,例如通过Ajax进行...

    javascript跨域请求包装函数与用法示例.docx

    ### JavaScript 跨域请求包装函数与用法详解 在现代Web开发中,跨域问题是一个常见的挑战。由于浏览器出于安全考虑实施了同源策略(Same-Origin Policy),这限制了一个域下的文档或脚本如何与另一个域下的资源进行...

    javascript跨域的方法汇总.docx

    JavaScript跨域是Web开发中一个常见的挑战,主要是由于浏览器的安全策略——同源策略(Same-origin policy)限制。同源策略要求网页只能访问与其自身URL协议、域名和端口完全相同的资源,以防止恶意脚本窃取数据。...

    javascript跨域访问的方法.docx

    JavaScript跨域访问是Web开发中常见的一种挑战,由于浏览器的同源策略限制,一个域上的脚本不能直接获取或操作另一个域上的资源。为了解决这个问题,开发者通常采用以下三种主要方法:1. 基于iframe实现跨域2. JSONP...

    JavaScript跨域调用基于JSON的RESTful API_.docx

    【JavaScript跨域调用基于JSON的RESTful API】 在Web开发中,JavaScript是客户端脚本语言,主要用于增强用户界面和实现动态交互。然而,由于浏览器的同源策略(Same Origin Policy),JavaScript在处理AJAX...

    JavaScript跨域处理

    JavaScript跨域处理是Web开发中的一个关键概念,由于浏览器的安全策略,JavaScript通常被限制在同一源策略下运行,这意味着脚本只能访问与加载它的页面来自同一域名的资源。然而,在实际应用中,为了实现数据交互、...

    javascript插件 解决双向跨域问题

    在JavaScript编程中,跨域(Cross-Origin)是一个常见的问题,特别是在Web开发中,当尝试从一个源(如一个域名、协议或端口)加载资源到另一个源时,浏览器的安全策略通常会阻止这种行为,以防止恶意脚本从不受信任...

Global site tag (gtag.js) - Google Analytics