<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – HTTP</title>
    <link>https://www.devkuma.com/jp/tags/http/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/http/logo/180x180.jpg</url>
      <title>HTTP</title>
      <link>https://www.devkuma.com/jp/tags/http/</link>
    </image>
    <description>Recent content in HTTP on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/http/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>HTTP 紹介</title>
      <link>https://www.devkuma.com/jp/docs/http/overview/</link>
      <pubDate>Tue, 06 Nov 2018 01:34:33 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/overview/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-概要&#34;&gt;HTTP 概要&lt;/h2&gt;
&lt;p&gt;HTTP(HyperText Transfer Protocol)は、WWW で Web サーバーとクライアント(ブラウザー)の間でデータ(Web ページなど)を送受信するためのプロトコルである。
基本的にはテキストメッセージリソースを交換し、そのほかにも &lt;code&gt;.jpeg&lt;/code&gt; などのさまざまなリソースを交換できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP はアプリケーションレベルのプロトコルで、TCP/IP で構成されたプロトコルである。&lt;/li&gt;
&lt;li&gt;HTTP は状態を持たない Stateless プロトコルである。&lt;/li&gt;
&lt;li&gt;Method、Path、Version、Headers、Body などで構成される。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HTTP バージョンごとに以下の仕様書が公開されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.ietf.org/rfc/rfc1945.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC1945 (HTTP/1.0)&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ietf.org/rfc/rfc2616.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC2616 (HTTP/1.1)&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ietf.org/rfc/rfc7540.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC7540 (HTTP/2)&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;http-messages&#34;&gt;HTTP Messages&lt;/h2&gt;
&lt;p&gt;HTTP メッセージには 2 つの種類がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP リクエストメッセージ: クライアントがサーバーにリソースを要求する。&lt;/li&gt;
&lt;li&gt;HTTP レスポンスメッセージ: サーバーがクライアントに HTTP リクエストの結果を応答する。&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTP Request (リクエスト)</title>
      <link>https://www.devkuma.com/jp/docs/http/request/</link>
      <pubDate>Tue, 06 Nov 2018 01:34:33 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/request/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-request-messages-リクエストメッセージ&#34;&gt;HTTP Request messages (リクエストメッセージ)&lt;/h2&gt;
&lt;p&gt;ブラウザーで Web ページを開くと、ブラウザーはサーバーに次のようなリクエストメッセージを送信する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-http&#34; data-lang=&#34;http&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;GET&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;HTTP&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Accept&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;image/gif, image/jpeg, */*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Accept-Language&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;ko&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Accept-Encoding&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;gzip, deflate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;User-Agent&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Host&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;www.xxx.zzz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Connection&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Keep-Alive&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リクエストメッセージは次の構文で構成される。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP Request line(リクエストライン)&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;GET / HTTP/1.1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;HTTP Request Header(リクエストヘッダー)&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Accept: image/gif, image/jpeg, */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;HTTP Body(本文)&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;メッセージ本文(POST メソッドなどを使用)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;start-line-リクエスト開始ライン&#34;&gt;Start line (リクエスト開始ライン)&lt;/h2&gt;
&lt;p&gt;HTTP リクエストの開始行には次の 3 つの要素がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP メソッド&lt;/li&gt;
&lt;li&gt;リクエスト対象(パス名)&lt;/li&gt;
&lt;li&gt;HTTP プロトコルバージョン&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;リクエストラインは次の形式で表示される。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;リクエストライン&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[HTTP メソッド] [リクエスト対象] [HTTP プロトコルバージョン]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;パス名は通常 &lt;code&gt;/aaa/bbb/ccc.html&lt;/code&gt; のようなもので、スラッシュで始まるパス名、または &lt;code&gt;http://&lt;/code&gt; で始まる URL が指定される。バージョンは現在 1.1 が一般的に使用される。&lt;/p&gt;
&lt;h3 id=&#34;http-method-メソッド&#34;&gt;HTTP Method (メソッド)&lt;/h3&gt;
&lt;p&gt;HTTP/1.0、HTTP/1.1 でサポートされるメソッドは次のとおりである。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;メソッド&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;HTTP/1.0&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;HTTP/1.1&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;GET&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;◎&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;◎&lt;/td&gt;
          &lt;td&gt;最も一般的に使われるメソッドである。ブラウザーはサーバーにページの取得を要求する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;HEAD&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;◎&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;◎&lt;/td&gt;
          &lt;td&gt;ヘッダー専用情報を要求する。サーバーは GET メソッドと HEAD メソッドを必ずサポートしなければならない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;POST&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;method=&amp;quot;POST&amp;quot;&lt;/code&gt; を指定したフォームに入力したデータをサーバーへ送信するときに使われる。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PUT&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;ファイルをサーバーへアップロードするときに使われる。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DELETE&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;指定されたリソースの削除をサーバーに要求する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;CONNECT&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;プロキシサーバー経由で SSL 通信するときなどに使う。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;OPTIONS&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;サーバーがサポートしているメソッドやオプションを照会するときに利用する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TRACE&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;HTTP リクエストがどのプロキシサーバーを経由して送信されるかなど、HTTP の動作を追跡するときに利用する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LINK&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td&gt;指定した URL とリソースにリンク関係を接続する。HTTP/1.1 ではもう使われない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;UNLINK&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td&gt;指定された URL とリソース間のリンク関係を解除する。HTTP/1.1 ではもう使われない。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(◎: 必須、○: サポート、×: 未サポート)&lt;/p&gt;
