`

AJAX跨域权限问题

阅读更多
本地调试时正常,发布到服务器后遇到该问题,google到下面的文章,转贴过来。原文如下:

今天开始测试写好的Ajax端口,以适应两台服务器之间的通信。测试方法如下:

有ABC三台电脑,其中B是放置Ajax应用的服务器,C是放置数据的服务器,它上面有一个接受Ajax请求的应用。A是客户端。现在在A上访问B的应用,用Ajax发起http请求到C。但是在JS里面报错了,把错误信息用alert(e.message)打出来,看到是“拒绝访问”。

于是大惊,开始怀疑是人品问题,但是发现在B的本地发送请求到C时就正常。逐条语句检查的时候发现是xmlHttp.open这句出的问题。后来发现这个错误其实是跨域权限的问题,也就是Ie的安全级别高了,打开IE的安全设置把客户端电脑的 “通过域访问数据资源”这一项设为启动之后就能顺利访问了。

但是这总不是长久之计,不能强行让不同域的客户都这么设置,所以还是在本地加一个Servlet接受前台请求,之后再由后台转发,就不涉及跨域的问题啦。

java 代码
/**  
* @author king  
*/  
public class DownloadProxyServlet extends HttpServlet {   
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        String urlString = request.getParameter("url");   
        Enumeration parameterNames = request.getParameterNames();   
        StringBuffer parammeters = new StringBuffer("?");   
        while (parameterNames.hasMoreElements()) {   
            String paramName = (String) parameterNames.nextElement();   
            String paramValue = request.getParameter(paramName);   
            String composeParameter = composeParamenter(paramName, paramValue);   
            parammeters.append(composeParameter);   
            parammeters.append("&");   
        }   
        int paramerterSize = parammeters.length();   
        parammeters.deleteCharAt(paramerterSize - 1);   
        writeResponse(response, urlString, parammeters);   
    }   
  
    private void writeResponse(HttpServletResponse response, String urlString,   
            StringBuffer parameters) throws ServletException {   
        try ...{   
            URL url = new URL(urlString + parameters.toString());   
            URLConnection urlConnection = url.openConnection();   
            response.setContentType(urlConnection.getContentType());   
            InputStream ins = urlConnection.getInputStream();   
            OutputStream outs = response.getOutputStream();   
            byte[] buffer = new byte[READ_BUFFER_SIZE];   
            int bytesRead = 0;   
            while ((bytesRead = ins.read(buffer, 0, READ_BUFFER_SIZE)) != -1) {   
                outs.write(buffer, 0, bytesRead);   
            }   
            outs.flush();   
            outs.close();   
            ins.close();   
        } catch (Exception e) {   
            try ...{   
                response.sendError(   
                        HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e   
                                .getMessage());   
            } catch (IOException ioe) {   
                throw new ServletException(ioe);   
            }   
        }   
    }   
  
    private String composeParamenter(String paramName, String paramValue) {   
        if (paramName != null && !"".equals(paramName.trim())   
                && paramValue != null && !"".equals(paramValue.trim())) {   
            return (paramName + "=" + paramValue);   
        }   
        return "";   
    }   
  
}  
分享到:
评论

相关推荐

    IE7 Ajax跨域问题

    NULL 博文链接:https://robotlgw.iteye.com/blog/663306

    ASP.net直接登录OWA_ajax跨域访问(精品).rar

    但用IIS发布后,提示没权限,后来发现是ajax跨域访问的权限问题。 在网上折腾了两天,终于找到解决办法。 希望有相同需求的朋友能直接通过我网上收集并实例测试使用过的资源解决这个问题,少走弯路

    解决AJAX中跨域访问出现''没有权限''的错误

    解决AJAX中跨域访问出现''没有权限''的错误

    Ajax跨域问题的解决办法汇总(推荐)

    本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题...这样反反复复改来改去好久都没能解决,于是求救同事,提醒可能是ajax跨域问

    【JavaScript源代码】Ajax解决跨域之设置CORS响应头实现跨域案例详解.docx

    Ajax解决跨域之设置CORS响应头实现跨域案例详解  1.设置CORS响应头实现跨域 跨源资源共享(CORS) CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS 是官方的跨域解决方 案,它的特点是不需要在客户端...

    解决AJAX中跨域访问出现’没有权限’的错误

    禁止访问非同域的网站,下面一个例子来访问http://www.google.cn, [removed] function createobj() { if (window.ActiveXObject) { return new ActiveXObject(“Microsoft.XMLHTTP”); } else if (window....

    IE9版本以下ajax 跨域问题可行解决方法

    ajax跨域请求数据在谷歌火狐我本地IE11都是没问题的。 让测试就发现问题了,IE8下请求不到数据,然后我查看一下自己写的js看有没有不兼容问题,可是都没有啊,为什么就请求不到呢。 我把ajax的error打印出来提示no ...

    谷歌Google跨域脚本

    谷歌Google跨域脚本,本地可以直接跨域

    基于C#后台调用跨域MVC服务及带Cookie验证的实现

    背景随着富客户端框架的盛行,以及众多优秀的前端js框架,很多情况我们会遇到跨域的问题,而js的ajax请求是不允许直接跨域访问的,当然你会说可以用JSONP等,但是由于代码洁癖,不想在前端和后台添加callback,而且...

    解决AJAX中跨域访问出现'没有权限'的错误

    很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见

    「JavaScript」JS四种跨域方式详解

    window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有...

    地产项目(前后台分离项目,跨域)

    分权限,对应不同的功能,概率计算,宏积分计算

    WebIM_Ajax框架

    本 WebIM 系统采用 B/S 模式,使用浏览器 ajax 实现即时聊天。 服务器端采用 MC 设计模式,Controler 分为组包拆包模块(编码子模块、加密解密子模块、序列化/反序列化子模块)和主处理模块(包含:Manager、DAO);...

    Jquery通过ajax请求NodeJS返回json数据实例

    2.通过HTML的ajax请求,可以实现在不同的服务器上,可跨域获取数据。 3.通信数据格式灵活,可以是xml、json、binary等,数据适合任何平台。 在说说我的环境,我使用的是公司提供的电脑,有很多限制,比如是域中电脑...

    jquery-jsonp.js

    1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;  2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响...

    react-ant-admin后台管理系统

    react-ant-admin后台管理系统,用于快速创建后台项目模板 ...代理转发,解决前端请求跨域问题。 路由自动生成,去中心化。 系统提供了一些基础的页面 登录页 详情页 表单页 列表页 权限管理 结果页

    OA办公系统 Springboot vue.js前后分离,Flowable工作流自定义表单

    特别注意:本商品为 Springboot 工作流 前后分离+跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot 2.7.0+Flowable6.7.2+ mybaits+maven+接囗前端页面:html +vuejs 形式jquery ajax 异步跨域json 格式数据交互 ...

    ThinkPHP3.2仿京东商城视频教程实战课程,ThinkPHP3.2开发大型商城项目实战视频

    7.AJAX跨域-jsonp 第十一天 1.下定单-1 2.下定单-2 3.只能购买在购物车中勾选的商品 4.支付宝支付-1-制作去支付宝的按钮 5.支付宝集成-2-完成 6.网站上线并在QQ互联中创建一个APP 7.QQ登录集成完成 第十二天 1.后台...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot AJAX 跨域,包括 JSONP、Node.js与SpringBoot集成使用反向代理 等。 - springboot-websockets - Spring Boot 使用 Websocket - springboot-webflux - Spring Boot 集成 WebFlux 开发反应式 Web...

    kiosk-admin:基于bootstrap开发的响应式后台管理系统

    交互:AJAX跨域异步HTTP与服务端数据交互 平台:CSS代码兼容所有系统平台浏览器,安卓、苹果、Linux、PC任意分辨率,UI界面自适应PC电脑及手机触摸操作。 基本功能:系统首页、参数设置、权限管理、会员管理、交易...

Global site tag (gtag.js) - Google Analytics