4

我必须设置哪些参数$.ajax来尝试将 AJAX 请求屏蔽为正常请求?我想这与正确的标题有关。

我认为问题的很大一部分是在处理本地 .html 文件时,jQuery 将 header-value 设置为Originto null

有什么办法可以取出 Origin-header 吗?

此刻,如果我通过网络浏览器浏览相同的 URL 并执行 jQuery AJAX 请求,我会得到不同的结果。

4

3 回答 3

7

由于所有现代浏览器都强制执行同源策略,这是不可能的

于 2011-08-31T09:08:25.373 回答
6

与普通请求相比,使用 jQuery 发送的 AJAX 请求唯一不同的是添加的X-Requested-With: XMLHttpRequestHTTP 标头。可以像这样删除此标头:

$.ajax({
    url: '/foo',
    type: 'POST',
    data: { bar: 'baz' },
    beforeSend: function(xhr) {
        xhr.setRequestHeader(
            'X-Requested-With',
            {
                toString: function() { return ''; }
            }
        );
    },
    success: function(result) {
       alert(result);   
    }
});

或全局,对于您网站上的所有 AJAX 请求:

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader(
            'X-Requested-With',
            {
                toString: function() { return ''; }
            }
        );
    }
});
于 2011-06-21T21:44:25.553 回答
1
  1. jQuery 没有设置 Origin Header。只有浏览器本身可以做到。并且 jQuery(或 javascript)对此标头没有权力。

  2. 这是一个关于 Origin Header case 设置为 null Null Origin Header的链接

  3. jquery 和常规请求之间的唯一区别确实是 X-Requested-With: XMLHttpRequest,您可以手动删除它,也可以使用新的 XMLHttpRequest 或 fetch() 发出请求。

祝你好运

于 2017-09-07T09:51:10.490 回答