&lt;p&gt;Apache は上記以外にも PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCK などのメソッドをサポートしている。&lt;/p&gt;
&lt;h4 id=&#34;get&#34;&gt;GET&lt;/h4&gt;
&lt;p&gt;GET リクエスト方式は URI(URL)が持つ情報を取得するためにサーバー側へ要求する形式である。&lt;/p&gt;
&lt;h4 id=&#34;post&#34;&gt;POST&lt;/h4&gt;
&lt;p&gt;POST リクエスト方式は、リクエスト URI(URL)にフォーム入力を処理するために構成したサーバー側スクリプト(ASP、PHP、JSP など)または CGI プログラムへ Form Action とともに送信される。このときリクエスト情報はヘッダー情報に含まれず、データ部分に入る。&lt;/p&gt;
&lt;h4 id=&#34;head&#34;&gt;HEAD&lt;/h4&gt;
&lt;p&gt;HEAD リクエスト方式は GET と似ているが、Web サーバーはヘッダー情報以外のデータを送信しない。Web サーバーの稼働確認(Health Check)や Web サーバー情報(バージョンなど)を得るために使われる。&lt;/p&gt;
&lt;h4 id=&#34;options&#34;&gt;OPTIONS&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc2616#section-9.2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;rfc2616&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;br&gt;
このメソッドでシステムがサポートしているメソッドの種類を確認できる。&lt;/p&gt;
&lt;h4 id=&#34;put&#34;&gt;PUT&lt;/h4&gt;
&lt;p&gt;POST と似た転送構造を持つため、ヘッダー以外にメッセージ(データ)も送信される。リモートサーバーに指定したコンテンツを保存するために使われ、ホームページ改ざんに悪用されることも多い。&lt;/p&gt;
&lt;h4 id=&#34;patch&#34;&gt;PATCH&lt;/h4&gt;
&lt;p&gt;PUT と似て、要求されたリソースを修正(UPDATE)するときに使う。PUT はリソース全体を更新する意味だが、PATCH は該当リソースの一部を置き換える意味で使われる。&lt;/p&gt;
&lt;h4 id=&#34;delete&#34;&gt;DELETE&lt;/h4&gt;
&lt;p&gt;リモート Web サーバーのファイルを削除するために使われ、PUT とは反対の概念のメソッドである。&lt;/p&gt;
&lt;h4 id=&#34;trace&#34;&gt;TRACE&lt;/h4&gt;
&lt;p&gt;リモートサーバーに Loopback(ループバック)メッセージを呼び出すために使われる。&lt;/p&gt;
&lt;h4 id=&#34;connect&#34;&gt;CONNECT&lt;/h4&gt;
&lt;p&gt;Web サーバーにプロキシ機能を要求するときに使われる。&lt;/p&gt;
&lt;h3 id=&#34;リクエスト対象パス名&#34;&gt;リクエスト対象(パス名)&lt;/h3&gt;
&lt;p&gt;リクエスト対象は URL、パス、クエリ文字列などを含む。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;リクエスト対象形式&lt;/th&gt;
          &lt;th&gt;形式例&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;origin form&lt;/td&gt;
          &lt;td&gt;- POST / HTTP/1.1&lt;br&gt;- GET /background.png HTTP/1.0&lt;br&gt;- HEAD /test.html?query=alibaba HTTP/1.1&lt;br&gt;- OPTIONS /anypage.html HTTP/1.0&lt;/td&gt;
          &lt;td&gt;一般的な形式&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;absolute form&lt;/td&gt;
          &lt;td&gt;GET &lt;a href=&#34;http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt; HTTP/1.1&lt;/td&gt;
          &lt;td&gt;プロキシで GET するときに使用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;authority form&lt;/td&gt;
          &lt;td&gt;CONNECT developer.mozilla.org:80 HTTP/1.1&lt;/td&gt;
          &lt;td&gt;CONNECT で使用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;asterisk form&lt;/td&gt;
          &lt;td&gt;OPTIONS * HTTP/1.1&lt;/td&gt;
          &lt;td&gt;OPTIONS で使用&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;http-プロトコルバージョン&#34;&gt;HTTP プロトコルバージョン&lt;/h3&gt;
&lt;p&gt;HTTP バージョンを示す。一般的には HTTP/1.1 または 2.0 である。&lt;/p&gt;
&lt;h2 id=&#34;http-header-リクエストヘッダー&#34;&gt;HTTP Header (リクエストヘッダー)&lt;/h2&gt;
&lt;p&gt;リクエストヘッダーには 3 つの種類がある。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;ヘッダータイプ&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
          &lt;th&gt;例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;リクエストヘッダー&lt;/td&gt;
          &lt;td&gt;リクエスト本文のデータとは関係しないヘッダー&lt;/td&gt;
          &lt;td&gt;- Host&lt;br&gt;- User-Agent&lt;br&gt;- Accept -&lt;em&gt;&lt;br&gt;- If-&lt;/em&gt;&lt;br&gt;- Referer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;一般ヘッダー&lt;/td&gt;
          &lt;td&gt;取得するリソース&lt;/td&gt;
          &lt;td&gt;- Date&lt;br&gt;- Cache-Control&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;エンティティヘッダー&lt;/td&gt;
          &lt;td&gt;リクエスト本文に適用&lt;/td&gt;
          &lt;td&gt;- Content-Type&lt;br&gt;- Content-Length&lt;br&gt;- Expires&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;http-body-リクエスト本文&#34;&gt;HTTP Body (リクエスト本文)&lt;/h2&gt;
&lt;p&gt;HTTP リクエスト本文はリクエストで送るデータである。&lt;br&gt;
一般的に &lt;code&gt;GET&lt;/code&gt;、&lt;code&gt;HEAD&lt;/code&gt;、&lt;code&gt;DELETE&lt;/code&gt;、&lt;code&gt;OPTIONS&lt;/code&gt; にはリクエスト本文がない。リソースを照会または削除する場合にだけ使う。&lt;br&gt;
リクエスト本文は POST、PUT などでリソースにデータを送信する場合に利用する。&lt;/p&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTP Response (レスポンス)</title>
      <link>https://www.devkuma.com/jp/docs/http/response/</link>
      <pubDate>Tue, 06 Nov 2018 01:34:33 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/response/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-response-messages-レスポンスメッセージ&#34;&gt;HTTP Response messages (レスポンスメッセージ)&lt;/h2&gt;
