zoukankan      html  css  js  c++  java
  • 对跨域的理解

    最近在写项目的时候遇到了跨域的问题,然后整理两个跨域的方法,以下是自己的见解。

    什么是跨域呢?当两个地址在协议、主机或者端口不一致的时候,即判定为跨域。

    当前端请求服务器的时候出现跨域,那么前端就会报错,一般错误为:

    XMLHttpRequest cannot load http://xxx.xxx.xxx/xxxxx/xxxxx.
    Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    Origin 'http://127.0.0.1:8020' is therefore not allowed access.

     那么可以有两种解决方法(以jquery的ajax为例):

    第一种方法使用jsonp:

     $.ajax("http://xxx.xxx.xxx/xxx/xxx", { 
        type: 'get',
        dataType: "jsonp",
        data : reqData
        success: function(data) {
            console.log(data);
            },
        error: function(xhr, type, errorThrown) {
            //异常处理;
            console.log(xhr.statusText);
            plus.nativeUI.toast("fail");  
        }
       
    });

    使用jsonp一定要注意代码里面红色的文字。首先jsonp只支持get请求,所以所有传入的参数都是  http://xxx.xxx.xxx/xxx/xxx?xxx=1&&yyy=2 这种形式;其次在dataType属性必须设置为jsonp,jquery是支持jsonp的。

    这个方法适用于比较简单的请求,而且对数据安全要求不高、参数较小的请求。

    那么,我假如要用post怎么办?数据比较大怎么办?登录的时候总不能要求使用get方法吧?

    第二种方法使用CORS:

    CORS支持post跨域,可以很好解决jsonp的缺陷。

    CORS其实很简单,就是需要在服务器加入 (Access-Control-Allow-Origin:*),这里的*表达任何请求URL都可以跨域,为了安全考虑,*可以更改为你的请求地址。

    那么ajax该怎么写?ajax就是很正常的写了。

     $.ajax("http://xxx.xxx.xxx/xxx/xxx", { 
        type: 'post',
        dataType: "json",
        data : reqData
        success: function(data) {
            console.log(data);
        },
        error: function(xhr, type, errorThrown) {
            //异常处理;
            console.log(xhr.statusText);
            plus.nativeUI.toast("fail");  
        }
       
    });

    以上是我对跨域两种方法的理解,经过测试都通过了。但是我觉得自己还有必要深入去理解它。

  • 相关阅读:
    Django模型层Meta内部类详解
    jquery checkbox的相关操作——全选、反选、获得所有选中的checkbox
    c# 委托与异步调用
    DataTable转成List集合
    c# winform 自动升级
    C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常
    C#创建无窗体的应用程序
    sql 一个表的字段更新至另一个字段的方法
    datagridview 获取选中行的索引
    CHECKEDLISTBOX用法总结
  • 原文地址:https://www.cnblogs.com/claireyu1219/p/6297497.html
Copyright © 2011-2022 走看看