发送 HEAD 请求时 cURL 挂起 15 秒

2023-11-21

背景

我一直在使用 CLI 通过 CLI 对一些 HTTP 请求进行计时time和工具,例如wget and curl如下:

/usr/bin/time -v wget --spider http://localhost/index
/usr/bin/time -v curl http://localhost/index 2>&1 > /dev/null

我注意到的是,当使用curl,我得到的响应时间与wget仅在第一个请求上,并且在后续请求上的时间要低得多,就好像对curl是从缓存提供的并且wget不是。

经过调查我发现指定时--spider, wget问题一个HEAD下面附加的请求可以解释为什么缓存被绕过wget:

Request

HEAD /index HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: localhost
Connection: Keep-Alive

Response

HTTP/1.1 200 OK
Date: Mon, 28 Nov 2011 14:45:59 GMT
Server: Apache/2.2.14 (Ubuntu)
Content-Location: index.php
Vary: negotiate,Accept-Encoding
TCN: choice
X-Powered-By: PHP/5.3.2-1ubuntu4.10
Set-Cookie: SESS421aa90e079fa326b6494f812ad13e79=16oqmug3loekjlb1tlvmsrtcr2; expires=Wed, 21-Dec-2011 18:19:19 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Mon, 28 Nov 2011 14:45:59 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

因为我正在做更高级的事情(在单独的文件中写入正文和标头、发布数据、将 cookie 保存在 jar 中...)我需要使用curl代替wget。因此我试图模仿HEAD请求与curl.

Issue

我设法发送了HEAD请求与curl如下:

curl "http://localhost/index" --request "HEAD" -H "Connection: Keep-Alive" -0

Request

