[#boost-urls-resolve]
= xref:boost.adoc[boost]::xref:boost/urls.adoc[urls]::resolve
:relfileprefix: ../../
:mrdocs:


Resolve a URL reference against a base URL

== Synopsis


Declared in `&lt;https://www.github.com/boostorg/url/blob/develop/include/boost/url/url_base.hpp#L2788[boost&sol;url&sol;url&lowbar;base&period;hpp]&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
system::result&lt;void&gt;
resolve(
    xref:boost/urls/url_view_base.adoc[url&lowbar;view&lowbar;base] const& base,
    xref:boost/urls/url_view_base.adoc[url&lowbar;view&lowbar;base] const& ref,
    xref:boost/urls/url_base.adoc[url&lowbar;base]& dest);
----

== Description


This function attempts to resolve a URL    reference `ref` against the base URL `base`    in a manner similar to that of a web browser    resolving an anchor tag&period;

The base URL must satisfy the _URI_    grammar&period; In other words, it must contain    a scheme&period;

Relative references are only usable when    in the context of a base absolute URI&period;    This process of resolving a relative    _reference_ within the context of    a _base_ URI is defined in detail    in rfc3986 (see below)&period;

The resolution process works as if the    relative reference is appended to the base    URI and the result is normalized&period;

Given the input base URL, this function    resolves the relative reference    as if performing the following steps&colon;

* Ensure the base URI has at least a scheme    
* Normalizing the reference path    
* Merge base and reference paths    
* Normalize the merged path

This function places the result of the    resolution into `dest`, which can be    any of the url containers that inherit    from xref:boost/urls/url_base.adoc[url&lowbar;base]&period;

If an error occurs, the contents of    `dest` is unspecified and `ec` is set&period;

[NOTE]
Abnormal hrefs where the number of &quot;&period;&period;&quot;    segments exceeds the number of segments in    the base path are handled by including the    unmatched &quot;&period;&period;&quot; segments in the result, as described    in link:https://www.rfc-editor.org/errata/eid4547[Errata 4547]&period;


=== Example

[,cpp]
----
url dest;
system::error_code ec;

resolve("/one/two/three", "four", dest, ec);
assert( dest.str() == "/one/two/four" );

resolve("http://example.com/", "/one", dest, ec);
assert( dest.str() == "http://example.com/one" );

resolve("http://example.com/one", "/two", dest, ec);
assert( dest.str() == "http://example.com/two" );

resolve("http://a/b/c/d;p?q", "g#s", dest, ec);
assert( dest.str() == "http://a/b/c/g#s" );
----

=== BNF

[,cpp]
----
absolute-URI  = scheme ":" hier-part [ "?" query ]
----

=== Exception Safety

Basic guarantee&period;    Calls to allocate may throw&period;


=== Specification

link:https://datatracker.ietf.org/doc/html/rfc3986#section-5[5&period; Reference Resolution (rfc3986)]



== Return Value


An empty result upon success,    otherwise an error code if `!base&period;has&lowbar;scheme()`&period;



== Parameters


|===
| Name | Description

| *base*
| The base URL to resolve against&period;


| *ref*
| The URL reference to resolve&period;


| *dest*
| The container where the result    is written, upon success&period;


|===

== See Also


xref:boost/urls/url.adoc[url],        xref:boost/urls/url_view.adoc[url&lowbar;view]&period;






[.small]#Created with https://www.mrdocs.com[MrDocs]#
