diff --git a/core/core.link_relationship.yml b/core/core.link_relationship.yml
new file mode 100644
index 0000000..7b5c99d
--- /dev/null
+++ b/core/core.link_relationship.yml
@@ -0,0 +1,383 @@
+about:
+  description: 'Refers to a resource that is the subject of the link''s context.'
+  reference: '"[RFC6903]'
+  notes: ' section 2"'
+alternate:
+  description: 'Refers to a substitute for this context'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-alternate]'
+appendix:
+  description: 'Refers to an appendix.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+archives:
+  description: '"Refers to a collection of records'
+  reference: ' documents'
+  notes: ' or other'
+'      materials of historical interest."':
+  description: '[http://www.w3.org/TR/2011/WD-html5-20110113/links.html#rel-archives]'
+author:
+  description: 'Refers to the context''s author.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-author]'
+blocked-by:
+  description: '"Identifies the entity that blocks access to a resource'
+'      following receipt of a legal demand."':
+  description: '[RFC7725]'
+bookmark:
+  description: 'Gives a permanent link to use for bookmarking purposes.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-bookmark]'
+canonical:
+  description: 'Designates the preferred version of a resource (the IRI and its contents).'
+  reference: '[RFC6596]'
+chapter:
+  description: 'Refers to a chapter in a collection of resources.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+collection:
+  description: 'The target IRI points to a resource which represents the collection resource for the context IRI.'
+  reference: '[RFC6573]'
+contents:
+  description: 'Refers to a table of contents.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+copyright:
+  description: '"Refers to a copyright statement that applies to the'
+'    link''s context."':
+  description: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+create-form:
+  description: 'The target IRI points to a resource where a submission form can be obtained.'
+  reference: '[RFC6861]'
+current:
+  description: '"Refers to a resource containing the most recent'
+'      item(s) in a collection of resources."':
+  description: '[RFC5005]'
+derivedfrom:
+  description: 'The target IRI points to a resource from which this material was derived.'
+  reference: '[draft-hoffman-xml2rfc]'
+describedby:
+  description: '"Refers to a resource providing information about the'
+'      link''s context."':
+  description: '[RFC5023]'
+describes:
+  description: '"The relationship A ''describes'' B asserts that'
+'      resource A provides a description of resource B. There are no': {  }
+'      constraints on the format or representation of either A or B': {  }
+'      neither are there any further constraints on either resource."':
+  description: '[RFC6892]'
+  reference: '"This link relation type is the inverse of the ''describedby'''
+'        relation type.  While ''describedby'' establishes a relation from': {  }
+'        the described resource back to the resource that describes it': {  }
+'        ''describes'' established a relation from the describing resource to': {  }
+'        the resource it describes.  If B is ''describedby'' A':
+  description: ' then A'
+'        ''describes'' B."': {  }
+disclosure:
+  description: '"Refers to a list of patent disclosures made with respect to '
+'      material for which ''disclosure'' relation is specified."':
+  description: '[RFC6579]'
+dns-prefetch:
+  description: '"Used to indicate an origin that will be used to fetch required '
+'      resources for the link context':
+  description: ' and that the user agent ought to resolve '
+'      as early as possible."':
+  description: '[https://www.w3.org/TR/resource-hints/]'
+duplicate:
+  description: '"Refers to a resource whose available representations'
+'      are byte-for-byte identical with the corresponding representations of': {  }
+'      the context IRI."':
+  description: '[RFC6249]'
+  reference: '"This relation is for static resources.  That is'
+  notes: ' an HTTP GET'
+'      request on any duplicate will return the same representation.  It': {  }
+'      does not make sense for dynamic or POSTable resources and should not': {  }
+'      be used for them."': {  }
+edit:
+  description: '"Refers to a resource that can be used to edit the'
+edit-form:
+  description: '"The target IRI points to a resource where a submission form for'
+'      editing associated resource can be obtained."':
+  description: '[RFC6861]'
+edit-media:
+  description: '"Refers to a resource that can be used to edit media'
+'      associated with the link''s context."':
+  description: '[RFC5023]'
+enclosure:
+  description: '"Identifies a related resource that is potentially'
+'      large and might require special handling."':
+  description: '[RFC4287]'
+first:
+  description: '"An IRI that refers to the furthest preceding resource'
+'    in a series of resources."':
+  description: '[RFC5988]'
+  reference: '"This relation type registration did not indicate a'
+'      reference.  Originally requested by Mark Nottingham in December': {  }
+'      2004."': {  }
+glossary:
+  description: 'Refers to a glossary of terms.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+help:
+  description: 'Refers to context-sensitive help.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-help]'
+hosts:
+  description: '"Refers to a resource hosted by the server indicated by'
+'      the link context."':
+  description: '[RFC6690]'
+  reference: '"This relation is used in CoRE where links are retrieved as a'
+'      ""/.well-known/core"" resource representation':
+  description: ' and is the default'
+'      relation type in the CoRE Link Format."': {  }
+hub:
+  description: '"Refers to a hub that enables registration for'
+'    notification of updates to the context."':
+  description: '[http://pubsubhubbub.googlecode.com]'
+  reference: 'This relation type was requested by Brett Slatkin.'
+icon:
+  description: 'Refers to an icon representing the link''s context.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-icon]'
+index:
+  description: 'Refers to an index.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+item:
+  description: 'The target IRI points to a resource that is a member of the collection represented by the context IRI.'
+  reference: '[RFC6573]'
+last:
+  description: '"An IRI that refers to the furthest following resource'
+'      in a series of resources."':
+  description: '[RFC5988]'
+  reference: '"This relation type registration did not indicate a'
+'      reference. Originally requested by Mark Nottingham in December': {  }
+latest-version:
+  description: '"Points to a resource containing the latest (e.g.'
+'      current) version of the context."':
+  description: '[RFC5829]'
+license:
+  description: 'Refers to a license associated with this context.'
+  reference: '[RFC4946]'
+  notes: '"For implications of use in HTML'
+'      http://www.w3.org/TR/html5/links.html#link-type-license"': {  }
+lrdd:
+  description: '"Refers to further information about the link''s context'
+'      expressed as a LRDD (""Link-based Resource Descriptor Document"")': {  }
+'      resource.  See [RFC6415] for information about': {  }
+'      processing this relation type in host-meta documents. When used': {  }
+'      elsewhere':
+  description: ' it refers to additional links and other metadata.'
+'      Multiple instances indicate additional LRDD resources. LRDD': {  }
+'      resources MUST have an ""application/xrd+xml"" representation':
+  description: ' and'
+'      MAY have others."':
+  description: '[RFC6415]'
+memento:
+  description: '"The Target IRI points to a Memento'
+  reference: ' a fixed resource that will not change state anymore."'
+  notes: '[RFC7089]'
+'      encapsulates a prior state of the Original Resource."': {  }
+monitor:
+  description: 'Refers to a resource that can be used to monitor changes in an HTTP resource.'
+  reference: '[RFC5989]'
+monitor-group:
+  description: 'Refers to a resource that can be used to monitor changes in a specified group of HTTP resources.'
+  reference: '[RFC5989]'
+next:
+  description: '"Indicates that the link''s context is a part of a series'
+  reference: ' and'
+'      that the next in the series is the link target."':
+  description: '[http://www.w3.org/TR/html5/links.html#link-type-next]'
+next-archive:
+  description: 'Refers to the immediately following archive resource.'
+  reference: '[RFC5005]'
+nofollow:
+  description: 'Indicates that the context’s original author or publisher does not endorse the link target.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-nofollow]'
+noreferrer:
+  description: 'Indicates that no referrer information is to be leaked when following the link.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-noreferrer]'
+original:
+  description: 'The Target IRI points to an Original Resource.'
+  reference: '[RFC7089]'
+  notes: '"An Original Resource is a resource that exists or used to'
+'      exist':
+  description: ' and for which access to one of its prior states may be'
+'      required."': {  }
+payment:
+  description: 'Indicates a resource where payment is accepted.'
+  reference: '[RFC5988]'
+  notes: '"This relation type registration did not indicate a'
+'      reference.  Requested by Joshua Kinberg and Robert Sayre.  It is': {  }
+'      meant as a general way to facilitate acts of payment':
+  description: ' and thus'
+'      this specification makes no assumptions on the type of payment or': {  }
+'      transaction protocol.  Examples may include a web page where': {  }
+'      donations are accepted or where goods and services are available': {  }
+'      for purchase. rel=""payment"" is not intended to initiate an': {  }
+'      automated transaction.  In Atom documents':
+  description: ' a link element with a'
+'      rel=""payment"" attribute may exist at the feed/channel level and/or': {  }
+'      the entry/item level.  For example':
+  description: ' a rel=""payment"" link at the'
+'      feed/channel level may point to a ""tip jar"" URI':
+  description: ' whereas an entry/'
+'      item containing a book review may include a rel=""payment"" link': {  }
+'      that points to the location where the book may be purchased': {  }
+'      through an online retailer."': {  }
+pingback:
+  description: 'Gives the address of the pingback resource for the link context.'
+  reference: '[http://www.hixie.ch/specs/pingback/pingback]'
+preconnect:
+  description: '"Used to indicate an origin that will be used to fetch required '
+'      resources for the link context. Initiating an early connection':
+  description: ' which '
+'      includes the DNS lookup':
+  description: ' TCP handshake'
+  reference: ' and optional TLS negotiation'
+  notes: ' '
+'      allows the user agent to mask the high latency costs of establishing a ': {  }
+'      connection."':
+  description: '[https://www.w3.org/TR/resource-hints/]'
+predecessor-version:
+  description: '"Points to a resource containing the predecessor'
+'      version in the version history."':
+  description: '[RFC5829]'
+prefetch:
+  description: '"The prefetch link relation type is used to identify a resource '
+'      that might be required by the next navigation from the link context':
+  description: ' and '
+'      that the user agent ought to fetch':
+  description: ' such that the user agent can deliver a '
+'      faster response once the resource is requested in the future."':
+  description: '[http://www.w3.org/TR/resource-hints/]'
+preload:
+  description: '"Refers to a resource that should be loaded early in the '
+'      processing of the link''s context':
+  description: ' without blocking rendering."'
+  reference: '[http://www.w3.org/TR/preload/]'
+  notes: 'Additional target attributes establish the detailed fetch properties of the link.'
+prerender:
+  description: '"Used to identify a resource that might be required by the next '
+'      navigation from the link context':
+  description: ' and that the user agent ought to fetch '
+'      and execute':
+  description: ' such that the user agent can deliver a faster response once '
+'      the resource is requested in the future."':
+  description: '[https://www.w3.org/TR/resource-hints/]'
+prev:
+  description: '"Indicates that the link''s context is a part of a series'
+  reference: ' and'
+'      that the previous in the series is the link target."':
+  description: '[http://www.w3.org/TR/html5/links.html#link-type-prev]'
+preview:
+  description: 'Refers to a resource that provides a preview of the link''s context.'
+  reference: '"[RFC6903]'
+  notes: ' section 3"'
+previous:
+  description: '"Refers to the previous resource in an ordered series'
+'      of resources.  Synonym for ""prev""."':
+  description: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+prev-archive:
+  description: 'Refers to the immediately preceding archive resource.'
+  reference: '[RFC5005]'
+privacy-policy:
+  description: 'Refers to a privacy policy associated with the link''s context.'
+  reference: '"[RFC6903]'
+  notes: ' section 4"'
+profile:
+  description: '"Identifying that a resource representation conforms'
+'to a certain profile':
+  description: ' without affecting the non-profile semantics'
+'of the resource representation."':
+  description: '[RFC6906]'
+  reference: '"Profile URIs are primarily intended to be used as'
+identifiers:
+  description: ' and thus clients SHOULD NOT indiscriminately access'
+'profile URIs."': {  }
+related:
+  description: 'Identifies a related resource.'
+  reference: '[RFC4287]'
+replies:
+  description: '"Identifies a resource that is a reply to the context'
+'      of the link."':
+  description: '[RFC4685]'
+search:
+  description: '"Refers to a resource that can be used to search through'
+'      the link''s context and related resources."':
+  description: '[http://www.opensearch.org/Specifications/OpenSearch/1.1]'
+section:
+  description: 'Refers to a section in a collection of resources.'
+  reference: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+self:
+  description: 'Conveys an identifier for the link''s context.'
+  reference: '[RFC4287]'
+service:
+  description: '"Indicates a URI that can be used to retrieve a'
+'      service document."':
+  description: '[RFC5023]'
+  reference: '"When used in an Atom document'
+  notes: ' this relation type specifies'
+'      Atom Publishing Protocol service documents by default.  Requested': {  }
+'      by James Snell."': {  }
+start:
+  description: '"Refers to the first resource in a collection of'
+'      resources."':
+  description: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+stylesheet:
+  description: 'Refers to a stylesheet.'
+  reference: '[http://www.w3.org/TR/html5/links.html#link-type-stylesheet]'
+subsection:
+  description: '"Refers to a resource serving as a subsection in a'
+'      collection of resources."':
+  description: '[http://www.w3.org/TR/1999/REC-html401-19991224]'
+successor-version:
+  description: '"Points to a resource containing the successor version'
+'      in the version history."':
+  description: '[RFC5829]'
+tag:
+  description: '"Gives a tag (identified by the given address) that applies to'
+'      the current document."':
+  description: '[http://www.w3.org/TR/html5/links.html#link-type-tag]'
+terms-of-service:
+  description: 'Refers to the terms of service associated with the link''s context.'
+  reference: '"[RFC6903]'
+  notes: ' section 5"'
+timegate:
+  description: 'The Target IRI points to a TimeGate for an Original Resource.'
+  reference: '[RFC7089]'
+  notes: '"A TimeGate for an Original Resource is a resource that is'
+'      capable of datetime negotiation to support access to prior states': {  }
+'      of the Original Resource."': {  }
+timemap:
+  description: 'The Target IRI points to a TimeMap for an Original Resource.'
+  reference: '[RFC7089]'
+  notes: '"A TimeMap for an Original Resource is a resource from which'
+'      a list of URIs of Mementos of the Original Resource is available."': {  }
+type:
+  description: 'Refers to a resource identifying the abstract semantic type of which the link''s context is considered to be an instance.'
+  reference: '"[RFC6903]'
+  notes: ' section 6"'
+up:
+  description: '"Refers to a parent document in a hierarchy of'
+'      documents."':
+  description: '[RFC5988]'
+  reference: '"This relation type registration did not indicate a'
+'      reference.  Requested by Noah Slater."': {  }
+version-history:
+  description: '"Points to a resource containing the version history'
+'      for the context."':
+  description: '[RFC5829]'
+via:
+  description: '"Identifies a resource that is the source of the'
+'      information in the link''s context."':
+  description: '[RFC4287]'
+webmention:
+  description: '"Identifies a target URI that supports the Webmention protcol.'
+'    This allows clients that mention a resource in some form of publishing process': {  }
+'    to contact that endpoint and inform it that this resource has been mentioned."':
+  description: '[http://www.w3.org/TR/webmention/]'
+  reference: '"This is a similar ""Linkback"" mechanism to the ones of Refback'
+  notes: ' Trackback'
+'    It uses a different protocol':
+  description: ' though'
+  reference: ' and thus should be discoverable through its own link'
+'    relation type."': {  }
+working-copy:
+  description: 'Points to a working copy for this resource.'
+  reference: '[RFC5829]'
+working-copy-of:
+  description: '"Points to the versioned resource from which this'
+'      working copy was obtained."':
+  description: '[RFC5829]'
diff --git a/core/core.services.yml b/core/core.services.yml
index 7d38991..29e7309 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -446,6 +446,9 @@ services:
   http_client_factory:
     class: Drupal\Core\Http\ClientFactory
     arguments: ['@http_handler_stack']