&lt;p&gt;サーバーはリクエストを受け取ると、次のようなレスポンスメッセージを返す。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-http&#34; data-lang=&#34;http&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;HTTP&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1.1&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;200&lt;/span&gt; &lt;span style=&#34;color:#c00;font-weight:bold&#34;&gt;OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Date&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Sun, 11 Jan 2014 16:06:23 GMT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Server&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Apache/1.3.22 (Unix) (Red-Hat/Linux)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Last-Modified&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Sun, 07 Dec 2013 12:34:18 GMT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;ETag&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;&amp;#34;1dba6-131b-3fd31e4a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Accept-Ranges&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;bytes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Content-Length&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;4891&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Keep-Alive&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;timeout=15, max=100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Connection&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;Keep-Alive&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;Content-Type&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;text/html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;html&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  :
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;html&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;レスポンスメッセージは、レスポンス行(状態行)、HTTP レスポンスヘッダー、ヘッダーの終わりを意味する空行、HTTP 本文で構成される。&lt;/p&gt;
&lt;p&gt;改行コードは Windows 形式の &lt;code&gt;CR LF(&amp;quot;\r\n&amp;quot;)&lt;/code&gt; である。最初の行にはリクエスト行またはレスポンス行があり、ヘッダーは複数行、空行は 1 行、メッセージボディは複数行である。&lt;/p&gt;
&lt;h2 id=&#34;start-line-レスポンス開始ライン&#34;&gt;Start line (レスポンス開始ライン)&lt;/h2&gt;
&lt;p&gt;HTTP レスポンスの開始ライン(状態ライン)には次の 3 つの要素がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP プロトコルバージョン(HTTP リクエストメッセージと同じ)&lt;/li&gt;
&lt;li&gt;Response Status Code(レスポンス状態コード)&lt;/li&gt;
&lt;li&gt;状態文字列&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;レスポンス開始ラインは次の形式で表示される。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[HTTP プロトコルバージョン] [レスポンス状態コード] [状態文字列]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;状態文字列は OK や Not Found のような状態番号の意味と詳細を補うメッセージを返す。&lt;/p&gt;
&lt;h3 id=&#34;response-status-codeレスポンス状態コードと状態文字列&#34;&gt;Response Status Code(レスポンス状態コード)と状態文字列&lt;/h3&gt;
&lt;p&gt;HTTP/1.1 の状態コード定義は &lt;a href=&#34;https://datatracker.ietf.org/doc/html/rfc2616&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC 2616&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt; に規定されており、簡単にまとめると次のとおりである。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;レスポンスコード&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1xx&lt;/td&gt;
          &lt;td&gt;Informational&lt;/td&gt;
          &lt;td&gt;情報提供&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2xx&lt;/td&gt;
          &lt;td&gt;Successful&lt;/td&gt;
          &lt;td&gt;成功レスポンス&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3xx&lt;/td&gt;
          &lt;td&gt;Redirection&lt;/td&gt;
          &lt;td&gt;追加作業(リダイレクト)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4xx&lt;/td&gt;
          &lt;td&gt;Client Error&lt;/td&gt;
          &lt;td&gt;クライアント側エラー&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5xx&lt;/td&gt;
          &lt;td&gt;Server Error&lt;/td&gt;
          &lt;td&gt;サーバー側エラー&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;1xx、2xx、3xx コードはサーバーと User Agent 間の状態を表すため、一般ユーザーがその内容を見ることは少ないが、4xx、5xx コードは一般ユーザーもよく目にする内容である。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;レスポンスコード&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;100&lt;/td&gt;
          &lt;td&gt;Continue&lt;/td&gt;
          &lt;td&gt;クライアントから一部のリクエストを受け取り、残りの情報を続けて要求する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;101&lt;/td&gt;
          &lt;td&gt;Switching protocols&lt;/td&gt;
          &lt;td&gt;プロトコル切り替え。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;200&lt;/td&gt;
          &lt;td&gt;OK&lt;/td&gt;
          &lt;td&gt;リクエストが正常に実行された。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;201&lt;/td&gt;
          &lt;td&gt;Created&lt;/td&gt;
          &lt;td&gt;リクエストが成功し、サーバーが新しいリソースを作成した。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;202&lt;/td&gt;
          &lt;td&gt;Accepted&lt;/td&gt;
          &lt;td&gt;Web サーバーがリクエストを受け付けたが、まだ処理していない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;204&lt;/td&gt;
          &lt;td&gt;No content&lt;/td&gt;
          &lt;td&gt;サーバーがリクエストを正常に処理したが、コンテンツを提供しない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;206&lt;/td&gt;
          &lt;td&gt;Partial content&lt;/td&gt;
          &lt;td&gt;サーバーが GET リクエストの一部だけを正常に処理した。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;301&lt;/td&gt;
          &lt;td&gt;Moved permanently&lt;/td&gt;
          &lt;td&gt;要求したデータが変更後の別 URL に移動した。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;302&lt;/td&gt;
          &lt;td&gt;Found temporarily&lt;/td&gt;
          &lt;td&gt;要求したデータを一時 URL で見つけた。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;304&lt;/td&gt;
          &lt;td&gt;Not modified&lt;/td&gt;
          &lt;td&gt;更新されておらず、ローカルキャッシュ情報を利用した。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;400&lt;/td&gt;
          &lt;td&gt;Bad request&lt;/td&gt;
          &lt;td&gt;リクエストが不正である。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;401&lt;/td&gt;
          &lt;td&gt;Unauthorized&lt;/td&gt;
          &lt;td&gt;認証されていない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;403&lt;/td&gt;
          &lt;td&gt;Forbidden&lt;/td&gt;
          &lt;td&gt;アクセスが許可されていない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;404&lt;/td&gt;
          &lt;td&gt;Not found&lt;/td&gt;
          &lt;td&gt;要求したページがない。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;405&lt;/td&gt;
          &lt;td&gt;Method not allowed&lt;/td&gt;
          &lt;td&gt;許可されていない HTTP Method を使用した。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;408&lt;/td&gt;
          &lt;td&gt;Request timeout&lt;/td&gt;
          &lt;td&gt;リクエストがタイムアウトした。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;500&lt;/td&gt;
          &lt;td&gt;Internal server error&lt;/td&gt;
          &lt;td&gt;サーバー内部エラー。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;502&lt;/td&gt;
          &lt;td&gt;Bad Gateway&lt;/td&gt;
          &lt;td&gt;ゲートウェイが不正である。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;503&lt;/td&gt;
          &lt;td&gt;Service unavailable&lt;/td&gt;
          &lt;td&gt;サービス提供不可。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;504&lt;/td&gt;
          &lt;td&gt;Gateway timeout&lt;/td&gt;
          &lt;td&gt;ゲートウェイがタイムアウトした。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;505&lt;/td&gt;
          &lt;td&gt;HTTP version not supported&lt;/td&gt;
          &lt;td&gt;その HTTP バージョンはサポートされていない。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;http-header-レスポンスヘッダー&#34;&gt;HTTP Header (レスポンスヘッダー)&lt;/h2&gt;
