<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MDN &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/tag/mdn/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Sun, 28 Jan 2024 06:58:22 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>MDN &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CORSがわからないからちゃんと勉強してみた</title>
		<link>https://otonan-syusyoku.work/archives/1618</link>
					<comments>https://otonan-syusyoku.work/archives/1618#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 28 Jan 2024 06:53:06 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[MDN]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1618</guid>

					<description><![CDATA[こんにちは！今日は、Web開発でよく聞くけど意外と理解しづらいCORS（Cross-Origin Resource Sharing）について、一緒に学んでいこうと思います。 Webの世界は複雑で、ちょっとしたことが大きな [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんにちは！今日は、Web開発でよく聞くけど意外と理解しづらい<strong>CORS（Cross-Origin Resource Sharing）</strong>について、一緒に学んでいこうと思います。</p>
<p>Webの世界は複雑で、ちょっとしたことが大きな違いを生むんですよね。CORSもその一つ。</p>
<p>さあ、一緒にCORSを理解してきましょう〜</p>
<h2>CORSって何？</h2>
<p>まず、CORSって何？って話から始めます。</p>
<p>CORSは、Webページが異なるオリジン（つまり、異なるドメイン、プロトコル、またはポート）のリソースにアクセスする際のセキュリティメカニズムです。</p>
<p>つまり、あなたのサイトが他のサイトのデータを安全に扱うためのルールのこと。これがないと、セキュリティリスクが高まります。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr style="background-color: #7ab1f0;">
<td style="width: 50%;"></td>
<td style="width: 50%;"></td>
</tr>
<tr>
<td style="width: 50%;">ホスト (Host)</td>
<td style="width: 50%;">インターネット上で情報やリソースを提供するコンピューターやサーバー。各ホストには独自のIPアドレスがあり、インターネット上で特定の位置を持つ。</p>
<p>例：ウェブサイトをホストするサーバー</td>
</tr>
<tr>
<td style="width: 50%;">ドメイン (Domain)</td>
<td style="width: 50%;">インターネット上のアドレスの一部。ウェブサイトや電子メールアドレスを識別するために使われる。人間が理解しやすい形式でサーバーを識別するために用いられる。</p>
<p>例：「example.com」</td>
</tr>
<tr>
<td style="width: 50%;">オリジン (Origin)</td>
<td style="width: 50%;">ウェブページの起源を示す概念。スキーム（プロトコル）、ホスト（ドメイン名）、ポートの組み合わせで定義される。</p>
<p>例：「https://example.com:80」</td>
</tr>
</tbody>
</table>
<h2>なぜCORSが必要なの？</h2>
<p>Webはオープンでつながっているけど、同時にセキュリティも重要です。</p>
<p>例えば、あなたがログインしているサイトAから、悪意のあるサイトBがデータを盗もうとするといったリスクがあります。</p>
<p>CORSは、このような不正なアクセスを防ぐために存在しているんです。<br />
安全なWebのためには、必要不可欠なんですよ。</p>
<h2>CORSの仕組み</h2>
<p>CORSの基本は<span class="sc_marker blue"><strong>「信頼できるオリジンからのリクエストのみ許可する」</strong></span>ということ。</p>
<p>これは、サーバー側で設定され、ブラウザがこの設定に従います。</p>
<p>サーバーは、リクエストが来たときに「このオリジンからのリクエストはOKかな？」とチェック。</p>
<p>OKならリソースを提供し、ダメなら拒否。これで、安全にデータのやりとりができるようになります。</p>
<h3>簡単なCORSの例</h3>
<p>例えば、あなたのサイト（example.com）が、他のサイト（api.example.com）からデータを取得したい場合があるとします。</p>
<p>もし、api.example.comがCORSでexample.comを許可していれば、問題なくデータのやりとりができます。</p>
<p>でも、許可されていなければ、「CORSエラー」が発生してアクセスできないんです。</p>
<h3>CORSをどう扱う？</h3>
<p>開発者としては、CORSは頭痛の種になることも。</p>
<p>しかし、適切に設定することでセキュリティを確保しつつ、必要なデータ交換も可能になります。サーバーの設定を見直したり、必要に応じてオリジンを許可リストに追加することが大切です。</p>
<h2>設定方法</h2>
<h3>素のPHP</h3>
<p>※WEBサーバーにて設定することも可能ですが、今回はPHPでの実装を想定。</p>
<pre class="line-numbers"><code class="language-php">header("Access-Control-Allow-Origin: http://example.com");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With");

/**
* - http://example.com からのアクセスを許可
* - 許可メソッドは GET, POST, PUT, DELETE
* - <span>リクエスト中に許可されるHTTPヘッダー
*     - Content-Type（リソースのメディアタイプ
*     - X-Requested-With（通常、Ajaxリクエストを識別するために使用される）
*/</span></code></pre>
<h3>Laravel</h3>
<p>※<span>Laravel 7.x以降ではデフォルトでCORS設定が組み込まれているっぽい。</span></p>
<pre class="line-numbers"><code class="language-php">return [
    'paths' =&gt; ['api/*'],
    'allowed_methods' =&gt; ['*'],
    'allowed_origins' =&gt; ['http://example.com'],
    'allowed_origins_patterns' =&gt; [],
    'allowed_headers' =&gt; ['*'],
    'exposed_headers' =&gt; [],
    'max_age' =&gt; 0,
    'supports_credentials' =&gt; false,

    /**
     * - http://example.com からのアクセスを許可
     *   'allowed_origins' =&gt; ['http://example.com']
     *   この設定は、http://example.com からのリクエストを許可します。
     * 
     * - 許可されるHTTPメソッド
     *   'allowed_methods' =&gt; ['*']
     *   この設定は、すべてのHTTPメソッドを許可します。特定のメソッドのみを許可する場合は、
     *   ['GET', 'POST', 'PUT', 'DELETE'] のように配列を編集します。
     * 
     * - 許可されるHTTPヘッダー
     *   'allowed_headers' =&gt; ['*']
     *   この設定は、すべてのHTTPヘッダーを許可します。特定のヘッダーのみを許可する場合は、
     *   必要なヘッダーを配列に追加します。
     */
];
</code></pre>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>CORSは、Webの安全性を保つための重要なメカニズム。最初は複雑に感じるかもしれませんが、基本を理解すれば、より安全で効果的なWebアプリケーション開発が可能になります。</p>
<p>これにてCORSの基本を何となく理解！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1618/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
