`
HWL_SZ
  • 浏览: 54032 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

实现跨域请求

阅读更多

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

 

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

 

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

public class ProxyServlet extends HttpServlet
{
 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
 }
}

分享到:
评论

相关推荐

    通过nginx实现跨域请求

    标题 "通过nginx实现跨域请求" 涉及的核心知识点是网络编程中的跨域问题以及如何利用Nginx服务器作为代理来解决这个问题。Nginx是一个高性能的HTTP和反向代理服务器,它常用于配置和管理网站的访问规则,包括处理...

    PHP AJAX JSONP实现跨域请求使用范例_ajax如何解决跨域请求

    在实际应用中,我们可以使用 JSONP 来实现跨域请求,以便从其他域名下的服务器获取数据。但是,我们需要注意的是,使用 JSONP 会存在安全风险,因为它可以被恶意攻击所利用。 在使用 JSONP 时,我们需要注意以下几...

    详解AngularJS如何实现跨域请求

    AngularJS,作为一个强大的前端框架,提供了多种方式来实现跨域请求。本文将详细讲解AngularJS中的$http服务如何实现跨域请求。 首先,我们来看AngularJS中的核心服务$http。它是一个基于XMLHttpRequest对象(XHR)...

    jQuery Ajax实现跨域请求

    总结来说,jQuery的Ajax功能结合JSONP协议,可以方便地实现跨域请求,这对于前后端分离、单页应用等场景下的数据交互尤其重要。开发者需要理解JSONP的工作原理,以及如何在jQuery中配置Ajax请求以利用JSONP来跨域...

    详解vue-cli项目开发/生产环境代理实现跨域请求

    跨域的方法很多,通常都需要后台配置,不过vue-cli创建的项目,可以直接利用node.js代理服务器,通过修改vue proxyTable接口实现跨域请求。在vue-cli项目中的config文件夹下的index.js配置文件中,修改前的dev: ...

    Jquery跨域Ajax请求测试

    除了JSONP,还可以通过CORS(Cross-Origin Resource Sharing,跨源资源共享)来实现跨域请求。CORS需要服务端支持,在响应头中添加`Access-Control-Allow-Origin`字段,指定允许哪些源进行跨域请求。在jQuery中,...

    html通过 ajax jsonp跨域请求接收和传送数据

    这时,HTML通过AJAX和JSONP技术可以实现跨域请求来接收和传送数据。下面将详细讲解这两个概念及其工作原理。 **HTML和AJAX** HTML(HyperText Markup Language)是网页的基础,用于构建网页结构。AJAX...

    详解Vuejs2.0 如何利用proxyTable实现跨域请求

    为了解决这一问题,Vue CLI提供了一种优雅的解决方案,即通过`proxyTable`配置来实现跨域请求。在本文中,我们将深入探讨如何利用`proxyTable`在Vuejs2.0中实现代理,以便于本地开发时能够顺利调用远程接口。 首先...

    ajax处理跨域请求

    这里将详细讲解如何通过jQuery的AJAX实现跨域请求。 首先,了解什么是CORS(Cross-Origin Resource Sharing,跨源资源共享)。CORS是一种机制,它使用额外的HTTP头来告诉浏览器允许一个域上的网页访问另一个域上的...

    Django实现跨域请求过程详解

    ### Django 实现跨域请求详解 #### 前言 跨域资源共享(Cross-Origin Resource Sharing,简称 CORS)是一种网络浏览器实施的安全策略,用于控制网页脚本如何与不同来源的资源进行交互。根据HTTP请求的不同特性,...

    Flask实现跨域请求的处理方法

    在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全起见,一般来说使用...

    jQuery跨域请求,获取返回值

    这篇博客将探讨如何使用jQuery实现跨域请求以及如何获取返回值。 首先,我们需要理解什么是跨域请求。跨域请求是指一个域下的文档或脚本尝试请求另一个域下的资源,由于安全原因,通常会被浏览器阻止。但为了实现...

    nginx实现跨域访问遇到的问题

    2. 配置 Nginx 上的砖发的 Nginx 配置问题导致无法实现跨域请求,是因为他的 Nginx 打在 Windows 系统上,Windows 和 Linux 在配置上有一点区别,在 Windows 上需要去掉 rewrite 的配置,去掉这个后来就好了。...

    利用JQuery jsonp实现Ajax跨域请求json数据

    JSONP是一种非官方的协议,通过动态创建`&lt;script&gt;`标签来实现跨域请求。由于`&lt;script&gt;`标签不受同源策略限制,可以加载任何源的JavaScript文件,开发者会在请求的URL中添加一个回调函数名参数,服务器接收到请求后,...

    实现跨域例子内附说明.zip

    然而,随着Web应用的发展,有时我们需要打破这种限制,实现跨域请求,例如前后端分离的应用、API接口调用等场景。 本资料包提供了一个实现跨域请求接口的实例,帮助开发者理解并实际操作跨域请求。下面将详细介绍...

    httpclient 跨域请求

    若要打破这个限制,我们需要实现跨域请求。在服务器端,这通常通过设置CORS(Cross-Origin Resource Sharing,跨源资源共享)头来完成,例如设置`Access-Control-Allow-Origin`为特定或所有源。 `httpclient`是...

    jquery+ajax实现跨域请求的方法

    本文将详细介绍使用jQuery和Ajax实现跨域请求的方法,包括前台和后台的具体处理方法。 ### jQuery + Ajax实现跨域请求的前台处理方法 在前端代码中,要实现跨域请求,通常会采用JSONP技术。jQuery提供了简单的方法...

    网络游戏-网络客户端跨域请求数据的实现方法、装置及终端.zip

    因此,在实现跨域请求时,需要确保安全措施,如使用CSRF令牌、设置合适的CORS策略等。 8. **性能优化**: 通过缓存策略、预加载、流式传输等技术,可以优化跨域请求的性能,提高用户体验。 9. **实例分析**: 在...

    JavaScript如何实现跨域请求

    总结起来,JavaScript实现跨域请求主要依赖JSONP和CORS等技术。在实际开发中,应根据项目需求和浏览器兼容性选择合适的方法。在使用第三方库如FlyJSONP时,理解其工作原理并正确配置参数,可以方便地完成跨域数据...

Global site tag (gtag.js) - Google Analytics