&lt;p&gt;レスポンスヘッダーには次の 3 つの種類がある。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;ヘッダータイプ&lt;/th&gt;
          &lt;th&gt;説明&lt;/th&gt;
          &lt;th&gt;例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;レスポンスヘッダー&lt;/td&gt;
          &lt;td&gt;レスポンス本文のデータとは関係しないヘッダー&lt;/td&gt;
          &lt;td&gt;- Location&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;一般ヘッダー&lt;/td&gt;
          &lt;td&gt;取得するリソース&lt;/td&gt;
          &lt;td&gt;- Date&lt;br&gt;- Cache-Control&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;エンティティヘッダー&lt;/td&gt;
          &lt;td&gt;レスポンス本文に適用&lt;/td&gt;
          &lt;td&gt;- Content-Type&lt;br&gt;- Content-Length&lt;br&gt;- Expires&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;http-body-レスポンス本文&#34;&gt;HTTP Body (レスポンス本文)&lt;/h2&gt;
&lt;p&gt;リソース(ファイル)の内容を含む。&lt;/p&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTP Header (ヘッダー)</title>
      <link>https://www.devkuma.com/jp/docs/http/header/</link>
      <pubDate>Tue, 06 Nov 2018 01:34:33 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/header/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-header-ヘッダー&#34;&gt;HTTP Header (ヘッダー)&lt;/h2&gt;
&lt;p&gt;HTTP ヘッダーは、HTTP リクエストとレスポンスで交換されるメタデータである。メッセージの解釈方法、キャッシュ、受け入れ可能なコンテンツタイプ、認証情報、接続動作、Content-Length やエンコーディングなどのエンティティ情報を表す。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;カテゴリ&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;リクエスト&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;レスポンス&lt;/th&gt;
          &lt;th&gt;ヘッダー&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;一般ヘッダー&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;Cache-Control, Connection, Date, Pragma, Trailer, Transfer-Encoding, Upgrade, Via, Warning&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;リクエストヘッダー&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td&gt;Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, If-Match,&lt;br&gt;If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max Forwards, Proxy-Authorization, Range,&lt;br&gt;Referer, TE, User-Agent&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;レスポンスヘッダー&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;×&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;Accept-Ranges, Age, ETag, Location, Proxy-Authenticate, Retry-After, Server, Vary, WWW-Authenticate&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;エンティティヘッダー&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;○&lt;/td&gt;
          &lt;td&gt;Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range,&lt;br&gt;Content-Type, Expires, Last-Modified, extension-header&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;主なリクエストヘッダー&#34;&gt;主なリクエストヘッダー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Accept&lt;/code&gt;: ブラウザーが受信できるデータ形式(MIME タイプ)をサーバーに伝える。&lt;code&gt;*&lt;/code&gt; は「すべて」を意味する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Charset&lt;/code&gt;: ブラウザーが受信可能な文字セットをサーバーに伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Encoding&lt;/code&gt;: ブラウザーが受信可能なエンコーディング方式をサーバーに伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept-Language&lt;/code&gt;: ブラウザーが受信可能な言語をサーバーに伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Authorization&lt;/code&gt;: 認証が必要なリソースへの認証情報を伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Host&lt;/code&gt;: リクエストが送信されるサーバーのホスト名とポート番号を指定する。HTTP/1.1 で唯一の必須ヘッダーである。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;If-Match&lt;/code&gt;、&lt;code&gt;If-None-Match&lt;/code&gt;、&lt;code&gt;If-Modified-Since&lt;/code&gt;、&lt;code&gt;If-Unmodified-Since&lt;/code&gt;、&lt;code&gt;If-Range&lt;/code&gt;: キャッシュ検証や部分リクエストで使われる条件付きリクエストヘッダーである。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Range&lt;/code&gt;: サーバーにエンティティの一部だけを要求する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Referer&lt;/code&gt;: このリクエストの元になったページの URL を伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;User-Agent&lt;/code&gt;: クライアントアプリケーション名、ブラウザー、OS、バージョン、プラットフォームなどの情報を伝える。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主なレスポンスヘッダー&#34;&gt;主なレスポンスヘッダー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Accept-Ranges&lt;/code&gt;: Range リクエストで使用可能な単位をクライアントに伝える。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Age&lt;/code&gt;: エンティティが生成されてからの推定経過時間(秒)を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ETag&lt;/code&gt;: エンティティとそのバージョンを一意に識別する識別子を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Location&lt;/code&gt;: リダイレクト先 URL を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Proxy-Authenticate&lt;/code&gt;: プロキシサーバーとクライアント間で認証が必要であることを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Retry-After&lt;/code&gt;: &lt;code&gt;503 Service Unavailable&lt;/code&gt; や 3xx リダイレクトとともに返され、再試行時期を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Server&lt;/code&gt;: サーバー情報をブラウザーに返す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Vary&lt;/code&gt;: サーバー主導型ネゴシエーションで使用されたヘッダー情報を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WWW-Authenticate&lt;/code&gt;: 認証が必要であることを示す。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主なエンティティヘッダーと一般ヘッダー&#34;&gt;主なエンティティヘッダーと一般ヘッダー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Allow&lt;/code&gt;: リクエスト URL に示されたリソースで使用できるメソッド一覧を提供する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cache-Control&lt;/code&gt;: キャッシュに関する指示を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connection&lt;/code&gt;: &lt;code&gt;Keep-Alive&lt;/code&gt; や &lt;code&gt;close&lt;/code&gt; など、持続接続の動作を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Encoding&lt;/code&gt;: gzip などのコンテンツエンコーディング方式を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Language&lt;/code&gt;: コンテンツの言語を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Length&lt;/code&gt;: コンテンツ(メッセージ本文)の長さをバイト単位で示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Location&lt;/code&gt;: コンテンツが別 URL でもアクセス可能な場合、その URL を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-MD5&lt;/code&gt;: 通信中にコンテンツが変更されていないか確認するためのチェックデータを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Range&lt;/code&gt;: 送信するコンテンツの範囲を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Type&lt;/code&gt;: リソースの MIME タイプを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date&lt;/code&gt;: レスポンスを返す時刻を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Expires&lt;/code&gt;: エンティティの有効期限を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Last-Modified&lt;/code&gt;: エンティティが最後に更新された時刻を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Transfer-Encoding&lt;/code&gt;: 転送に使用されるエンコーディング形式を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Via&lt;/code&gt;: メッセージの伝達経路を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Warning&lt;/code&gt;: 状態行に追加される警告コードとメッセージを伝える。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;仮想ホスト&#34;&gt;仮想ホスト&lt;/h2&gt;
