V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hobbyliu
V2EX  ›  程序员

postman 的跨域请求原理?

  •  
  •   hobbyliu · 2015-09-10 15:35:00 +08:00 · 13385 次点击
    这是一个创建于 3353 天前的主题,其中的信息可能已经有所发展或是发生改变。

    postman js 跨域请求原理是啥?

    7 条回复    2015-09-11 00:08:44 +08:00
    fengliu222
        1
    fengliu222  
       2015-09-10 15:53:47 +08:00
    Chrome 插件内木有同源策略的限制,所以不跨域。
    yunfeifan
        2
    yunfeifan  
       2015-09-10 16:07:03 +08:00
    @fengliu222 有权限限制的,不过可以申请到跨域(跨指定域名或所有)
    hobbyliu
        3
    hobbyliu  
    OP
       2015-09-10 16:09:32 +08:00
    @yunfeifan 确实有限制,但是如何申请, header 里面 添加申请吗?
    yunfeifan
        4
    yunfeifan  
       2015-09-10 16:18:17 +08:00
    @hobbyliu manifest 文件中
    "permissions": [
    "http://www.google.com/"
    ],


    跨域允许设置可以使用完整域名, 例如:
    "http://www.google.com/"
    "http://www.gmail.com/"
    或者使用模式匹配, 例如:
    "http://*.google.com/"
    "http://*/"
    模式匹配"http://*/" 表示可以发起到所有域的 HTTP 请求. 注意在这里, 模式匹配有点像内容脚本匹配, 但是这里的任何域名后的路径信息都被忽略
    hobbyliu
        5
    hobbyliu  
    OP
       2015-09-10 16:47:14 +08:00
    @yunfeifan postman 插件里面的一个方法, 没法发现请求域的设置呢?

    ``
    //Send the current request
    send:function (responseRawDataType ) {
    pm.request.prepareForSending ();
    if (pm.request.url === "") {
    return;
    }

    var originalUrl = $('#url').val (); //Store this for saving the request
    var url = pm.request.encodeUrl (pm.request.url );
    var method = pm.request.method.toUpperCase ();
    var originalData = pm.request.body.getData (true );

    //Start setting up XHR
    var xhr = new XMLHttpRequest ();
    xhr.open (method, url, true ); //Open the XHR request. Will be sent later
    xhr.onreadystatechange = function (event ) {
    pm.request.response.load (event.target );
    };

    //Response raw data type is used for fetching binary responses while generating PDFs
    if (!responseRawDataType ) {
    responseRawDataType = "text";
    }

    xhr.responseType = responseRawDataType;
    var headers = pm.request.getXhrHeaders (headers );
    for (var i = 0; i < headers.length; i++) {
    xhr.setRequestHeader (headers[i].name, headers[i].value );
    }

    // Prepare body
    if (pm.request.isMethodWithBody (method )) {
    var body = pm.request.getRequestBodyToBeSent ();
    if (body === false ) {
    xhr.send ();
    }
    else {
    xhr.send (body );
    }
    } else {
    xhr.send ();
    }

    pm.request.response.iframeRefreshedRecently = false;

    pm.request.xhr = xhr;

    //Save the request
    if (pm.settings.get ("autoSaveRequest")) {
    pm.history.addRequest (originalUrl,
    method,
    pm.request.getPackedHeaders (),
    originalData,
    pm.request.dataMode );
    }

    //Show the final UI
    pm.request.updateUiPostSending ();
    },
    ``
    yunfeifan
        6
    yunfeifan  
       2015-09-10 17:26:25 +08:00
    @hobbyliu chrome 扩展 的 manifest.json 文件中
    fengliu222
        7
    fengliu222  
       2015-09-11 00:08:44 +08:00
    @yunfeifan 噗。。。你说的没错,我忘记了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1251 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:19 · PVG 07:19 · LAX 15:19 · JFK 18:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.