libcurl API 호환성

API 호환성

libcurl은 API 안정성을 약속하고 오늘 작성된 프로그램이 앞으로도 계속 작동할 것임을 보장합니다. 우리는 호환성을 깨뜨리지 않습니다.

시간이 지남에 따라 기능, 새 옵션 및 새 기능을 API에 추가하지만 호환되지 않는 방식으로 동작을 변경하거나 기능을 제거하지 않습니다.

API를 호환되지 않는 방식으로 마지막으로 변경한 것은 2006년 7.16.0용이었고 다시는 변경하지 않을 계획입니다.

버전 번호

Curl과 libcurl은 개별적으로 버전이 지정되지만 대부분 서로 밀접하게 따릅니다.
버전 번호는 항상 동일한 시스템을 사용하여 구성됩니다.

1
X.Y.Z
  • X는 기본 버전 번호입니다.
  • Y는 릴리스 번호입니다.
  • Z는 패치 번호입니다.

범람하는 숫자

이 X.Y.Z 숫자 중 하나는 모든 새 릴리스에서 충돌합니다. 범프된 숫자의 오른쪽에 있는 숫자는 0으로 재설정됩니다.

기본 버전 번호 X는 실제로 크고 충돌하는 변경 사항이 있을 때 충돌합니다. 릴리스 번호 Y는 변경이 수행되거나 사물/기능이 추가될 때 범프됩니다. 변경 사항이 단순한 버그 수정일 때 패치 번호 Z가 충돌합니다.

이는 릴리스 1.2.3 이후에 정말 큰 변화가 있으면 2.0.0을 릴리스할 수 있고, 그렇지 않은 경우 1.3.0을 릴리스하거나 대부분의 버그가 수정된 경우 1.2.4를 릴리스할 수 있음을 의미합니다.

숫자를 1로 늘릴 때와 같이 범핑은 무조건 숫자 중 하나에만 영향을 미칩니다(오른쪽에 있는 숫자는 0으로 설정됨). 1은 2가 되고 3은 4가 되고 9는 10이 되고 88은 89가 되고 99는 100이 됩니다. 따라서 1.2.9 이후에는 1.2.10이 됩니다. 3.99.3 이후에는 3.100.0이 나올 수 있습니다.

모든 원본 컬 소스 릴리스 아카이브는 libcurl 버전에 따라 이름이 지정됩니다(앞서 말했듯이 다를 수 있는 컬 클라이언트 버전이 아님).

어떤 libcurl 버전

새로운 libcurl 기능을 지원하는 동시에 이전 버전으로 빌드할 수 있는 모든 애플리케이션에 대한 서비스로 모든 릴리스에는 비교에 사용할 수 있는 정적 번호 매기기 체계를 사용하여 curl/curlver.h 파일에 libcurl 버전이 저장되어 있습니다. . 버전 번호는 다음과 같이 정의됩니다.

1
#define LIBCURL_VERSION_NUM 0xXXYYZZ

여기서 XX, YY 및 ZZ는 16진수의 기본 버전, 릴리스 및 패치 번호입니다. 세 개의 숫자 필드 모두는 항상 두 자리(각각 8비트)를 사용하여 표현됩니다. 1.2.0은 “0x010200”으로 표시되고 버전 9.11.7은 “0x090b07”로 표시됩니다.

이 6자리 16진수 숫자는 최신 릴리스에서 항상 더 큰 숫자입니다. 일보다 크거나 작음과 비교합니다.

이 번호는 LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINORLIBCURL_VERSION_PATCH의 세 가지 개별 정의로도 사용할 수 있습니다.
물론 이러한 정의는 지금 빌드된 버전 번호를 파악하는 데에만 적합하며 지금부터 3년 후 런타임에 사용되는 libcurl 버전을 파악하는 데 도움이 되지 않습니다.

실행되는 libcurl 버전

애플리케이션이 현재 사용하고 있는 libcurl 버전을 파악하기 위해 curl_version_info()가 있습니다.

동적/DLL 라이브러리는 응용 프로그램과 독립적으로 변경할 수 있으므로 응용 프로그램은 컴파일 시간 검사를 사용하는 대신 이 기능을 사용하여 작업이 가능한지 여부를 판단해야 합니다.

curl_version_info()는 버전 번호 및 다양한 기능과 실행 중인 libcurl 버전에 대한 정보가 포함된 구조체에 대한 포인터를 반환합니다. 당신은 libcurl이 그것을 호출하는 libcurl의 “나이”를 알 수 있도록 특별한 나이 카운터를 주어 그것을 호출합니다. 나이는 CURLVERSION_NOW라고 하는 정의이며 컬 발달 전반에 걸쳐 불규칙한 간격으로 증가하는 카운터입니다. 연령 번호는 libcurl이 반환할 수 있는 구조체 집합을 알려줍니다.

다음과 같이 함수를 호출합니다.

1
curl_version_info_data *ver = curl_version_info( CURLVERSION_NOW );

그러면 데이터는 다음 레이아웃을 갖거나 가질 수 있는 구조체를 가리킬 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
struct {
CURLversion age; /* see description below */

/* when 'age' is 0 or higher, the members below also exist: */
const char *version; /* human readable string */
unsigned int version_num; /* numeric representation */
const char *host; /* human readable string */
int features; /* bitmask, see below */
char *ssl_version; /* human readable string */
long ssl_version_num; /* not used, always zero */
const char *libz_version; /* human readable string */
const char * const *protocols; /* protocols */

/* when 'age' is 1 or higher, the members below also exist: */
const char *ares; /* human readable string */
int ares_num; /* number */

/* when 'age' is 2 or higher, the member below also exists: */
const char *libidn; /* human readable string */

/* when 'age' is 3 or higher (7.16.1 or later), the members below also
exist */
int iconv_ver_num; /* '_libiconv_version' if iconv support enabled */

const char *libssh_version; /* human readable string */

/* when 'age' is 4 or higher, the member below also exists: */
unsigned int brotli_ver_num; /* Numeric Brotli version
(MAJOR << 24) | (MINOR << 12) | PATCH */
const char *brotli_version; /* human readable string. */

/* when 'age' is 5 or higher, the member below also exists: */
unsigned int nghttp2_ver_num; /* Numeric nghttp2 version
(MAJOR << 16) | (MINOR << 8) | PATCH */
const char *nghttp2_version; /* human readable string. */
const char *quic_version; /* human readable quic (+ HTTP/3) library +
version or NULL */

/* when 'age' is 6 or higher, the member below also exists: */
const char *cainfo; /* the built-in default CURLOPT_CAINFO, might
be NULL */
const char *capath; /* the built-in default CURLOPT_CAPATH, might
be NULL */

/* when 'age' is 7 or higher, the member below also exists: */
unsigned int zstd_ver_num; /* Numeric Zstd version
(MAJOR << 24) | (MINOR << 12) | PATCH */
const char *zstd_version; /* human readable string. */

/* when 'age' is 8 or higher, the member below also exists: */
const char *hyper_version; /* human readable string. */

} curl_version_info_data;
공유하기