&lt;p&gt;HTTP/1.1 では仮想ホストがサポートされる。HTTP/1.1 のクライアントは &lt;code&gt;Host&lt;/code&gt; ヘッダーでホスト名を送信しなければならない。サーバーは仮想ホストに対応するコンテンツを応答する。これにより 1 台のサーバーで複数の Web サイトをサポートできる。&lt;/p&gt;
&lt;h2 id=&#34;持続的な接続keep-alive&#34;&gt;持続的な接続(Keep-Alive)&lt;/h2&gt;
&lt;p&gt;初期の HTTP は、HTTP リクエストを送るたびに新しいソケット接続を作っていた。この方法は効率的ではない。持続接続は、1 つの接続内で複数のリクエストを送ることでこの非効率を解決する。&lt;/p&gt;
&lt;h2 id=&#34;チャンクchunked&#34;&gt;チャンク(chunked)&lt;/h2&gt;
&lt;p&gt;CGI 結果の返却でコンテンツを生成するときにコンテンツ長が分からない場合など、サーバーはチャンク形式のデータを返すことができる。チャンク形式のデータでは、連続データのバイト数が 16 進数で示される。&lt;code&gt;0&lt;/code&gt; はデータの終わりを意味する。&lt;/p&gt;
&lt;h2 id=&#34;basic-認証&#34;&gt;BASIC 認証&lt;/h2&gt;
&lt;p&gt;HTTP Basic 認証を使用すると、サーバーはクライアントのリクエストに対して &lt;code&gt;WWW-Authenticate&lt;/code&gt; ヘッダーを返す。クライアントはログイン名とパスワードを入力させ、それをエンコードして再度コンテンツを要求する。&lt;/p&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTP Cookie (クッキー)</title>
      <link>https://www.devkuma.com/jp/docs/http/cookie/</link>
      <pubDate>Mon, 27 Dec 2021 18:02:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/cookie/</guid>
      <description>
        
        
        &lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;Cookie(クッキー)は次のような機能を作るために使用する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;訪問者がそのページに何回訪問したかを記録して表示する。&lt;/li&gt;
&lt;li&gt;Web サービスで訪問者が最近訪問したページを記録し、次回訪問時にそのページを表示する。&lt;/li&gt;
&lt;li&gt;掲示板やチャットで入力したユーザー名を記録し、次回訪問時にユーザー名の入力を省略する。&lt;/li&gt;
&lt;li&gt;ログインでセッションを維持する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下の仕様書が公開されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tools.ietf.org/html/rfc2109&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC2109&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt; (1997 年 2 月)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tools.ietf.org/html/rfc2965&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC2965&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt; (2000 年 10 月)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tools.ietf.org/html/rfc6265&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC6265&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt; (2011 年 4 月)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このようなデータは CGI などを利用してサーバー側に記録することもあるが、Cookie を利用することでクライアント側、つまりブラウザーを起動する側のハードディスクに Cookie 情報データを記録することもある。&lt;/p&gt;
&lt;h2 id=&#34;cookie-情報が保存されるフォルダーとファイル&#34;&gt;Cookie 情報が保存されるフォルダーとファイル&lt;/h2&gt;
&lt;p&gt;Cookie 情報が保存されるファイルは OS やブラウザーのバージョンによって異なる。&lt;/p&gt;
&lt;p&gt;Windows の場合は次のようなフォルダーやファイルに記録される。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- C:\Document and Settings\(UserName)\Cookies
- C:\Program Files\Netscape\Users\(UserName]\cookies.txt
- C:\Program Files\Netscape\Navigator\cookies.txt
- C:\Windows\Cookies\~.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;macOS の Chrome の場合は以下に保存される。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- ~/Library/Application Support/Google/Chrome/Default/Cookies
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cookie-の書き込み&#34;&gt;Cookie の書き込み&lt;/h2&gt;
&lt;p&gt;JavaScript を使用して Cookie を設定するときは次のようにする。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;document&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cookie&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;~&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HTML で指定する場合は次のようにする。この方法は推奨されない。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;meta&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;http-equiv&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Set-Cookie&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#c4a000&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;~&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;~&lt;/code&gt; 部分には次の形式の文字列を指定する。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NAME=値; expires=値; domain=値; path=値; secure
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;NAME=値;&lt;/code&gt; 以外は任意である。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;パラメーター&lt;/th&gt;
          &lt;th&gt;意味&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;NAME=値&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;任意の名前に任意の値を指定する。セミコロン、カンマ、空白文字、日本語や韓国語などを使う場合は適切な形式でエンコードする。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;expires=値&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;クライアント側に記録される Cookie の有効期限を &lt;code&gt;Thu, 1-Jan-2030 00:00:00 GMT&lt;/code&gt; のような形式で指定する。省略するとブラウザー終了時まで有効である。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;domain=値&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Cookie を発行する Web サーバー名を指定する。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;path=値&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;ここで指定したパス名と一致するページを閲覧するとき、ブラウザーは保存された Cookie 情報をサーバーへ送る。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;secure&lt;/td&gt;
          &lt;td&gt;この変数を入れると、サーバーとの接続が安全な場合にだけ Cookie 情報が送信される。&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;cookie-書き込み例&#34;&gt;Cookie 書き込み例&lt;/h3&gt;
&lt;p&gt;最も簡単な書き込み例は次のとおりである。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Set-Cookie: NAME=devkuma;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;有効期限を指定する場合は次のようにする。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Set-Cookie: NAME=devkuma; Tue, 31-Dec-2030 23:59:59;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cookie-の読み取り&#34;&gt;Cookie の読み取り&lt;/h2&gt;
&lt;p&gt;JavaScript を使用して Cookie 値を読むには、&lt;code&gt;document.cookie&lt;/code&gt; の値を参照する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;alert&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;document&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cookie&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTPS</title>
      <link>https://www.devkuma.com/jp/docs/http/https/</link>
      <pubDate>Thu, 18 Aug 2022 18:04:25 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/https/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-と-https&#34;&gt;HTTP と HTTPS&lt;/h2&gt;
