# Common Requirements {#requirements} ## Authorization All requests to HTTPS endpoints SHOULD use the `Authorization` header to include an authorization token. The semantics of such tokens are not part of this specification. The `Authorization` HTTP header is optional if the [=Connector=] does not require authorization. ## Schemas & Contexts All protocol [=Messages=] are normatively defined by a [[json-schema]]. This specification also uses JSON-LD 1.1 and provides a JSON-LD context to serialize data structures and [=Message=] types as it facilitates extensibility. The JSON-LD context is designed to produce [=Message=] serializations using compaction that validate against the JSON Schema for the given [=Message=] type. This allows implementations to choose whether to process [=Messages=] as plain JSON or as JSON-LD and maintain interoperability between those approaches. Profiles that use JSON-LD are encouraged to provide similar contexts that facilitate this approach to interoperability. As this specification's JSON-LD objects are `@protected`, [=Profile=] authors are advised to define their custom terms as protected to spot term redefinition early. ## Exposure of Versions {#exposure-of-dataspace-protocol-versions} [=Connectors=] implementing the [=Dataspace Protocol=] may operate on different versions and bindings. Therefore, it is necessary that they can discover such information reliably and unambiguously. Each [=Connector=] MUST provide a version metadata endpoint ending with Uniform Resource Identifier (URI) segments `/.well-known/dspace-version`. The location of this endpoint SHOULD adhere to [[rfc8615]]. A [=Connector=] MUST respond to a respective HTTPS request by returning a [`VersionResponse`](#VersionResponse-table) with at least one item.
The item connects the version tag (`version` attribute) with a path to the endpoint. The semantics of the `path` property are specified by each protocol binding. The `serviceId` is a unique identifier for a [=Data Service=] and allows to group [=Dataspace Protocol=] endpoints exposed by different [=Data Service=]s across versions. `binding` describes the [=Dataspace Protocol=] binding such as HTTPS. `identifierType` describes the type of identifier used to refer to participants in the protocol communication.
`auth` describes how a [=Dataspace Protocol=] endpoint is secured by means of the `protocol`, `version` strings, and the `profile` array.
This data object MUST comply to the [JSON schema](message/schema/protocol-version-schema.json). The requesting [=Connector=] MAY select from the endpoints in the response. If the [=Connector=] cannot identify a matching [=Dataspace Protocol=] version, it MUST terminate the communication. The version endpoint MUST be unversioned and unauthenticated. ### HTTPS Binding When using the [=Dataspace Protocol=] HTTPS binding, the `path` property is an absolute Uniform Resource Locator (URL) path segment to be appended to `