Curl is a tool and libcurl is a library for transferring data with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TFTP, SCP, SFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP. libcurl offers a myriad of powerful features
Перейти к файлу
Laramie Leavitt ef86daf4d3
http2: close the http2 connection when no more requests may be sent
Well-behaving HTTP2 servers send two GOAWAY messages. The first
message is a warning that indicates that the server is going to
stop accepting streams. The second one actually closes the stream.

nghttp2 reports this state (and the other state of no more stream
identifiers) via the call nghttp2_session_check_request_allowed().
In this state the client should not create more streams on the
session (tcp connection), and in curl this means that the server
has requested that the connection is closed.

It would be also be possible to put the connclose() call into the
on_http2_frame_recv() function that triggers on the GOAWAY message.

This fixes a bug seen when the client sees the following sequence of
frames:

// advisory GOAWAY
HTTP2 GOAWAY [stream-id = 0, promised-stream-id = -1]
... some additional frames

// final GOAWAY
HTTP2 GOAWAY [stream-id = 0, promised-stream-id = N ]

Before this change, curl will attempt to reuse the connection even
after the last stream, will encounter this error:

* Found bundle for host localhost: 0x5595f0a694e0 [can multiplex]
* Re-using existing connection! (#0) with host localhost
* Connected to localhost (::1) port 10443 (#0)
* Using Stream ID: 9 (easy handle 0x5595f0a72e30)
> GET /index.html?5 HTTP/2
> Host: localhost:10443
> user-agent: curl/7.68.0
> accept: */*
>
* stopped the pause stream!
* Connection #0 to host localhost left intact
curl: (16) Error in the HTTP2 framing layer

This error may posion the connection cache, causing future requests
which resolve to the same curl connection to go through the same error
path.

Closes #5643
2020-07-03 11:16:48 +02:00
.github codeql-analysis.yml: fix the 'languages' setting 2020-06-26 08:49:47 +02:00
CMake CMake: add HTTP/3 support (ngtcp2+nghttp3, quiche) 2020-05-10 23:36:41 +02:00
docs curl_version_info.3: CURL_VERSION_KERBEROS4 is deprecated 2020-07-03 00:15:51 +02:00
include RELEASE-NOTES: synced 2020-07-01 10:37:20 +02:00
lib http2: close the http2 connection when no more requests may be sent 2020-07-03 11:16:48 +02:00
m4 configure: remove use of -vec-report0 from CFLAGS with icc 2020-04-06 23:19:06 +02:00
packages all: fix codespell errors 2020-05-25 19:44:04 +00:00
plan9 copyright: fix out-of-date copyright ranges and missing headers 2020-03-24 15:05:59 +01:00
projects projects: Add crypt32.lib to dependencies for all OpenSSL configs 2020-06-04 03:37:55 -04:00
scripts scripts/copyright.pl: skip .dcignore 2020-06-30 15:30:20 +02:00
src tool_getparam: make --krb option work again 2020-07-03 00:04:47 +02:00
tests ftpserver: don't verify SMTP MAIL FROM names 2020-07-03 10:10:30 +02:00
winbuild curl_multibyte: add to curlx 2020-05-14 18:13:27 +02:00
.azure-pipelines.yml azure: use matrix strategy to avoid configuration redundancy 2020-05-31 12:36:52 +02:00
.cirrus.yml cirrus-ci: disable FreeBSD 13 (again) 2020-06-29 17:46:48 +02:00
.dcignore .dcignore: ignore tests and docs directories 2020-06-27 00:07:37 +02:00
.dir-locals.el copyright: fix out-of-date copyright ranges and missing headers 2020-03-24 15:05:59 +01:00
.gitattributes .gitattributes: make tabs in indentation a visible error 2018-12-06 20:21:17 +01:00
.gitignore .gitignore: add directory containing the stats repo 2020-06-05 19:54:34 +02:00
.lgtm.yml copyright: fix out-of-date copyright ranges and missing headers 2020-03-24 15:05:59 +01:00
.mailmap mailmap: Nicolas Sterchele 2020-06-12 13:41:52 +02:00
.travis.yml wording: avoid blacklist/whitelist stereotypes 2020-06-10 08:49:17 +02:00
CHANGES CHANGES: spell fix, use correct path to script 2017-02-07 08:22:37 +01:00
CMakeLists.txt CMake: ignore INTERFACE_LIBRARY targets for pkg-config file 2020-06-21 19:37:28 +02:00
COPYING COPYING: it's 2020! 2020-01-03 15:12:46 +01:00
GIT-INFO CHANGES.0: removed 2017-02-07 08:20:10 +01:00
MacOSX-Framework copyright: fix out-of-date copyright ranges and missing headers 2020-03-24 15:05:59 +01:00
Makefile.am CMake: add HTTP/3 support (ngtcp2+nghttp3, quiche) 2020-05-10 23:36:41 +02:00
Makefile.dist build: remove the Borland specific makefiles 2018-06-02 11:23:40 +02:00
README README: mention that the docs is in docs/ 2020-01-27 13:06:45 +01:00
README.md README.md: add Azure DevOps Pipelines build status badge 2020-03-03 17:11:26 +01:00
RELEASE-NOTES RELEASE-NOTES: synced 2020-07-01 10:37:20 +02:00
SECURITY.md SECURITY.md: minor rephrase 2020-03-30 08:53:25 +02:00
acinclude.m4 build: fixed build for systems with select() in unistd.h 2020-03-31 10:59:06 +02:00
appveyor.yml wording: avoid blacklist/whitelist stereotypes 2020-06-10 08:49:17 +02:00
buildconf buildconf: remove -print from the find command that removes files 2020-06-10 23:40:00 +02:00
buildconf.bat copyrights: update all copyright notices to 2019 on files changed this year 2019-11-02 23:15:56 +01:00
configure.ac configure: for wolfSSL, check for the DES func needed for NTLM 2020-06-16 09:06:53 +02:00
curl-config.in copyright: updated year ranges out of sync 2020-05-24 00:02:33 +02:00
libcurl.pc.in libcurl.pc: Merge Libs.private into Libs for static-only builds 2020-05-12 08:53:12 +02:00
maketgz maketgz: delete .bak files, fix indentation 2018-06-15 23:28:34 +00:00

README.md

curl logo

CII Best Practices Coverity passed Travis-CI Build Status AppVeyor Build Status Azure DevOps Build Status Cirrus Build Status Backers on Open Collective Sponsors on Open Collective Language Grade: C/C++ Codacy Badge Fuzzing Status

Curl is a command-line tool for transferring data specified with URL syntax. Find out how to use curl by reading the curl.1 man page or the MANUAL document. Find out how to install Curl by reading the INSTALL document.

libcurl is the library curl is using to do its job. It is readily available to be used by your software. Read the libcurl.3 man page to learn how!

You can find answers to the most frequent questions we get in the FAQ document.

Study the COPYING file for distribution terms and similar. If you distribute curl binaries or other binaries that involve libcurl, you might enjoy the LICENSE-MIXING document.

Contact

If you have problems, questions, ideas or suggestions, please contact us by posting to a suitable mailing list.

All contributors to the project are listed in the THANKS document.

Website

Visit the curl web site for the latest news and downloads.

Git

To download the very latest source from the Git server do this:

git clone https://github.com/curl/curl.git

(you'll get a directory named curl created, filled with the source code)

Security problems

Report suspected security problems via our HackerOne page and not in public!

Notice

Curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan. This notice is included here to comply with the distribution terms.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]