文档章节

AJAX跨域权限问题

deepins
 deepins
发布于 2014/09/19 18:12
字数 493
阅读 49
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

本地调试时正常,发布到服务器后遇到该问题,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 "";   
    }   
  
}  

本文转载自:http://deepin.iteye.com/blog/512028

deepins
粉丝 8
博文 44
码字总数 0
作品 0
深圳
架构师
私信 提问
单页面应用,如何验证用户呢?

https://github.com/lifesinger/lifesinger.github.com/issues/184 这里介绍了什么是单页面应用。。 现在,我用ajax 跨域与服务器后台进行交互, ajax 的get 请求,可以用jsonp 来解决跨域,...

change_solider
2014/08/28
629
1
Ajax原理介绍及跨域解决方案

1.Ajax原理介绍 Ajax 全名叫"Asynchronous Javascript And XML" (异步的Javascript and XML),是一种创建交互式网页应用的网页开发技术 与传统的web应用比较,ajax 应用可以仅向服务器发送并...

陈小扁
2016/03/17
113
2
看小白如何解决ajax跨域问题

由于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决ajax的跨域问题。本篇将讲述一个小白从遇到跨...

六只
2012/06/29
15.4K
3
AJAX POST&跨域 解决方案 - CORS

 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不...

zyt_1978
2016/03/28
91
0
浅析Ajax跨域原理及JQuery中的实现分析

  AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新。但是出于安全的考虑,ajax不允许跨域通信。如果尝试从不同的域请求数据,就会出现错误。如果能控制数...

雲霏霏
2014/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何更改iOS应用程序的名称?

我前几天用一个愚蠢的开发代码名称开始了一个iPhone项目,现在我想改变项目的名称,因为它已经接近完成了。 但是我不知道如何使用Xcode来做这件事,尝试在info.plist文件中更改应用程序的名称...

技术盛宴
28分钟前
3
0
关于win10tensorflow的配置(CPU+GPU)

主要内容 CPU篇 GPU篇 【前期准备与注意事项】 环境:window1064位+python36(37)+CUDA9.0+cuDNN7.6+tensorflow_gpu-1.12.0 软件:anaconda+pycharm 硬件:有nvidia显卡的笔记本或台式(非A...

放只虎归个山
36分钟前
3
0
C#中的多行字符串文字

有没有一种简单的方法可以在C#中创建多行字符串文字? 这是我现在所拥有的: string query = "SELECT foo, bar"+ " FROM table"+ " WHERE id = 42"; 我知道PHP有 <<<BLOCKBLOCK; C#是......

javail
43分钟前
4
0
微信支付之小微商户扫盲!支持信用卡,免营业执照!

微信支付商户申请面向线下小微商户开放,符合条件的微信支付服务商可为小微商户发起接入申请。无需营业执照。 小微商户日收款额度为5万元~30万元 。 信用卡支付日限额为1千;月限额1万。 结算...

吴伟祥
今天
4
0
大话SDWebImage(三)-- 图片下载层

四、图片下载层 SDWebImageDownloader是处理图片下载的类 4.1 图片下载步骤 首先介绍下dispatch_barrier,GCD中的dispatch_barrier目的是在并发队列实现串行的效果,创建下载任务SDWebImageD...

aron1992
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部