+  plugin.manager.link_relationship:
+    class: \Drupal\Core\Http\LinkRelationshipManager
+    arguments: ['@root', '@module_handler']
   theme.negotiator:
     class: Drupal\Core\Theme\ThemeNegotiator
     arguments: ['@access_check.theme']
diff --git a/core/lib/Drupal/Core/Http/LinkRelationship.php b/core/lib/Drupal/Core/Http/LinkRelationship.php
new file mode 100644
index 0000000..46812d6
--- /dev/null
+++ b/core/lib/Drupal/Core/Http/LinkRelationship.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\Core\Http;
+
+use Drupal\Core\Plugin\PluginBase;
+
+/**
+ * Defines a single relationship.
+ *
+ * @see https://tools.ietf.org/html/rfc5988#page-6
+ *
+ * @todo pointing to actual documentation.
+ */
+class LinkRelationship extends PluginBase {
+
+  /**
+   * @return string
+   */
+  public function getName() {
+    return $this->pluginDefinition['name'];
+  }
+
+  /**
+   * @return string|null
+   */
+  public function getDescription() {
+    return isset($this->pluginDefinition['description']) ? $this->pluginDefinition['description'] : NULL;
+  }
+
+  /**
+   * @return string|null
+   */
+  public function getReference() {
+    return isset($this->pluginDefinition['reference']) ? $this->pluginDefinition['reference'] : NULL;
+  }
+
+  /**
+   * @return string|null
+   */
+  public function getNotes() {
+    return isset($this->pluginDefinition['notes']) ? $this->pluginDefinition['notes'] : NULL;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Http/LinkRelationshipManager.php b/core/lib/Drupal/Core/Http/LinkRelationshipManager.php
new file mode 100644
index 0000000..2a72907
--- /dev/null
+++ b/core/lib/Drupal/Core/Http/LinkRelationshipManager.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Drupal\Core\Http;
+
+use Drupal\Core\Extension\Extension;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\DefaultPluginManager;
+use Drupal\Core\Plugin\Discovery\YamlDiscovery;
+
+class LinkRelationshipManager extends DefaultPluginManager {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaults = [
+    'class' => LinkRelationship::class,
+  ];
+
+  /**
+   * The app root.
+   *
+   * @var string
+   */
+  protected $root;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($root, ModuleHandlerInterface $module_handler) {
+    $plugin_interface = LinkRelationship::class;
+    $this->root = $root;
+    $this->pluginInterface = $plugin_interface;
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getDiscovery() {
+    if (!$this->discovery) {
+      $this->discovery = new YamlDiscovery('link_relationship', [
+          'core' => $this->root . '/core',
+        ] + array_map(function (Extension $extension) {
+          return $this->root . '/' . $extension->getPath();
+        }, $this->moduleHandler->getModuleList()));
+    }
+    return $this->discovery;
+  } 
+
+}
diff --git a/core/modules/rest/src/Plugin/rest/resource/EntityResource.php b/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
index 63857e4..0c6f8d3 100644
--- a/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
+++ b/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
@@ -2,11 +2,15 @@
 
 namespace Drupal\rest\Plugin\rest\resource;
 
+use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageException;
+use Drupal\Core\Template\Attribute;
 use Drupal\rest\Plugin\ResourceBase;
 use Drupal\rest\ResourceResponse;
 use Drupal\rest\ModifiedResourceResponse;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
 use Symfony\Component\HttpKernel\Exception\HttpException;
@@ -30,6 +34,33 @@
 class EntityResource extends ResourceBase {
 
   /**
+   * The link relationship manager.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $linkRelationshipManager;
+
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, PluginManagerInterface $link_relationship_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
+
+    $this->linkRelationshipManager = $link_relationship_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->getParameter('serializer.formats'),
+      $container->get('logger.factory')->get('rest'),
+      $container->get('plugin.manager.link_relationship')
+    );
+  }
+
+  /**
    * Responds to entity GET requests.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
@@ -59,6 +90,15 @@ public function get(EntityInterface $entity) {
       }
     }
 
+    // Add link relationship headers.
+    foreach ($this->linkRelationshipManager->getDefinitions() as $name => $definition) {
+      if ($entity->hasLinkTemplate($name)) {
+        $uri = $entity->toUrl($name)->setAbsolute(TRUE)->toString(TRUE)->getGeneratedUrl();
+        $link_header = '<' . $uri . '>; rel="' . $name . '"'; 
+        $response->headers->set('Link', $link_header);
+      }
+    }
+
     return $response;
   }
 
