五种跨域网站请求解决办法

2 篇文章 0 订阅

1.什么是跨域?

就是浏览器安全机制,请求访问的域名与ajax请求的域名不一致,导致无法返回结果.

浏览器机制问题,并不是安全问题.这只是在ajax请求中出现的问题,浏览器默人请求资源必须在同一个域名下面.

2.跨域问题如何解决?

2.1 jsonp 但是只支持get请求不支持post请求

原理:使用script发送get请求,将一个参数传过去,然后回调的时候在带回来进行解析.


那么如何使用jsonp呢?

2.1.1 在ajax里面将datatype修改为jsonp 然后加入jsonp的一个参数,这个参数的值需要和后端获取的值一样


2.1.2 在后端获取到前段加入的值,然后在将此值返回给前段


2.1.3 前段获取到此值


一定要记住jsonp的缺点,只能发送get请求,不能发送post请求

我们做一下测试,将json的修改为post请求,然后在浏览器的控制台发现,仍然是脚本类型



2.2 使用httpclient进行转发
优点:安全

缺点:两次请求效率低下,代码重复

实现步骤,
1.ajax请求地址还是请求本项目的地址
2.在本项目中我们接受该请求

3.在后端我们使用httpclient进行转发

4.转发之后我们在将获取到请求通过response返回到前段页面


转发的核心代码

@WebServlet("/getServlet")
public class ServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 创建请求
         */
        CloseableHttpClient aDefault = HttpClients.createDefault();
        /**
         * 创建get请求
         */
        HttpGet httpGet = new HttpGet("http://127.0.0.1/app.ZMTManage/?m=zmtmanage&c=index&a=init");
        /**
         * 执行请求
         */
        CloseableHttpResponse execute = aDefault.execute(httpGet);
        /**
         * 获取状态
         */
        int statusCode = execute.getStatusLine().getStatusCode();
        if (200==statusCode){
            /**
             * 解析请求头
             */
            String entity = EntityUtils.toString(execute.getEntity());
            /**
             * 写入response
             */
            resp.getWriter().print(entity);
            /**
             * 关闭请求
             */
            execute.close();
            aDefault.close();

        }
    }
}

2.3 添加请求头header ,允许访问  

这个是最简单的,小项目一般会使用这个,大项目不会使用


2.4 使用接口网关 nginx搭建api网关 

什么叫做网关:拦截所有的请求,并进行分发


配置:

server {

        listen       80;

        server_name  lizhen.com;

        location /A {

                       proxy_pass  http://a.a.com:81/A;

                            index  index.html index.htm;

        }

                   location /B {

                       proxy_pass  http://b.b.com:81/B;

                            index  index.html index.htm;

        }

    }

我之前的一篇文章写过如何通过Nginx进行区分项目然后转发,大家可以看一下解决方案.  Nginx+tomcat 实现负载均衡 

2.5使用 spring cloud zull 搭建网关
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值