TL;DR
URI のスキーム、ホスト、ポート番号の 3 つの組。ブラウザなどのユーザエージェントが、権限やアクセスの範囲を決める単位として使う。RFC 6454 で定義されている。
なぜ必要か
RFC 6454 によると、ユーザエージェントは異なるオリジンを互いに隔離し、オリジン間の通信を制御された形でだけ許す。ある URI のコンテンツが別の URI のオブジェクトにアクセスできるのは、2 つの URI が同じオリジンに属するときだけである。この考え方が同一生成元ポリシーである。
仕組み
URI からスキーム、ホスト、ポート番号を取り出し、その 3 つの組をオリジンとする。3 つがすべて一致すれば同じオリジン、1 つでも違えば別のオリジンになる。
例
RFC 6454 の例では、次の URI はすべて同じオリジンである。スキーム、ホスト、ポート番号がどれも同じになる。
http://example.com/
http://example.com:80/
http://example.com/path/file
次の URI は、上とはそれぞれ別のオリジンである。順にポート番号、スキーム、ホストが違う。
http://example.com:8080/
https://example.com:80/
http://www.example.com/
Local Storage や Session Storage のデータは、オリジンごとに保存される。