&lt;h3 id=&#34;http&#34;&gt;HTTP&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HTTP はテキストの交換であり、HTML ページもテキストである。&lt;/li&gt;
&lt;li&gt;バイナリデータではなく単純なテキストを送受信するため、誰かがネットワーク上で信号を傍受すると内容が露出する。このようなセキュリティ上の問題を解決するために生まれたものが HTTPS である。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;https&#34;&gt;HTTPS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS は、インターネット上の情報を暗号化する SSL(Secure Socket Layer)プロトコルを利用して、クライアントとサーバーがデータを送受信する通信規約である。&lt;/li&gt;
&lt;li&gt;HTTPS は HTTP テキストを暗号化するものである。&lt;/li&gt;
&lt;li&gt;HTTPS の S は Secure Socket、つまり安全な通信網を意味する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;https-暗号化の原理&#34;&gt;HTTPS 暗号化の原理&lt;/h2&gt;
&lt;p&gt;HTTP の暗号化原理の核心は公開鍵暗号方式である。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;証明書を発行し、送信するメッセージを公開鍵で暗号化するようにしている。&lt;/li&gt;
&lt;li&gt;暗号化されたメッセージは秘密鍵がなければ復号できないため、途中で誰も元データを得ることはできない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;https-の特徴&#34;&gt;HTTPS の特徴&lt;/h2&gt;
&lt;p&gt;HTTPS は SSL/TLS の上に HTTP を実装したものである。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/https-layer.jpeg&#34; alt=&#34;HTTP,HTTPS Layer&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主な機能&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;暗号化(Encryption)&lt;/li&gt;
&lt;li&gt;認証(Authentication)&lt;/li&gt;
&lt;li&gt;変更検知など&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;URI Scheme 接頭辞&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用ポート&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL が &lt;code&gt;http&lt;/code&gt; ではなく &lt;code&gt;https&lt;/code&gt; URI Scheme 接頭辞を持つ場合、通常の HTTP 80 番ではなく HTTPS 443 番ポートを使用する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;標準&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ietf.org/rfc/rfc2818.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC 2818&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ssltls&#34;&gt;SSL/TLS&lt;/h3&gt;
&lt;p&gt;HTTP 通信で暗号化方式である SSL(Secure Sockets Layer)や TLS(Transport Layer Security)を利用することで、Web サイトを安全に使用できる。&lt;/p&gt;
&lt;p&gt;SSL と TLS は同じものである。Netscape によって SSL が発明され、広く使われるようになった後、標準化機関である IETF の管理に移行し、TLS という名前に変わった。TLS 1.0 は SSL 3.0 を継承する。ただし TLS という名前より SSL という名前の方がはるかに多く使われている。&lt;/p&gt;
&lt;h2 id=&#34;https-の安全確保の仕組み&#34;&gt;HTTPS の安全確保の仕組み&lt;/h2&gt;
&lt;p&gt;SSL/TLS では、以下の 3 つの仕組みによって Web サイトの安全性を確保する。&lt;/p&gt;
&lt;h3 id=&#34;盗聴防止暗号化通信&#34;&gt;盗聴防止(暗号化通信)&lt;/h3&gt;
&lt;p&gt;Web サイトの閲覧では複数のサーバーを経由するため、第三者は比較的簡単に通信内容を傍受できる。&lt;br&gt;
仮に傍受されても内容を解読できないようにデータを暗号化して転送することで、第三者からの盗聴を防止する。&lt;/p&gt;
&lt;h3 id=&#34;改ざん防止&#34;&gt;改ざん防止&lt;/h3&gt;
&lt;p&gt;インターネットショッピングで商品の個数を書き換えるようなデータ改ざん対策として「メッセージダイジェスト」が利用される。&lt;br&gt;
メッセージダイジェストは特定データから固有の短いデータ(ハッシュ値)を求める計算である。データ送受信時にハッシュ値を比較することで改ざんを検出できる。&lt;/p&gt;
&lt;h3 id=&#34;なりすまし防止&#34;&gt;なりすまし防止&lt;/h3&gt;
&lt;p&gt;Web サーバーに「SSL サーバー証明書」という電子証明書を配置し、接続時に検証することで Web サイト運営者の身元を確認できる。&lt;br&gt;
信頼できない発行元の証明書が利用されている場合、Web ブラウザー上に警告画面が表示される。&lt;/p&gt;
&lt;h2 id=&#34;https-のセキュリティ動作方式&#34;&gt;HTTPS のセキュリティ動作方式&lt;/h2&gt;
&lt;p&gt;クライアント(Web ブラウザー)で通常の http ではなく https Scheme を持つ URL アドレスを入力すると、Web サーバーの 80 番ではなく 443 番ポートへ TCP 接続し、バイナリ形式のいくつかのセキュリティパラメーターを交換する(ハンドシェイク、鍵交換)。その後、関連する HTTPS コマンドが実行される。&lt;/p&gt;
&lt;h3 id=&#34;https-交換&#34;&gt;HTTPS 交換&lt;/h3&gt;
&lt;p&gt;HTTPS で通信を開始するには、大きく 4 つのフェーズの交換を行う。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;暗号化方式の決定&lt;/li&gt;
&lt;li&gt;通信相手の証明&lt;/li&gt;
&lt;li&gt;鍵交換&lt;/li&gt;
&lt;li&gt;暗号化方式の確認&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;HTTPS におけるこの 4 段階の相互作用を「SSL/TLS ハンドシェイク」と呼ぶ。&lt;/p&gt;
&lt;h2 id=&#34;https-のサーバー証明書&#34;&gt;HTTPS のサーバー証明書&lt;/h2&gt;
&lt;p&gt;サーバー証明書は、サーバーとクライアント間で暗号化通信を行うための電子証明書であり、認証局から発行される。&lt;/p&gt;
&lt;p&gt;X.509 に基づく証明書で、証明書に Web サイト情報が追加される。&lt;/p&gt;
&lt;h3 id=&#34;サーバー証明書に含まれる主なフィールド&#34;&gt;サーバー証明書に含まれる主なフィールド&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;証明書シリアル番号および有効期間&lt;/li&gt;
&lt;li&gt;Web サイトの名前&lt;/li&gt;
&lt;li&gt;Web サイトの DNS ホスト名(FQDN)&lt;/li&gt;
&lt;li&gt;Web サイトの公開鍵&lt;/li&gt;
&lt;li&gt;署名機関(認証局)の名前&lt;/li&gt;
&lt;li&gt;署名機関(認証局)のデジタル署名など&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.ktword.co.kr/test/view/view.php?m_temp1=3132&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTPS Secure Hypertext Transfer Protocol HTTP セキュリティ階層実装&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://opentutorials.org/course/228/4894&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTPS と SSL 証明書 | 生活コーディング&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>HTTP 2.0</title>
      <link>https://www.devkuma.com/jp/docs/http/2_0/</link>
      <pubDate>Fri, 12 Aug 2022 07:47:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/2_0/</guid>
      <description>
        
        
        &lt;h2 id=&#34;http-20&#34;&gt;HTTP 2.0&lt;/h2&gt;
