<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://web.dev/</id>
  <title>Chris Palmer on web.dev</title>
  <updated>2026-04-15T23:21:06Z</updated>
  <author>
    <name>Chris Palmer</name>
  </author>
  <link href="https://web.dev/authors/chrispalmer/feed.xml" rel="self"/>
  <link href="https://web.dev/"/>
  <icon>https://web-dev.imgix.net/image/kheDArv5csY6rvQUJDbWRscckLr1/7OUAnF3abartcOzqxQqi.jpeg?auto=format</icon>
  <logo>https://web.dev/images/shared/rss-banner.png</logo>
  <subtitle>Software Security Engineer at Google</subtitle>
  
  
  <entry>
    <title>Enabling HTTPS on your servers</title>
    <link href="https://web.dev/enable-https/"/>
    <updated>2015-03-27T00:00:00Z</updated>
    <id>https://web.dev/enable-https/</id>
    <content type="html" mode="escaped">&lt;h2 id=&quot;steps-covered-in-this-article&quot;&gt;Steps covered in this article &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#steps-covered-in-this-article&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Create a 2048-bit RSA public/private key pair.&lt;/li&gt;
&lt;li&gt;Generate a certificate signing request (CSR) that embeds your public key.&lt;/li&gt;
&lt;li&gt;Share your CSR with your Certificate Authority (CA) to receive a final
certificate or a certificate chain.&lt;/li&gt;
&lt;li&gt;Install your final certificate in a non-web-accessible place such as
&lt;code&gt;/etc/ssl&lt;/code&gt; (Linux and Unix) or wherever IIS requires it (Windows).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;generating-keys-and-certificate-signing-requests&quot;&gt;Generating keys and certificate signing requests &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#generating-keys-and-certificate-signing-requests&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This section uses the openssl command-line program, which comes with most
Linux, BSD, and Mac OS X systems, to generate private/public keys and a CSR.&lt;/p&gt;
&lt;h3 id=&quot;generate-a-publicprivate-key-pair&quot;&gt;Generate a public/private key pair &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#generate-a-publicprivate-key-pair&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Let&#39;s start by generating a 2,048-bit RSA key pair. A smaller key, such
as 1,024 bits, is insufficiently resistant to brute-force guessing attacks. A
larger key, such as 4,096 bits, is overkill. Over time, key sizes increase as
computer processing gets cheaper. 2,048 is currently the sweet spot.&lt;/p&gt;
&lt;p&gt;The command to generate the RSA key pair is:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;openssl genrsa -out www.example.com.key &lt;span class=&quot;token number&quot;&gt;2048&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This gives the following output:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;Generating RSA private key, &lt;span class=&quot;token number&quot;&gt;2048&lt;/span&gt; bit long modulus&lt;br /&gt;.+++&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.+++&lt;br /&gt;e is &lt;span class=&quot;token number&quot;&gt;65537&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0x10001&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h3 id=&quot;generate-a-certificate-signing-request&quot;&gt;Generate a certificate signing request &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#generate-a-certificate-signing-request&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In this step, you embed your public key and information about your organization
and your website into a certificate signing request or CSR. The &lt;em&gt;openssl&lt;/em&gt;
command interactively asks you for the required metadata.&lt;/p&gt;
&lt;p&gt;Running the following command:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Outputs the following:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;You are about to be asked to enter information that will be incorporated&lt;br /&gt;into your certificate request&lt;br /&gt;&lt;br /&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;There are quite a few fields but you can leave some blank&lt;br /&gt;For some fields there will be a default value,&lt;br /&gt;If you enter &lt;span class=&quot;token string&quot;&gt;&#39;.&#39;&lt;/span&gt;, the field will be left blank.&lt;br /&gt;-----&lt;br /&gt;Country Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; letter code&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;AU&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:CA&lt;br /&gt;State or Province Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;full name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Some-State&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:California&lt;br /&gt;Locality Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for example, city&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:Mountain View&lt;br /&gt;Organization Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for example, company&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Internet Widgits Pty Ltd&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:Example, Inc.&lt;br /&gt;Organizational Unit Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for example, section&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:Webmaster Help Center Example&lt;br /&gt;Team&lt;br /&gt;Common Name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e.g. server FQDN or YOUR name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:www.example.com&lt;br /&gt;Email Address &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:webmaster@example.com&lt;br /&gt;&lt;br /&gt;Please enter the following &lt;span class=&quot;token string&quot;&gt;&#39;extra&#39;&lt;/span&gt; attributes&lt;br /&gt;to be sent with your certificate request&lt;br /&gt;A challenge password &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:&lt;br /&gt;An optional company name &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;:&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;To ensure the validity of the CSR, run this command:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;openssl req -text -in www.example.com.csr -noout&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;And the response should look like this:&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;Certificate Request:&lt;br /&gt;    Data:&lt;br /&gt;        Version: &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0x0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        Subject: &lt;span class=&quot;token assign-left variable&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;CA, &lt;span class=&quot;token assign-left variable&quot;&gt;ST&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;California, &lt;span class=&quot;token assign-left variable&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Mountain View, &lt;span class=&quot;token assign-left variable&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Google, Inc.,&lt;br /&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;OU&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Webmaster Help Center Example Team,&lt;br /&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;CN&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;www.example.com/emailAddress&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;webmaster@example.com&lt;br /&gt;        Subject Public Key Info:&lt;br /&gt;            Public Key Algorithm: rsaEncryption&lt;br /&gt;                Public-Key: &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2048&lt;/span&gt; bit&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;                Modulus:&lt;br /&gt;                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:&lt;br /&gt;                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:&lt;br /&gt;                    &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;br /&gt;                Exponent: &lt;span class=&quot;token number&quot;&gt;65537&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0x10001&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        Attributes:&lt;br /&gt;            a0:00&lt;br /&gt;    Signature Algorithm: sha256WithRSAEncryption&lt;br /&gt;         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:&lt;br /&gt;         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:&lt;br /&gt;         &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h3 id=&quot;submit-your-csr-to-a-certificate-authority&quot;&gt;Submit your CSR to a certificate authority &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#submit-your-csr-to-a-certificate-authority&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Different certificate authorities (CAs) require different methods for sending
them your CSRs. Methods may include using a form on their website, sending the
CSR by email, or something else. Some CAs (or their resellers) may even automate
some or all of the process (including, in some cases, key pair and CSR
generation).&lt;/p&gt;
&lt;p&gt;Send the CSR to your CA, and follow their instructions to receive your final
certificate or certificate chain.&lt;/p&gt;
&lt;p&gt;Different CAs charge different amounts of money for the service of vouching
for your public key.&lt;/p&gt;
&lt;p&gt;There are also options for mapping your key to more than one DNS name, including
several distinct names (e.g. all of example.com, www.example.com, example.net,
and www.example.net) or &amp;quot;wildcard&amp;quot; names such as *.example.com.&lt;/p&gt;
&lt;p&gt;For example, one CA currently offers these prices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Standard: $16/year, valid for example.com and www.example.com.&lt;/li&gt;
&lt;li&gt;Wildcard: $150/year, valid for example.com and *.example.com.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At these prices, wildcard certificates are economical when you have more than 9
subdomains; otherwise, you can just buy one or more single-name certificates. (If
you have more than, say, five subdomains, you might find a wildcard certificate
more convenient when you come to enable HTTPS on your servers.)&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; Keep in mind that in wildcard certificates the wildcard applies to only one DNS label. A certificate good for *.example.com will work for foo.example.com and bar.example.com, but &lt;em&gt;not&lt;/em&gt; for foo.bar.example.com. &lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Copy the certificates to all your front-end servers in a non-web-accessible
place such as &lt;code&gt;/etc/ssl&lt;/code&gt; (Linux and Unix) or wherever IIS (Windows) requires
them.&lt;/p&gt;
&lt;h2 id=&quot;enable-https-on-your-servers&quot;&gt;Enable HTTPS on your servers &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#enable-https-on-your-servers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Enabling HTTPS on your servers is a critical step in providing security for
your web pages.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use Mozilla&#39;s Server Configuration tool to set up your server for HTTPS support.&lt;/li&gt;
&lt;li&gt;Regularly test your site with the Qualys&#39; handy SSL Server Test and ensure
you get at least an A or A+.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this point, you must make a crucial operations decision. Choose one of the
following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dedicate a distinct IP address to each hostname your web server serves content
from.&lt;/li&gt;
&lt;li&gt;Use name-based virtual hosting.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have been using distinct IP addresses for each hostname, you can
easily support both HTTP and HTTPS for all clients.&lt;/p&gt;
&lt;p&gt;However, most site operators use name-based virtual hosting to conserve IP
addresses and because it&#39;s more convenient in general. The problem with IE on
Windows XP and Android earlier than 2.3 is that they do not understand &lt;a href=&quot;https://en.wikipedia.org/wiki/Server_Name_Indication&quot; rel=&quot;noopener&quot;&gt;Server
Name Indication&lt;/a&gt;
(SNI), which is crucial for HTTPS name-based virtual hosting.&lt;/p&gt;
&lt;p&gt;Someday—hopefully soon—clients that don&#39;t support SNI will be replaced
with modern software. Monitor the user agent string in your request logs to know
when enough of your user population has migrated to modern software. (You can
decide what your threshold is; perhaps less than 5%, or less then 1%.)&lt;/p&gt;
&lt;p&gt;If you don&#39;t already have HTTPS service available on your servers, enable it now
(without redirecting HTTP to HTTPS; see below). Configure your web server to use
the certificates you bought and installed. You might find &lt;a href=&quot;https://mozilla.github.io/server-side-tls/ssl-config-generator/&quot; rel=&quot;noopener&quot;&gt;Mozilla&#39;s handy
configuration
generator&lt;/a&gt;
useful.&lt;/p&gt;
&lt;p&gt;If you have many hostnames or subdomains, they each need to use the right
certificate.&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-warn-bg color-state-warn-text&quot;&gt;&lt;p class=&quot;cluster &quot;&gt;&lt;span class=&quot;aside__icon box-block color-state-warn-text&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; role=&quot;img&quot; aria-label=&quot;Warning sign&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;   &lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M23 21L12 2 1 21h22zm-12-3v-2h2v2h-2zm0-4h2v-4h-2v4z&quot;&gt;&lt;/path&gt; &lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot; flow&quot;&gt; Warning: If you&#39;ve already completed these steps, but are using HTTPS for the sole purpose of redirecting clients back to HTTP, stop doing that now. See the next section to make sure HTTPS and HTTP work smoothly. &lt;/div&gt;&lt;/aside&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; Ultimately you should redirect HTTP requests to HTTPS and use HTTP Strict Transport Security (HSTS). However, this is not the right stage in the migration process to do that; see &amp;quot;Redirect HTTP To HTTPS&amp;quot; and &amp;quot;Turn On Strict Transport Security And Secure Cookies.&amp;quot; &lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Now, and throughout your site&#39;s lifetime, check your HTTPS configuration with
&lt;a href=&quot;https://www.ssllabs.com/ssltest/&quot; rel=&quot;noopener&quot;&gt;Qualys&#39; handy SSL Server Test&lt;/a&gt;.
Your site should score an A or A+; treat anything that causes a lower grade as
a bug. (Today&#39;s A is tomorrow&#39;s B, because attacks against algorithms and
protocols are always improving!)&lt;/p&gt;
&lt;h2 id=&quot;make-intrasite-urls-relative&quot;&gt;Make intrasite URLs relative &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#make-intrasite-urls-relative&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that you are serving your site on both HTTP and HTTPS, things need to work as
smoothly as possible, regardless of protocol. An important factor is using
relative URLs for intrasite links.&lt;/p&gt;
&lt;p&gt;Make sure intrasite URLs and external URLs are agnostic to protocol; that is,
make sure you use relative paths or leave out the protocol like
&lt;code&gt;//example.com/something.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A problem arises when you serve a page via HTTPS that includes HTTP
resources, known as
&lt;a href=&quot;https://web.dev/what-is-mixed-content/&quot;&gt;mixed content&lt;/a&gt;.
Browsers warn users that the full strength of HTTPS has been lost. In fact,
in the case of active mixed content (script, plug-ins, CSS, iframes), browsers
often simply won&#39;t load or execute the content at all, resulting in a
broken page. And remember, it&#39;s perfectly OK to include HTTPS resources in an
HTTP page.&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; See &lt;a href=&quot;https://web.dev/fixing-mixed-content&quot;&gt;Fixing Mixed Content&lt;/a&gt; for more details about ways to fix and prevent mixed content. &lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Additionally, when you link to other pages in your site, users could get
downgraded from HTTPS to HTTP.&lt;/p&gt;
&lt;p&gt;These problems happen when your pages include fully-qualified, intrasite URLs
that use the &lt;em&gt;http://&lt;/em&gt; scheme.&lt;/p&gt;
&lt;figure class=&quot;compare flow&quot; data-type=&quot;worse&quot; data-size=&quot;full&quot;&gt;&lt;p class=&quot;compare__label&quot;&gt;Don&#39;t&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Welcome To Example.com&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://example.com/jquery.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://assets.example.com/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://img.example.com/logo.png&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;A &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://example.com/2014/12/24/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;new post on cats!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;figcaption class=&quot;compare__caption&quot;&gt;
&lt;p&gt;Avoid using fully qualified intrasite URLs.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In other words, make intrasite URLs as relative as possible: either
protocol-relative (lacking a protocol, starting with &lt;code&gt;//example.com&lt;/code&gt;) or
host-relative (starting with just the path, like &lt;code&gt;/jquery.js&lt;/code&gt;).&lt;/p&gt;
&lt;figure class=&quot;compare flow&quot; data-type=&quot;better&quot; data-size=&quot;full&quot;&gt;&lt;p class=&quot;compare__label&quot;&gt;Do&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Welcome To Example.com&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/jquery.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/assets/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/images/logo.png&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;A &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/2014/12/24/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;new post on cats!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;figcaption class=&quot;compare__caption&quot;&gt;
&lt;p&gt;Use relative intrasite URLs.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;compare flow&quot; data-type=&quot;better&quot; data-size=&quot;full&quot;&gt;&lt;p class=&quot;compare__label&quot;&gt;Do&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Welcome To Example.com&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//example.com/jquery.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//assets.example.com/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//img.example.com/logo.png&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;A &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;//example.com/2014/12/24/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;new post on cats!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;figcaption class=&quot;compare__caption&quot;&gt;
&lt;p&gt;Or, use protocol-relative intrasite URLs.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;compare flow&quot; data-type=&quot;better&quot; data-size=&quot;full&quot;&gt;&lt;p class=&quot;compare__label&quot;&gt;Do&lt;/p&gt;
&lt;div&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Welcome To Example.com&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/jquery.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/assets/style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/images/logo.png&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;A &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/2014/12/24/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;new post on cats!&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token entity named-entity&quot; title=&quot;&amp;lt;&quot;&gt;&amp;amp;lt;&lt;/span&gt;p&gt;Check out this &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&amp;lt;b&gt;https://foo.com/&amp;lt;/b&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;other cool site.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;figcaption class=&quot;compare__caption&quot;&gt;
&lt;p&gt;Use HTTPS URLs for intersite URLs (where possible).&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Do this with a script, not by hand. If your site&#39;s content is in a database,
test your script on a development copy of your database. If
your site&#39;s content consists of simple files, test your script on a
development copy of the files. Push the changes to production only after the
changes pass QA, as normal. You can use &lt;a href=&quot;https://github.com/bramus/mixed-content-scan&quot; rel=&quot;noopener&quot;&gt;Bram van Damme&#39;s
script&lt;/a&gt; or something similar to
detect mixed content in your site.&lt;/p&gt;
&lt;p&gt;When linking to other sites (as opposed to including resources from them),
don&#39;t change the protocol since you don&#39;t have control over how those sites
operate.&lt;/p&gt;
&lt;p&gt;To make migration smoother for large sites, we recommend
protocol-relative URLs. If you are not sure whether you can fully deploy
HTTPS yet, forcing your site to use HTTPS for all sub-resources may backfire.
There is likely to be a period of time in which HTTPS is new and weird for
you, and the HTTP site must still work as well as ever. Over time, you&#39;ll
complete the migration and lock in HTTPS (see the next two sections).&lt;/p&gt;
&lt;p&gt;If your site depends on scripts, images, or other resources served from a third
party, such as a CDN or jquery.com, you have two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use protocol-relative URLs for these resources. If the third party does not
serve HTTPS, ask them to. Most already do, including jquery.com.&lt;/li&gt;
&lt;li&gt;Serve the resources from a server that you control, and which offers both HTTP
and HTTPS. This is often a good idea anyway, because then you have better
control over your site&#39;s appearance, performance, and security. In addition,
you don&#39;t have to trust a third party, which is always nice.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; Keep in mind that you also need to change intrasite URLs in your stylesheets, JavaScript, redirect rules, &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tags, and CSP declarations, not just in the HTML pages. &lt;/div&gt;&lt;/aside&gt;
&lt;h2 id=&quot;redirect-http-to-https&quot;&gt;Redirect HTTP to HTTPS &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#redirect-http-to-https&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You need to put a &lt;a href=&quot;https://support.google.com/webmasters/answer/139066&quot; rel=&quot;noopener&quot;&gt;canonical link&lt;/a&gt;
at the head of your page to tell search engines that HTTPS is the best way to
get to your site.&lt;/p&gt;
&lt;p&gt;Set &lt;code&gt;&amp;lt;link rel=&amp;quot;canonical&amp;quot; href=&amp;quot;https://…&amp;quot;/&amp;gt;&lt;/code&gt; tags in your pages. This
helps search engines determine the best way to get to your site.&lt;/p&gt;
&lt;h2 id=&quot;turn-on-strict-transport-security-and-secure-cookies&quot;&gt;Turn on Strict Transport Security and secure cookies &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#turn-on-strict-transport-security-and-secure-cookies&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At this point, you are ready to &amp;quot;lock in&amp;quot; the use of HTTPS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use HTTP Strict Transport Security (HSTS) to avoid the cost of the 301 redirect.&lt;/li&gt;
&lt;li&gt;Always set the Secure flag on cookies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First, use &lt;a href=&quot;https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security&quot; rel=&quot;noopener&quot;&gt;Strict Transport Security&lt;/a&gt;
to tell clients that they should always connect to your server via HTTPS, even
when following an &lt;code&gt;http://&lt;/code&gt; reference. This defeats attacks such as
&lt;a href=&quot;http://www.thoughtcrime.org/software/sslstrip/&quot; rel=&quot;noopener&quot;&gt;SSL Stripping&lt;/a&gt;,
and also avoids the round-trip cost of the &lt;code&gt;301 redirect&lt;/code&gt; that we enabled in
&lt;a href=&quot;https://web.dev/enable-https/#redirect-http-to-https&quot;&gt;Redirect HTTP to HTTPS&lt;/a&gt;.&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; Clients that have noted your site as a known HSTS Host are likely to &lt;a href=&quot;https://tools.ietf.org/html/rfc6797#section-12.1&quot;&gt;hard-fail if your site ever has an error in its TLS configuration&lt;/a&gt; (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers cannot trick clients into accessing the site without HTTPS. Do not enable HSTS until you are certain that your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors. &lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Turn on HTTP Strict Transport Security (HSTS) by setting the
&lt;code&gt;Strict-Transport-Security&lt;/code&gt; header. &lt;a href=&quot;https://www.owasp.org/index.php/HTTP_Strict_Transport_Security&quot; rel=&quot;noopener&quot;&gt;OWASP&#39;s HSTS page has links to
instructions&lt;/a&gt;
for various server software.&lt;/p&gt;
&lt;p&gt;Most web servers offer a similar ability to add custom headers.&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; &lt;code&gt;max-age&lt;/code&gt; is measured in seconds. You can start with low values and gradually increase the &lt;code&gt;max-age&lt;/code&gt; as you become more comfortable operating an HTTPS-only site. &lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;It is also important to make sure that clients never send cookies (such as for
authentication or site preferences) over HTTP. For example, if a user&#39;s
authentication cookie were to be exposed in plain text, the security guarantee of
their entire session would be destroyed—even if you have done everything else
right!&lt;/p&gt;
&lt;p&gt;Therefore, change your web application to always set the Secure flag on cookies
that it sets. &lt;a href=&quot;https://www.owasp.org/index.php/SecureFlag&quot; rel=&quot;noopener&quot;&gt;This OWASP page explains how to set the Secure
flag&lt;/a&gt; in several application
frameworks. Every application framework has a way to set the flag.&lt;/p&gt;
&lt;p&gt;Most web servers offer a simple redirect feature. Use &lt;code&gt;301 (Moved Permanently)&lt;/code&gt;
to indicate to search engines and browsers that the HTTPS version is canonical,
and redirect your users to the HTTPS version of your site from HTTP.&lt;/p&gt;
&lt;h3 id=&quot;search-ranking&quot;&gt;Search ranking &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#search-ranking&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Google uses &lt;a href=&quot;https://googlewebmastercentral.blogspot.com/2014/08/https-as-ranking-signal.html&quot; rel=&quot;noopener&quot;&gt;HTTPS as a positive search quality
indicator&lt;/a&gt;.
Google also publishes a guide for &lt;a href=&quot;https://support.google.com/webmasters/topic/6029673&quot; rel=&quot;noopener&quot;&gt;how to transfer, move, or migrate your
site&lt;/a&gt; while maintaining
its search rank. Bing also publishes &lt;a href=&quot;http://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a&quot; rel=&quot;noopener&quot;&gt;guidelines for
webmasters&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;performance&quot;&gt;Performance &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#performance&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When the content and application layers are well-tuned (see
&lt;a href=&quot;https://stevesouders.com/&quot; rel=&quot;noopener&quot;&gt;Steve Souders&#39; books&lt;/a&gt; for great
advice), the remaining TLS performance concerns are generally small, relative
to the overall cost of the application. Additionally, you can reduce and
amortize those costs. (For great advice on TLS optimization and generally, see
&lt;a href=&quot;https://hpbn.co/&quot; rel=&quot;noopener&quot;&gt;High Performance Browser Networking&lt;/a&gt; by Ilya Grigorik.)
See also Ivan Ristic&#39;s &lt;a href=&quot;https://www.feistyduck.com/books/openssl-cookbook/&quot; rel=&quot;noopener&quot;&gt;OpenSSL
Cookbook&lt;/a&gt; and
&lt;a href=&quot;https://www.feistyduck.com/books/bulletproof-ssl-and-tls/&quot; rel=&quot;noopener&quot;&gt;Bulletproof SSL And TLS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In some cases, TLS can &lt;em&gt;improve&lt;/em&gt; performance, mostly as a result of making
HTTP/2 possible. Chris Palmer gave a talk on &lt;a href=&quot;https://developers.google.com/web/shows/cds/2014/tls-all-the-things&quot; rel=&quot;noopener&quot;&gt;HTTPS and HTTP/2 performance at
Chrome Dev Summit 2014&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;referer-headers&quot;&gt;Referer headers &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#referer-headers&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When users follow links from your HTTPS site to other HTTP sites, user agents
don&#39;t send the Referer header. If this is a problem, there are several ways to
solve it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The other sites should migrate to HTTPS. If referee sites can complete the
&lt;a href=&quot;https://web.dev/enable-https/#enable-https-on-your-servers&quot;&gt;Enable HTTPS on your servers&lt;/a&gt; section of
this guide, you can change links in your site to theirs from &lt;code&gt;http://&lt;/code&gt; to
&lt;code&gt;https://&lt;/code&gt;, or you can use protocol-relative links.&lt;/li&gt;
&lt;li&gt;To work around a variety of problems with Referer headers, use the new
&lt;a href=&quot;http://www.w3.org/TR/referrer-policy/#referrer-policy-delivery-meta&quot; rel=&quot;noopener&quot;&gt;Referrer Policy standard&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because search engines are migrating to HTTPS, in the future, you are likely
to see &lt;em&gt;more&lt;/em&gt; Referer headers when you migrate to HTTPS.&lt;/p&gt;
&lt;aside class=&quot;aside flow bg-state-bad-bg color-state-bad-text&quot;&gt;&lt;p class=&quot;cluster color-state-bad-text&quot;&gt;&lt;span class=&quot;aside__icon box-block &quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; role=&quot;img&quot; aria-label=&quot;Error sign&quot;&gt;   &lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15v-2h2v2h-2zm0-10v6h2V7h-2z&quot;&gt;&lt;/path&gt; &lt;/svg&gt;&lt;/span&gt;&lt;strong&gt;Caution&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot; flow&quot;&gt; According to the &lt;a href=&quot;https://tools.ietf.org/html/rfc2616#section-15.1.3&quot;&gt;HTTP RFC&lt;/a&gt;, clients &lt;strong&gt;SHOULD NOT&lt;/strong&gt; include a Referer header field in a (non-secure) HTTP request if the referring page is transferred with a secure protocol. &lt;/div&gt;&lt;/aside&gt;
&lt;h3 id=&quot;ad-revenue&quot;&gt;Ad revenue &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/enable-https/#ad-revenue&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Site operators that monetize their site by showing ads want to make sure that
migrating to HTTPS does not reduce ad impressions. But due to mixed content
security concerns, an HTTP &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; doesn&#39;t work in an HTTPS page. There is a
tricky collective action problem here: until advertisers publish over HTTPS,
site operators cannot migrate to HTTPS without losing ad revenue; but until site
operators migrate to HTTPS, advertisers have little motivation to publish HTTPS.&lt;/p&gt;
&lt;p&gt;Advertisers should at least offer ad service via HTTPS (such as by completing
the &amp;quot;Enable HTTPS on your servers&amp;quot; section on this page). Many already do. You
should ask advertisers that do not serve HTTPS at all to at least start.
You may wish to defer completing
&lt;a href=&quot;https://web.dev/enable-https/#make-intrasite-urls-relative&quot;&gt;Make IntraSite URLs relative&lt;/a&gt; until enough
advertisers interoperate properly.&lt;/p&gt;
</content>
    <author>
      <name>Chris Palmer</name>
    </author><author>
      <name>Matt Gaunt</name>
    </author>
  </entry>
  
  <entry>
    <title>Important Security Terminology</title>
    <link href="https://web.dev/intro-to-security-terminology/"/>
    <updated>2015-03-27T00:00:00Z</updated>
    <id>https://web.dev/intro-to-security-terminology/</id>
    <content type="html" mode="escaped">&lt;h2 id=&quot;summary&quot;&gt;Summary &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/intro-to-security-terminology/#summary&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Used public/private keys to sign and decrypt messages between the browser and the server.&lt;/li&gt;
&lt;li&gt;A certificate authority (CA) is an organization that vouches for the mapping between the public keys and public DNS names (such as &amp;quot;www.foobar.com&amp;quot;).&lt;/li&gt;
&lt;li&gt;A certificate signing request (CSR) is a data format that bundles a public key together with some metadata about the entity that owns the key&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-the-public-and-private-key-pairs&quot;&gt;What are the public and private key pairs? &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/intro-to-security-terminology/#what-are-the-public-and-private-key-pairs&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;public/private key pair&lt;/strong&gt; is a pair of very large numbers that are used
as encryption and decryption keys, and that share a special mathematical
relationship. A common system for key pairs is the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RSA_(cryptosystem)&quot; rel=&quot;noopener&quot;&gt;RSA
cryptosystem&lt;/a&gt;&lt;/strong&gt;. The &lt;strong&gt;public
key&lt;/strong&gt; is used to encrypt messages, and the messages can only be feasibly
decrypted with the corresponding &lt;strong&gt;private key&lt;/strong&gt;. Your web server advertises
its public key to the world, and clients (such as web browsers) use that to
bootstrap a secure channel to your server.&lt;/p&gt;
&lt;h2 id=&quot;what-is-a-certificate-authority&quot;&gt;What is a certificate authority? &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/intro-to-security-terminology/#what-is-a-certificate-authority&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;certification authority (CA)&lt;/strong&gt; is an organization that vouches for the
mapping between public keys and public DNS names (such as &amp;quot;www.foobar.com&amp;quot;).
For example, how is a client to know if a particular public key is the &lt;em&gt;true&lt;/em&gt;
public key for www.foobar.com? A priori, there is no way to know. A CA vouches
for a particular key as being the true one for a particular site by using its
own private key to &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Signing_messages&quot; rel=&quot;noopener&quot;&gt;cryptographically
sign&lt;/a&gt;&lt;/strong&gt; the
website&#39;s public key. This signature is computationally infeasible to forge.
Browsers (and other clients) maintain &lt;strong&gt;trust anchor stores&lt;/strong&gt; containing the
public keys owned by the well-known CAs, and they use those public keys to
&lt;strong&gt;cryptographically verify&lt;/strong&gt; the CA&#39;s signatures.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;X.509 certificate&lt;/strong&gt; is a data format that bundles a public key together
with some metadata about the entity that owns the key. In the case of the web,
the owner of the key is the site operator, and the important metadata is the DNS
name of the web server. When a client connects to an HTTPS web server, the web
server presents its certificate for the client to verify. The client verifies
that the certificate has not expired, that the DNS name matches the name of the
server the client is trying to connect to, and that a known trust anchor CA has
signed the certificate. In most cases, CAs do not directly sign web server
certificates; usually, there is a &lt;strong&gt;chain of certificates&lt;/strong&gt; linking a trust
anchor to an intermediate signer or signers, and finally to the web server&#39;s
own certificate (the &lt;strong&gt;end entity&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id=&quot;what-is-a-certificate-signing-request&quot;&gt;What is a certificate signing request? &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/intro-to-security-terminology/#what-is-a-certificate-signing-request&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;certificate signing request (CSR)&lt;/strong&gt; is a data format which, like a
certificate, bundles a public key together with some metadata about the entity
that owns the key. However, clients do not interpret CSRs; CAs do. When you seek
to have a CA vouch for your web server&#39;s public key, you send the CA a CSR. The
CA validates the information in the CSR and uses it to generate a certificate.
The CA then sends you the final certificate, and you install that certificate (or,
more likely, a certificate chain) and your private key on your web server.&lt;/p&gt;
</content>
    <author>
      <name>Chris Palmer</name>
    </author><author>
      <name>Matt Gaunt</name>
    </author>
  </entry>
</feed>
