javascript - JS/jQuery 获取 HTTPRequest 请求头?

标签 javascript ajax header request request-headers

在 xhr 对象中使用 getAllResponseHeaders,可以在 ajax 调用后获取所有响应 header 。 但我找不到获取请求 header 字符串的方法,这可能吗?

最佳答案

如果这是出于调试目的,那么您只需使用 Firebug 或 Chrome 开发人员工具(以及 IE 中调用的任何功能)来检查从浏览器到服务器的网络流量。

另一种方法是使用类似以下脚本的内容:

$.ajax({
    url: 'someurl',
    headers:{'foo':'bar'},
    complete: function() {
        alert(this.headers.foo);
    }
});

但是我认为只有 headers 中已经定义的 header 可用(不确定如果 header 被更改(例如在 beforeSend 中)会发生什么。

您可以阅读有关 jQuery ajax 的更多信息:http://api.jquery.com/jQuery.ajax/

编辑:如果您只想捕获 XMLHttpRequest 上对 setRequestHeader 的所有调用的 header ,那么您可以包装该方法。这有点像黑客,当然您需要确保在任何请求发生之前运行下面包装代码的函数。

// Reasign the existing setRequestHeader function to 
// something else on the XMLHtttpRequest class
XMLHttpRequest.prototype.wrappedSetRequestHeader = 
  XMLHttpRequest.prototype.setRequestHeader; 

// Override the existing setRequestHeader function so that it stores the headers
XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
    // Call the wrappedSetRequestHeader function first 
    // so we get exceptions if we are in an erronous state etc.
    this.wrappedSetRequestHeader(header, value);

    // Create a headers map if it does not exist
    if(!this.headers) {
        this.headers = {};
    }

    // Create a list for the header that if it does not exist
    if(!this.headers[header]) {
        this.headers[header] = [];
    }

    // Add the value to the header
    this.headers[header].push(value);
}

现在,一旦在 XMLHttpRequest 实例上设置了 header ,我们就可以通过检查 xhr.headers 来获取它们,例如

var xhr = new XMLHttpRequest();
xhr.open('get', 'demo.cgi');
xhr.setRequestHeader('foo','bar');
alert(xhr.headers['foo'][0]); // gives an alert with 'bar'

关于javascript - JS/jQuery 获取 HTTPRequest 请求头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10515862/

相关文章:

javascript - 如何获取表单提交的值 popup.html chrome 扩展

javascript - jQuery:避免由于 fadeOut() 而导致的代码重复

ajax - 向本地主机nodejs服务器发送简单的ajax请求

php - 面试问题: Can we have an echo before header?

c++ - 使用在同一命名空间中定义的构造函数实例化命名空间中的对象。 C++

javascript - 有 sqlite admin chrome 扩展吗?

javascript - Canvas 中鼠标悬停错误

JavaScript 正在让 Python 的 Selenium 陷入困境

javascript - 自动完成:以不同的颜色显示未完成的字符

css - 导航栏未跨越页面宽度