【问题标题】:XHR request with literal URL带有文字 URL 的 XHR 请求
【发布时间】:2016-10-04 18:39:04
【问题描述】:

我正在尝试请求一个有点错误的 API,它需要对一些字符进行 URL 编码(在我的情况下,点 . 导致了问题)

GET /projects/:projectid/merge_requests

如果 project_idgroupname/project.name,则 API 需要 urlencoded(包括点),否则它会以 404 响应

正确的网址是/projects/groupname%2Fproject%2Ename/merge_requests

我目前正在手动进行替换,但似乎浏览器认为我不知道我在做什么,实际上将 %2E 替换为 .要求。所以我无法查询我的 API

当前代码如下:

var projectid = 'foo/bar.baz';

projectid = encodeURIComponent(projectid).replace(/[.]/g, '%2E');

var url = 'http://gitlab.local/api/v3/projects/' + projectid + '/merge_requests'

var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = 'json';
xhr.addEventListener('load', mycallback);
xhr.send();

// -> GET http://gitlab.local/api/v3/projects/foo%2Fbar.baz/merge_requests 404 ()

有什么方法可以强制 URL 按字面意思发送而不被浏览器转换?

(我在 Chrome 和 Firefox 中的行为相同)

【问题讨论】:

    标签: javascript xmlhttprequest


    【解决方案1】:

    %252E 代替%2E%2E. 的转义码,因此它会将其解释为句点。您需要的是逃避%,这就是%25 所做的。未转义时,%252E 变为 %2E

    【讨论】:

    • 不幸的是,%252E 被原样发送到服务器:/
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多