&lt;p&gt;HTTP 2.0 とも呼ばれる HTTP/2 は Hypertext Transfer Protocol Version 2 の略で、2015 年に IETF によって正式に発表された HTTP/1.1(既存標準)の次期バージョンである。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IETF: Internet Engineering Task Force&lt;/strong&gt; は国際インターネット標準化機構を意味し、インターネットの運用、管理、開発について協議し、プロトコルや構造的な事項を分析する標準化作業機関である。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;HTTP/2 はサーバーとクライアント間の TCP コネクション上で動作する。この TCP コネクションを初期化するのはクライアントである。HTTP/2 のリクエストとレスポンスは、長さが定義された 1 つ以上のフレームに格納される。フレーム内のリクエストとレスポンスはストリームを通じて送られ、1 つのストリームが 1 組のリクエストとレスポンスを処理する。1 つのコネクション上に複数のストリームを同時に作成できるため、複数のリクエストとレスポンスを同時に処理できる。&lt;/p&gt;
&lt;h2 id=&#34;spdyスピーディー&#34;&gt;SPDY(スピーディー)&lt;/h2&gt;
&lt;p&gt;SPDY は Google が開発した非標準ネットワークプロトコルである。Web 環境が変化し続ける中で、パケット圧縮と Multiplexing を基盤にインターネット上の転送遅延(latency)問題を解決し、HTTP を高速化するために考案された。&lt;/p&gt;
&lt;p&gt;HTTP/2 はこの SPDY に基づき、HTTP プロトコル Layer の下位の TCP 通信レイヤーに新しい Binary 階層を導入して、HTTP の基盤である TCP 接続の効率性を追求した。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-spdy-layer.png&#34; alt=&#34;SPDY&#34;&gt;&lt;/p&gt;
&lt;p&gt;SPDY の特徴は次のとおりである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;常に TLS 上で動作&lt;/li&gt;
&lt;li&gt;HTTP ヘッダー圧縮&lt;/li&gt;
&lt;li&gt;テキストではなくバイナリプロトコル&lt;/li&gt;
&lt;li&gt;Multiplexing&lt;/li&gt;
&lt;li&gt;Full-duplex interleaving &amp;amp; Prioritization&lt;/li&gt;
&lt;li&gt;Server Push&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SPDY は HTTP/2 の参考規格となったため、多くの構造が似ており、上記の特徴の多くは HTTP/2 にも存在する。&lt;/p&gt;
&lt;h2 id=&#34;主な特徴&#34;&gt;主な特徴&lt;/h2&gt;
&lt;p&gt;主な特徴は性能向上を目的としている。&lt;/p&gt;
&lt;h3 id=&#34;packet-capsulation---パケットカプセル化&#34;&gt;Packet Capsulation - パケットカプセル化&lt;/h3&gt;
&lt;p&gt;HTTP/2 のパケットはより小さな単位にカプセル化され、Frame、Message、Stream という概念が導入される。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-frame-stream-messages.png&#34; alt=&#34;Request multiplexing&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Frame
&lt;ul&gt;
&lt;li&gt;HTTP/2 の通信最小単位で、すべてのパケットには 1 つの Frame Header が含まれる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Message
&lt;ul&gt;
&lt;li&gt;論理的なリクエストまたはレスポンスメッセージに対応するフレーム全体のシーケンスデータである。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stream
&lt;ul&gt;
&lt;li&gt;接続の流れを意味し、構成された接続内で伝達されるバイトの双方向フローである。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-stream.png&#34; alt=&#34;Request multiplexing&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;request-multiplexing---並列リクエスト&#34;&gt;Request Multiplexing - 並列リクエスト&lt;/h3&gt;
&lt;p&gt;HTTP/2 は 1 つの TCP 接続を通じて複数のデータリクエストを並列に送受信できる。&lt;/p&gt;
&lt;p&gt;従来の HTTP/1.x では、1 つの TCP コネクションでリクエストを送ると、そのレスポンスが到着するまで同じ TCP コネクションで次のリクエストを送れなかった。しかし HTTP/2 では 1 つのコネクションに複数のストリームを同時に開けるため、複数のリクエストを同時に送れる。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-request-multiplexing.png&#34; alt=&#34;Request multiplexing&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;header-compression---ヘッダー圧縮&#34;&gt;Header Compression - ヘッダー圧縮&lt;/h3&gt;
&lt;p&gt;HTTP/1.1 までの HTTP ヘッダーは圧縮なしでそのまま送信されていた。HTTP/2 では HTTP メッセージのヘッダーを圧縮し、重複するフィールドを再送信しないように変更された。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-headder-data-compression.png&#34; alt=&#34;HTTP Header Data Compression&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;binary-protocol---バイナリプロトコル&#34;&gt;Binary Protocol - バイナリプロトコル&lt;/h3&gt;
&lt;p&gt;HTTP/2 はテキストプロトコルからバイナリプロトコルへ変更された。HTTP/1.x はリクエストレスポンスサイクルを完了するためにテキスト命令を処理したが、HTTP/2 はバイナリ命令を使用して同じ作業を実行する。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-binary-protocol.png&#34; alt=&#34;Binary protocol&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;server-push---サーバープッシュ&#34;&gt;Server Push - サーバープッシュ&lt;/h3&gt;
&lt;p&gt;HTTP/2 は、サーバーが 1 つのリクエストに対して、クライアントが明示的に要求していない JavaScript、CSS、Font、画像ファイルなど必要になる特定ファイルをレスポンス時に一緒に送信できる。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/http/http-server-push.png&#34; alt=&#34;Server Push&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;stream-prioritization---ストリーム優先順位&#34;&gt;Stream Prioritization - ストリーム優先順位&lt;/h3&gt;
&lt;p&gt;ストリームは優先順位を持つことができる。クライアントは好ましいレスポンス受信方式を指定してレスポンスを受け取ることができる。&lt;/p&gt;
&lt;h2 id=&#34;参照&#34;&gt;参照&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://http2.github.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTP2 | Github&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.dev/performance-http2/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Introduction to HTTP/2&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://factory.dev/blog/http2-difference-from-http1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTP/2: the difference between HTTP/1.1, benefits and how to use it&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>HTTP</category>
      
    </item>
    
    <item>
      <title>CORS</title>
      <link>https://www.devkuma.com/jp/docs/http/cors/</link>
      <pubDate>Thu, 27 May 2021 10:59:45 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/http/cors/</guid>
      <description>
        
        
        &lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;現在の Web ブラウザーでは、1 つの Web サイトが持つ情報が別の悪意ある Web サイトに悪用されることを防ぐため、&lt;a href=&#34;https://www.rfc-editor.org/info/rfc6454&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Same-Origin Policy(同一オリジンポリシー)&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;が適用される。&lt;/p&gt;
