`
sean2012
  • 浏览: 46286 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

AJAX跨域访问——XMLHttpRequest代理实现

阅读更多

跨域访问简单来说就是A网站的JavaScript代码试图访问B网站,包括提交内容和获取内容.由于安全原因,跨域访问是被各大浏览器所默认禁止的.在广域网环境中,由于浏览器的安全限制,网络连接的跨域访问时不被允许的,XmlHttpRequest也不例外。但有时候跨域访问资源是必需的。

 

我们不能在浏览器端直接使用AJAX来跨域访问资源,但是在服务器端是没有这种跨域安全限制的。所以,我们只需要让服务器端帮我们完成“跨域访问”的工作,然后在浏览器端用AJAX获取服务器端“跨域访问”的结果就可以了。这就是所谓的在服务器端创建一个 XmlHttpRequest代理,通过这个代理来访问其他域名下的资源。

 

使用XmlHttpRequest访问同一域名下的资源:直接访问:


 

用服务器端的XmlHttpRequest代理来跨域访问资源:
 

 

if(url.indexOf("http://")==0){  
     url=url.replace("?","&");  
     url="Proxy?url"+url;  
}

 

public class Proxy extends javax.servlet.http.HttpServlet {  
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)  
            throws javax.servlet.ServletException, java.io.IOException  {  
        response.setContentType("text/html;charset=GB2312");  
        String url = request.getParameter("url");  
        StringBuffer param = new StringBuffer();  
        Enumeration enu = request.getParameterNames();  
        int total = 0;  
        while(enu.hasMoreElements()){  
            String name = (String)enu.nextElement();  
            if(!name.equals("url")){  
                if(total == 0){  
                    param.append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));  
                } else{  
                    param.append("&").append(name).append("=").append(URLEncoder.encode(request.getParameter(name),"UTF-8"));  
                }  
                total++;  
  
            }  
        }  
        PrintWriter out = response.getWriter();  
        if(url != null){  
            URL connect = new URL(url.toString());  
            URLConnection connection = connect.openConnection();  
            connection.setDoOutput(true);  
            OutputStreamWriter paramout = new OutputStreamWriter(connection.getOutputStream());  
            paramout.write(param.toString());  
            paramout.flush();  
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"GB2312"));  
            String line;  
            while((line = reader.readLine()) != null){  
               out.println(line);  
            }  
            paramout.close();  
            reader.close();  
        }  
  
    } 

 

  • 大小: 19.1 KB
  • 大小: 16.7 KB
分享到:
评论

相关推荐

    Ajax跨域问题及其解决方案.docx

    ### Ajax跨域问题及其解决方案 #### 一、Ajax跨域问题概述 在现代Web开发中,前后端分离架构越来越流行。这种模式下,前端页面与后端服务通常部署在不同的服务器上,甚至可能位于不同的域名下。当浏览器发起对不同...

    Atlas/ajax基础教程——范例源码

    在Ajax(Asynchronous JavaScript and XML)技术的基础上,Atlas致力于简化前端开发,实现页面的无刷新更新,提高用户体验。这个压缩包中的文件很可能包含了关于如何使用Atlas进行Ajax开发的详细教程和实例源代码。 ...

    Ajax征服——Ajax小偷模块 源码

    7. **跨域问题**:由于同源策略的限制,Ajax请求通常只能访问同一域下的资源。如果需要跨域,需要服务器端开启CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)技术。 8. **安全考虑**:...

    ajax跨域,这应该是最全的解决方案了.docx

    ### 什么是Ajax跨域 Ajax跨域问题是前端开发者经常遇到的一个难题。所谓“跨域”,主要是指浏览器出于安全考虑实施的一种限制策略——“同源策略”。同源策略规定,来自不同源的“文档”或脚本只能读取或设置当前...

    AJAX——新手快车道

    **AJAX——新手快车道** 在当今的Web开发中,AJAX(Asynchronous JavaScript and XML)已经成为构建动态、交互性极强的网页不可或缺的技术。它允许网页在不刷新整个页面的情况下,通过后台与服务器进行数据交换,...

    JS跨域访问

    跨域访问是网络开发中非常常见的一种需求,尤其是在现代Web应用中,不同域名下的资源需要相互访问以便集成和分享数据。在JavaScript中,这种跨域的资源访问被称为“跨域请求”,通常会受到同源策略的限制。同源策略...

    JavaScript——Ajax

    7. **跨域Ajax**:CORS(Cross-Origin Resource Sharing)是现代浏览器支持的一种跨域访问策略,允许服务器指定哪些源可以访问其资源。 8. **封装Ajax函数**:为了提高代码复用性,通常会将Ajax请求封装成一个函数...

    ISAS题目——AJAX技术

    - CORS(Cross-Origin Resource Sharing)是AJAX跨域访问的解决方案,通过服务器端设置特定的HTTP头部来允许跨域请求。 5. **安全性**: - **同源策略**:限制了AJAX只能向同源(协议+域名+端口相同)的网站发送...

    Ajax 入门经典 (Ajax 核心 技术)

    - **CORS (Cross-Origin Resource Sharing)**: 是现代浏览器提供的一种跨域访问机制,通过设置服务器头允许特定域名的跨域请求。 ### 7. Ajax的优点与挑战 优点: - 提升用户体验:页面无需刷新,加载更快,操作更...

    jQuery使用ajax跨域请求获取数据

    在前端开发中,跨域问题是一个常见的挑战,由于浏览器的安全策略——同源策略,JavaScript通常只能访问和操作与当前页面同源(协议、域名、端口相同)的资源。然而,随着Web应用的发展,前后端分离的需求使得跨域...

    动态script标签技术结合JSON数据交换格式解决Ajax的跨域问题

    本文探讨了如何利用动态script标签技术和JSON数据交换格式来解决Ajax应用程序中跨域访问第三方Web服务的问题。跨域访问是Web开发中常见的难题之一,尤其是在Ajax应用中,因为浏览器出于安全考虑对JavaScript脚本实施...

    AJAX技术基础

    AJAX的核心是JavaScript对象——XMLHttpRequest,它允许JavaScript在页面不刷新的情况下与服务器进行通信。当用户触发一个AJAX请求时,XMLHttpRequest对象会创建一个新的HTTP请求,并在后台与服务器进行数据交换。...

    ajax技术的入门.docx

    #### 四、AJAX的核心——XMLHttpRequest对象 XMLHttpRequest对象是实现AJAX的关键组件,用于执行异步HTTP请求。通过它,可以实现客户端与服务器之间的非同步数据交互。 #### 五、传统Web开发与使用AJAX进行开发的...

    AJAX开发简略(含续一)

    AJAX 的核心是 JavaScript 对象——XMLHttpRequest,它允许 JavaScript 在后台与服务器进行通信。 ### 1. XMLHttpRequest 对象 XMLHttpRequest 是 AJAX 的基础,它创建了一个与服务器端通信的通道。使用这个对象,...

    IE8 jquery ajax获取静态资源报错TypeError 拒绝访问

    jQuery提供了便捷的$.ajax()函数来实现Ajax请求。然而,当涉及到跨域请求时,即从一个域名下的网页请求另一个域名的数据,浏览器会受到同源策略的限制,这可能导致安全问题。为了解决这个问题,现代浏览器支持CORS...

    AJAX开发简略.rar

    AJAX 的核心是 JavaScript 对象——XMLHttpRequest,它允许 JavaScript 在后台与服务器进行通信,而不会中断用户的操作。 **1. XMLHttpRequest对象** XMLHttpRequest(XHR)是 AJAX 的基础,它提供了一种在浏览器...

    AJAX开发简略

    AJAX 的核心是 JavaScript 对象——XMLHttpRequest,它允许 JavaScript 在后台与服务器进行通信,而不会中断用户的交互。 ### 1. XMLHttpRequest 对象 XMLHttpRequest(XHR)是 AJAX 的基础,它是一个内置于浏览器...

Global site tag (gtag.js) - Google Analytics