Javascript/Ajax 中的 HTTP HEAD 请求?

IT技术 javascript ajax http-headers xmlhttprequest
2021-02-05 04:03:11

是否可以仅使用 JavaScript 中的 XMLHTTPRequest 来执行 HTTP Head 请求?

我的动机是节省带宽。

如果没有,是否有可能伪造它?

2个回答

很简单,只需使用 HEAD 方法,而不是 GET 或 POST:

function UrlExists(url, callback)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url);
    http.onreadystatechange = function() {
        if (this.readyState == this.DONE) {
            callback(this.status != 404);
        }
    };
    http.send();
}

这只是展示如何使用 HEAD 方法的一个简短示例。生产代码可能需要针对不同的结果状态(成功,失败,超时)更细粒度的回调,并可能使用不同的事件处理程序onloadonerrorontimeout不是onreadystatechange)。

有可能 bc 这只是一个 HEAD 请求,可以跨域吗?
2021-03-12 04:03:11
知道这是如何跨浏览器吗?jQuery 文档指出“注意:其他 HTTP 请求方法,例如 PUT 和 DELETE,也可以在此处使用,但并非所有浏览器都支持它们。” api.jquery.com/jQuery.ajax
2021-03-19 04:03:11
谢谢,有时框架的抽象隐藏了底层功能!
2021-03-23 04:03:11
@doekman:同步请求会阻塞所有依赖于 JS 的任务(Douglas Crockford 曾经写道“同步编程是不尊重的,不应在人们使用的应用程序中使用。”)。想想所有不假思索地在不知不觉中复制这个例子的人。出于这个原因,多年来,答案一直很糟糕。更新既显示了如何使用异步请求,又明确说明不应逐字复制示例。
2021-04-05 04:03:11
我很高兴这个答案是 jQuery 免费的。即使是最简单的关于 SO 的 JS 问题也几乎总是用 jQ 解决方案来回答。
2021-04-10 04:03:11

一个 XMLHTTPRequest 对象应该有

getAllResponseHeaders();
getResponseHeader("header-name")

在它上面定义

否决:答案似乎将HTTP HEAD 方法HTTP headers混淆
2021-03-19 04:03:11