`

【转载】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
	}

 

分享到:
评论

相关推荐

    前端常见跨域解决方案(全).mht

    分享转载:前端常见跨域解决方案 1、 通过jsonp跨域 2、 document.domain + iframe跨域 3、 location.hash + iframe 4、 window.name + iframe跨域 5、 postMessage跨域 6、 跨域资源共享(CORS) 7、 nginx...

    微信防盗链JavaScript

    总的来说,微信图片防盗链的破解涉及到跨域资源共享(CORS)和URL重写等技术,开发者需要对JavaScript、PHP以及HTTP协议有一定的理解。同时,为了确保用户体验,我们在实施这些解决方案时,还应当考虑性能优化,比如...

    转载的AJAX反转资料

    6. 安全和性能考虑:学习如何避免跨域问题,优化请求以减少延迟,以及处理错误和异常。 通过研究这份“反转AJAX”资料,开发者可以进一步提升在构建实时、动态Web应用方面的能力,更好地理解和运用AJAX及其相关技术...

    关注基础知识,打造优质前端博客,公众号前端工匠的作者.zip

    欢迎添加我的个人微信frontJS,获取大厂面试题及其答案版权声明本文为博主原创文章,未经博主允许不得转载。掘金博客(全集)sectionFault博客(精华)想加入加入交流群,跟风暴一线大厂的大佬交流学习,先关注「前端...

    各种微博分享按钮代码(转载)

    这篇博客文章“各种微博分享按钮代码(转载)”主要介绍了如何在网站上集成这些分享功能,以便用户一键将网页内容分享到他们的微博账户。 在网页开发中,微博分享按钮的实现通常涉及HTML、CSS以及JavaScript技术。...

    图片列表点击放大(转载,备用)

    - **纯CSS实现**:利用CSS的`transition`和`transform`属性,可以在点击时平滑地放大图片,但这种方法不适用于跨域图片或动态加载的图片。 - **JavaScript库**:如jQuery的`click`事件和`fadeIn`方法,或者更专业...

    AJAX学习手记,网络转载,来之不易.

    **AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这一技术的核心在于JavaScript,XML则通常...

    HTML播放海康视频的RTSP视频流

    RTSP(Real Time Streaming Protocol...为了在HTML5页面中播放,我们可以使用如VLC JavaScript插件或者jwplayer等第三方播放器,它们支持RTSP协议并能与HTML5集成。例如,VLC插件可以通过以下代码片段设置: ```html ...

Global site tag (gtag.js) - Google Analytics