&lt;p&gt;たとえば、異なるドメインのバックエンド API とフロントエンド間で通信してリソースを要求すると、Origin(ドメイン、プロトコル、ポート番号)が異なるためエラーが発生する。&lt;code&gt;https://api.devkuma.com/&lt;/code&gt; の Web ページから XHR や Fetch API で &lt;code&gt;https://www.devkuma.com/&lt;/code&gt; のデータを HTTP(S) で読み込もうとするとエラーになる。&lt;/p&gt;
&lt;p&gt;しかし、信頼関係のある Web サイトまで制限してしまうと不便であるため、データアクセスを許可できる Web サイトについては Origin が異なってもアクセスできるようにする CORS(Cross-Origin Resource Sharing)が必要になる。&lt;/p&gt;
&lt;h2 id=&#34;cors-とは&#34;&gt;CORS とは？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cross-Origin Resource Sharing の略で、オリジン間のリソース共有を意味する。&lt;/li&gt;
&lt;li&gt;ブラウザーは異なるオリジン間の通信を原則として禁止しているが、CORS 設定により別オリジン間でも通信できる。&lt;/li&gt;
&lt;li&gt;ブラウザーで見ているページとは別のドメインからデータを受け取ることを許可する方式である。&lt;/li&gt;
&lt;li&gt;セキュリティ上、クロスサイトスクリプティングを防ぐために使用される。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;originオリジンとは&#34;&gt;Origin(オリジン)とは？&lt;/h3&gt;
&lt;p&gt;Web コンテンツの Origin は、そのコンテンツへアクセスするために使われる URL のスキーム(プロトコル)、ホスト(ドメイン)、ポートによって定義される。スキーム、ホスト、ポートがすべて一致する場合にのみ、2 つは同じ Origin と言える。&lt;/p&gt;
&lt;h4 id=&#34;同一-origin-の例&#34;&gt;同一 Origin の例&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://www.devkuma.com/app1/index.html
http://www.devkuma.com/app2/index.html
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;異なる-origin-の例&#34;&gt;異なる Origin の例&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://devkuma.com/app1
https://devkuma.com/app2
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://devkuma.com
http://www.devkuma.com
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://www.devkuma.com
http://www.devkuma.com:8080
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;なぜ-cors-が必要なのか&#34;&gt;なぜ CORS が必要なのか？&lt;/h2&gt;
&lt;p&gt;ブラウザーはセキュリティ上の理由で同一オリジンポリシーを採用している。他の出所から自分のリソースに勝手にアクセスできないようにするためである。&lt;/p&gt;
&lt;p&gt;もし自分がサービスしていないサイトからセッションのリクエストを取得できるなら、そのサイトはセッションを奪取して悪用する可能性がある。ブラウザーはこのようなリクエストを防いでいる。&lt;/p&gt;
&lt;h2 id=&#34;cors-はどのように動作するか&#34;&gt;CORS はどのように動作するか&lt;/h2&gt;
&lt;p&gt;ブラウザーがリソースを要求するとき、追加ヘッダーに Origin、使用するメソッド、含めるヘッダー情報を入れてサーバーへ送信する。サーバーは応答可能な Origin をヘッダーに入れてブラウザーへ返す。ブラウザーはこのヘッダーを確認し、その Origin から要求できるならリソース転送を許可し、不可能ならエラーを発生させる。&lt;/p&gt;
&lt;h2 id=&#34;cors-preflight-リクエスト&#34;&gt;CORS preflight リクエスト&lt;/h2&gt;
&lt;p&gt;HTTP ヘッダーの送受信で構成される仕組みであり、ブラウザーがオリジンを越えた要求への応答にフロントエンド JavaScript コードがアクセスできるかどうかを決定する。&lt;/p&gt;
&lt;h3 id=&#34;request-header-一覧&#34;&gt;Request Header 一覧&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Origin&lt;/code&gt;: どの Origin からアクセスしているかを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Request-Method&lt;/code&gt;: preflight リクエスト時に、実際のリクエストで使用するメソッドをサーバーに知らせる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Request-Headers&lt;/code&gt;: preflight リクエスト時に、実際のリクエストで使用するヘッダーをサーバーに知らせる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;response-header-一覧&#34;&gt;Response Header 一覧&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;: ブラウザーが該当 Origin からリソースへアクセスできるよう許可する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Expose-Headers&lt;/code&gt;: 応答の一部として公開してよいヘッダーを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Max-Age&lt;/code&gt;: preflight リクエスト結果をキャッシュできる時間を示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Allow-Credentials&lt;/code&gt;: credentials が true のとき、リクエストへの応答を公開できるかを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Allow-Methods&lt;/code&gt;: preflight リクエストへの応答として許可されるメソッドを示す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Access-Control-Allow-Headers&lt;/code&gt;: 実際のリクエストで使用できる HTTP ヘッダーを示す。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cors-使用例&#34;&gt;CORS 使用例&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;https://api.devkuma.com&lt;/code&gt; に対して、別 Web サイト &lt;code&gt;https://www.devkuma.com&lt;/code&gt; からの HTTP(S) アクセスを許可する場合を例に説明する。&lt;/p&gt;
&lt;p&gt;単純に GET と POST を許可するには、サーバーが HTTP レスポンスヘッダーに次を追加する。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://www.devkuma.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cookie を許可する場合は、ブラウザーとサーバーの両方で設定が必要である。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://www.devkuma.com
Access-Control-Allow-Credentials: true
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;GET、POST、HEAD 以外のメソッドやカスタムヘッダーを使う場合は、実際の HTTP リクエスト前に OPTIONS の preflight request が行われる。&lt;/p&gt;
&lt;h2 id=&#34;参照&#34;&gt;参照&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;クロスオリジンリソース共有 (CORS)&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hannut91.github.io/blogs/infra/cors&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CORS とは何か? - Yunseok&amp;rsquo;s Dev Blog&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>HTTP</category>
      
      <category>CORS</category>
      
    </item>
    
  </channel>
</rss>