HEAD /index HTTP/1.0
User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
Host: localhost
Accept: */*
Connection: Keep-Alive

Response

HTTP/1.1 200 OK
Date: Mon, 28 Nov 2011 15:44:02 GMT
Server: Apache/2.2.14 (Ubuntu)
Content-Location: index.php
Vary: negotiate,Accept-Encoding
TCN: choice
X-Powered-By: PHP/5.3.2-1ubuntu4.10
Set-Cookie: SESS421aa90e079fa326b6494f812ad13e79=4001hcmhdbnkb9e2v8nok9lii1; expires=Wed, 21-Dec-2011 19:17:22 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Mon, 28 Nov 2011 15:44:02 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

尽管请求/响应看起来不错,但当我执行上述命令时curl嗅探时发出命令tcpdump我可以看到服务器立即响应,但是my curl命令始终保持挂起状态 15 秒这显然是一个大问题,因为我正在尝试计时curl命令(仅供参考,之前我曾经得到过curl: (18) transfer closed with 3 bytes remaining to read当服务器没有处理时HEAD正常并正在返回Content-Length: 3不返回任何内容,但并非一切看起来都正常)。

我尝试玩--max-time and --speed-time论点有curl收到后立即超时200 OK但这没有什么区别。

问:我怎样才能发送HEAD使用curl 请求的方式是curl 命令在收到服务器的响应后立即停止?


你为什么不直接使用-I option?

-I/--head
    (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature
    the command HEAD which this uses to get nothing but  the  header
    of  a  document.  When used on a FTP or FILE file, curl displays
    the file size and last modification time only
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送 HEAD 请求时 cURL 挂起 15 秒 的相关文章

随机推荐

  • 使用 JSF h:outputLink 生成页面锚点

    简单的问题 如何创建 HTML 锚点 例如 a a with JSF e g
  • 非阻塞控制台输入?

    我正在尝试用 Python 制作一个简单的 IRC 客户端 作为我学习该语言时的一种项目 我有一个循环来接收和解析 IRC 服务器发送给我的内容 但是如果我使用raw input输入内容时 它会停止循环 直到我输入内容 显然 如何在不停止循
  • 工作表每行上不需要的符号

    我不知道我不小心点击的热键是什么 但是这个 每行代码上都出现了 look 标志 代码中没有空格 而是灰点 我怎样才能摆脱这些角色 假设这是 SQL Developer 请转到 工具 gt 首选项 或者在 Mac 上 在 SQL Develo
  • 如何在 Dart 中运行重复出现的函数?

    我想一遍又一遍地运行一个函数 中间有一个延迟 我怎样才能用 Dart 做到这一点 您可以使用Timer类来安排一次性和重复功能 重复 以下是运行重复函数的方法 import dart async main const oneSec Dura
  • Sveltekit + Typescript:环境变量构建错误

    我想在我的 Sveltekit 应用程序中使用环境变量 它在开发服务器上运行良好 但我收到此构建错误 Error PUBLIC KEY is not exported by env static public imported by src
  • 初始化谷歌地图时,mapFragment.getMapAsync(this)处出现空指针异常

    当我使用 Google Play Services v6 5 87 时 调用时出现空指针异常getMapAsync 我正在使用一个SupportMapFragment in my Fragment的 xml 布局 My code Suppo
  • Clojure 理解示例

    我在用docjure它的选择列功能需要一个列映射 我想获取所有列 而无需手动指定 如何生成以下惰性无限向量序列 A B C D E AA AB AC ZZ XFD 你的问题归结为 如何将数字转换为包含字母 A Z 的 26 进制字符串 这是
  • 使用OpenGL替代Canvas - Android

    我正在尝试用更快的 opengl es 表面替换我已经拥有的基于 Canvas 的渲染系统 但是 我似乎无法让 openGL 渲染器以充当 2d 场的方式符合 而不是透视图 我当前的渲染器代码如下所示 Override public voi
  • 是否可以复制某个控件的所有属性? (C# 窗口窗体)

    例如 我有一个DataGridView用蓝色控制BackgroundColor属性等 有没有一种方法可以以编程方式将这些属性转移或传递给另一个属性DataGridView控制 像这样的东西 dtGrid2 Property dtGrid1
  • \G 在 .split 中如何工作?

    我喜欢用 Java 进行代码高尔夫 尽管 Java 过于冗长而缺乏竞争力 即用尽可能少的字节完成某个挑战 在我的一个答案中 我有以下代码 for var p A4 B8 CU EM EW E3 G6 G9 I1 L7 NZ O0 R2 S5
  • 更新游标的记录,其中表名是参数

    我正在调整一些 PL pgSQL 代码 以便我的refcursor可以将表名作为参数 因此我更改了以下行 declare pointCurs CURSOR FOR SELECT from tableName for update 与这个 O
  • Hibernate多对多关联:左侧集合包含元素,但右侧集合为空

    我在持久层中遇到了多对多关联的问题 我的场景如下 一个用户可以拥有多个角色 一个角色可以附加多个用户 在测试过程中我遇到了一个奇怪的行为 我创建了角色对象和几个用户对象 该角色已设置给每个用户 此后 使用 DAO 保存用户 然后 在保存用户
  • 使用 SMTP 身份验证时通过 PEAR 发送 HTML 消息会返回错误

    我正在尝试在 PHP 中使用 SMTP 身份验证向 Gmail 发送 HTML 消息 这是我正在使用的脚本 require once Mail php require once Mail mime php from Some Name lt
  • 数据库未从资产文件夹复制到设备

    我的目录中有一个 db 文件assets文件夹 我已将其复制到data data
  • MPAndroidChart PieChart如何设置标签文本?

    得到以下代码 Legend legend mChart getLegend legend setLabels new String aaaaa bbbbb ccccc 此设置不生效 还有其他方法设置文本吗 我在 v3 0 0 中找不到方法
  • 委托/函数转换和误导性编译器错误消息

    我认为 F 函数和 System Func 之间的转换必须手动完成 但似乎存在编译器 有时 为您完成的情况 当出现错误时 错误消息不准确 module Foo let dict new System Collections Generic
  • 如何计算 MkMapview 中两点之间的距离?

    在 iPhone 应用程序中 如何计算两点之间的距离MKMapView如下图所示 第一个点将是地图视图中可见地图的中心点 第二个点将是地图视图的可见矩形的任何角 例如 这里我采用了左上角的点 我想以米为单位计算这个距离 我怎样才能做到这一点
  • 有权访问会话状态的 Global.asax 事件

    我正在尝试访问 global asax 中每个请求 页面 文档 PDF 等 的会话状态 我知道我不能在 Application BeginRequest 中执行此操作 并且我认为我可以在 Application AcquireRequest
  • SimpleForm 默认输入类

    我正在使用 SimpleForm Bootstrap 如何为所有属性添加属性type text 输入类 span12 输出类似这样的东西 div class controls div
  • 发送 HEAD 请求时 cURL 挂起 15 秒

    背景 我一直在使用 CLI 通过 CLI 对一些 HTTP 请求进行计时time和工具 例如wget and curl如下 usr bin time v wget spider http localhost index usr bin ti