Nette Documentation Preview

syntax
HTTP 設定
*******

.[perex]
Nette HTTP の設定オプションの概要です。

フレームワーク全体を使用せず、このライブラリのみを使用する場合は、[設定の読み込み方法|bootstrap:]をお読みください。


HTTP ヘッダー
=========

```neon
http:
	# 各リクエストで送信されるヘッダー
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# X-Frame-Options ヘッダーに影響します
	frames: ...      # (string|bool) デフォルトは 'SAMEORIGIN'
```

フレームワークはセキュリティ上の理由から、ヘッダー `X-Frame-Options: SAMEORIGIN` を送信します。これは、ページが同じドメインにある場合にのみ、別のページ内(`<iframe>` 要素内)に表示できることを示します。これは特定の状況(例えば、Facebook アプリケーションを開発している場合)では望ましくない場合があるため、`frames: http://allowed-host.com` または `frames: true` を設定することで動作を変更できます。


Content Security Policy
-----------------------

`Content-Security-Policy`(以下 CSP)ヘッダーを簡単に作成できます。その説明は[CSP の説明|https://content-security-policy.com]にあります。CSP ディレクティブ(例:`script-src`)は、仕様に従って文字列として記述するか、読みやすさのために値の配列として記述できます。その場合、`'self'` のようなキーワードの周りに引用符を書く必要はありません。Nette は `nonce` 値も自動的に生成するため、ヘッダーには例えば `'nonce-y4PopTLM=='` が含まれます。

```neon
http:
	# Content Security Policy
	csp:
		# CSP 仕様に従った形式の文字列
		default-src: "'self' https://example.com"

		# 値の配列
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# スイッチの場合は bool
		upgrade-insecure-requests: true
		block-all-mixed-content: false
```

テンプレートでは `<script n:nonce>...</script>` を使用し、nonce 値は自動的に補完されます。Nette で安全なウェブサイトを作成するのは本当に簡単です。

同様に、`Content-Security-Policy-Report-Only` ヘッダー(CSP と並行して使用可能)と [Feature Policy|https://developers.google.com/web/updates/2018/06/feature-policy] を作成できます:

```neon
http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com
```


HTTP クッキー
---------

[Nette\Http\Response::setCookie() |response#setCookie] メソッドとセッションの一部のパラメータのデフォルト値を変更できます。

```neon
http:
	# パスによるクッキーの到達範囲
	cookiePath: ...          # (string) デフォルトは '/'

	# クッキーを受け入れるドメイン
	cookieDomain: 'example.com'  # (string|domain) デフォルトは未設定

	# HTTPS 経由でのみクッキーを送信しますか?
	cookieSecure: ...        # (bool|auto) デフォルトは auto

	# Nette が CSRF 保護として使用するクッキーの送信を無効にします
	disableNetteCookie: ...  # (bool) デフォルトは false
```

`cookieDomain` 属性は、どのドメインがクッキーを受け入れることができるかを指定します。指定されていない場合、クッキーは設定したのと同じ(サブ)ドメインを受け入れますが、そのサブドメインは*受け入れません*。`cookieDomain` が指定されている場合、サブドメインも含まれます。したがって、`cookieDomain` を指定する方が、省略するよりも制限が緩くなります。

例えば、`cookieDomain: nette.org` の場合、クッキーは `doc.nette.org` のようなすべてのサブドメインでも利用可能です。これは特別な値 `domain`、つまり `cookieDomain: domain` を使用しても達成できます。

`cookieSecure` 属性のデフォルト値 `auto` は、ウェブサイトが HTTPS で実行されている場合、クッキーは `Secure` フラグ付きで送信され、したがって HTTPS 経由でのみ利用可能になることを意味します。


HTTP プロキシ
---------

ウェブサイトが HTTP プロキシの背後で実行されている場合は、HTTPS 経由の接続検出とクライアントの IP アドレスが正しく機能するように、その IP アドレスを指定します。つまり、[Nette\Http\Request::getRemoteAddress() |request#getRemoteAddress] 関数と [isSecured() |request#isSecured] 関数が正しい値を返し、テンプレートで `https:` プロトコルを持つリンクが生成されるようにします。

```neon
http:
	# IP アドレス、範囲(例:127.0.0.1/8)、またはこれらの値の配列
	proxy: 127.0.0.1       # (string|string[]) デフォルトは未設定
```


セッション
=====

[セッション |sessions]の基本設定:

```neon
session:
	# Tracy Bar にセッションパネルを表示しますか?
	debugger: ...        # (bool) デフォルトは false

	# セッションが期限切れになるまでの非アクティブ期間
	expiration: 14 days  # (string) デフォルトは '3 hours'

	# セッションはいつ開始されるべきですか?
	autoStart: ...       # (smart|always|never) デフォルトは 'smart'

	# ハンドラ、SessionHandlerInterface インターフェースを実装するサービス
	handler: @handlerService
```

`autoStart` オプションは、セッションをいつ開始するかを制御します。値 `always` は、アプリケーションの起動時に常にセッションが開始されることを意味します。値 `smart` は、セッションが既に存在する場合、または読み取りまたは書き込みを行いたい場合にのみ、アプリケーションの起動時にセッションが開始されることを意味します。そして最後に、値 `never` はセッションの自動開始を禁止します。

さらに、すべての PHP [セッションディレクティブ|https://www.php.net/manual/en/session.configuration.php](camelCase 形式)と [readAndClose |https://www.php.net/manual/en/function.session-start.php#refsect1-function.session-start-parameters] を設定できます。例:

```neon
session:
	# 'session.name' は 'name' として記述します
	name: MYID

	# 'session.save_path' は 'savePath' として記述します
	savePath: "%tempDir%/sessions"
```


セッションクッキー
---------

セッションクッキーは[他のクッキー |#HTTP クッキー]と同じパラメータで送信されますが、これらを変更できます:

```neon
session:
	# クッキーを受け入れるドメイン
	cookieDomain: 'example.com'   # (string|domain)

	# 他のドメインからのアクセス時の制限
	cookieSamesite: None          # (Strict|Lax|None) デフォルトは Lax
```

`cookieSamesite` 属性は、[他のドメインからのアクセス |nette:glossary#SameSite cookie]時にクッキーが送信されるかどうかに影響します。これは、[クロスサイトリクエストフォージェリ |nette:glossary#Cross-Site Request Forgery CSRF](CSRF)攻撃に対するある程度の保護を提供します。


DI サービス
=======

これらのサービスは DI コンテナに追加されます:

| 名前           | 型                        | 説明
|-----------------------------------------------------
| `http.request`	  | [api:Nette\Http\Request]   | [HTTP リクエスト| request]
| `http.response`	  | [api:Nette\Http\Response]  | [HTTP レスポンス| response]
| `session.session`   | [api:Nette\Http\Session]   | [セッション管理| sessions]

HTTP 設定

Nette HTTP の設定オプションの概要です。

フレームワーク全体を使用せず、このライブラリのみを使用する場合は、設定の読み込み方法をお読みください。

HTTP ヘッダー

http:
	# 各リクエストで送信されるヘッダー
	headers:
		X-Powered-By: MyCMS
		X-Content-Type-Options: nosniff
		X-XSS-Protection: '1; mode=block'

	# X-Frame-Options ヘッダーに影響します
	frames: ...      # (string|bool) デフォルトは 'SAMEORIGIN'

フレームワークはセキュリティ上の理由から、ヘッダー X-Frame-Options: SAMEORIGIN を送信します。これは、ページが同じドメインにある場合にのみ、別のページ内(<iframe> 要素内)に表示できることを示します。これは特定の状況(例えば、Facebook アプリケーションを開発している場合)では望ましくない場合があるため、frames: http://allowed-host.com または frames: true を設定することで動作を変更できます。

Content Security Policy

Content-Security-Policy(以下 CSP)ヘッダーを簡単に作成できます。その説明はCSP の説明にあります。CSP ディレクティブ(例:script-src)は、仕様に従って文字列として記述するか、読みやすさのために値の配列として記述できます。その場合、'self' のようなキーワードの周りに引用符を書く必要はありません。Nette は nonce 値も自動的に生成するため、ヘッダーには例えば 'nonce-y4PopTLM==' が含まれます。

http:
	# Content Security Policy
	csp:
		# CSP 仕様に従った形式の文字列
		default-src: "'self' https://example.com"

		# 値の配列
		script-src:
			- nonce
			- strict-dynamic
			- self
			- https://example.com

		# スイッチの場合は bool
		upgrade-insecure-requests: true
		block-all-mixed-content: false

テンプレートでは <script n:nonce>...</script> を使用し、nonce 値は自動的に補完されます。Nette で安全なウェブサイトを作成するのは本当に簡単です。

同様に、Content-Security-Policy-Report-Only ヘッダー(CSP と並行して使用可能)と Feature Policy を作成できます:

http:
	# Content Security Policy Report-Only
	cspReportOnly:
		default-src: self
		report-uri: 'https://my-report-uri-endpoint'

	# Feature Policy
	featurePolicy:
		unsized-media: none
		geolocation:
			- self
			- https://example.com

HTTP クッキー

Nette\Http\Response::setCookie() メソッドとセッションの一部のパラメータのデフォルト値を変更できます。

http:
	# パスによるクッキーの到達範囲
	cookiePath: ...          # (string) デフォルトは '/'

	# クッキーを受け入れるドメイン
	cookieDomain: 'example.com'  # (string|domain) デフォルトは未設定

	# HTTPS 経由でのみクッキーを送信しますか?
	cookieSecure: ...        # (bool|auto) デフォルトは auto

	# Nette が CSRF 保護として使用するクッキーの送信を無効にします
	disableNetteCookie: ...  # (bool) デフォルトは false

cookieDomain 属性は、どのドメインがクッキーを受け入れることができるかを指定します。指定されていない場合、クッキーは設定したのと同じ(サブ)ドメインを受け入れますが、そのサブドメインは受け入れませんcookieDomain が指定されている場合、サブドメインも含まれます。したがって、cookieDomain を指定する方が、省略するよりも制限が緩くなります。

例えば、cookieDomain: nette.org の場合、クッキーは doc.nette.org のようなすべてのサブドメインでも利用可能です。これは特別な値 domain、つまり cookieDomain: domain を使用しても達成できます。

cookieSecure 属性のデフォルト値 auto は、ウェブサイトが HTTPS で実行されている場合、クッキーは Secure フラグ付きで送信され、したがって HTTPS 経由でのみ利用可能になることを意味します。

HTTP プロキシ

ウェブサイトが HTTP プロキシの背後で実行されている場合は、HTTPS 経由の接続検出とクライアントの IP アドレスが正しく機能するように、その IP アドレスを指定します。つまり、Nette\Http\Request::getRemoteAddress() 関数と isSecured() 関数が正しい値を返し、テンプレートで https: プロトコルを持つリンクが生成されるようにします。

http:
	# IP アドレス、範囲(例:127.0.0.1/8)、またはこれらの値の配列
	proxy: 127.0.0.1       # (string|string[]) デフォルトは未設定

セッション

セッションの基本設定:

session:
	# Tracy Bar にセッションパネルを表示しますか?
	debugger: ...        # (bool) デフォルトは false

	# セッションが期限切れになるまでの非アクティブ期間
	expiration: 14 days  # (string) デフォルトは '3 hours'

	# セッションはいつ開始されるべきですか?
	autoStart: ...       # (smart|always|never) デフォルトは 'smart'

	# ハンドラ、SessionHandlerInterface インターフェースを実装するサービス
	handler: @handlerService

autoStart オプションは、セッションをいつ開始するかを制御します。値 always は、アプリケーションの起動時に常にセッションが開始されることを意味します。値 smart は、セッションが既に存在する場合、または読み取りまたは書き込みを行いたい場合にのみ、アプリケーションの起動時にセッションが開始されることを意味します。そして最後に、値 never はセッションの自動開始を禁止します。

さらに、すべての PHP セッションディレクティブ(camelCase 形式)と readAndClose を設定できます。例:

session:
	# 'session.name' は 'name' として記述します
	name: MYID

	# 'session.save_path' は 'savePath' として記述します
	savePath: "%tempDir%/sessions"

セッションクッキー

セッションクッキーは他のクッキーと同じパラメータで送信されますが、これらを変更できます:

session:
	# クッキーを受け入れるドメイン
	cookieDomain: 'example.com'   # (string|domain)

	# 他のドメインからのアクセス時の制限
	cookieSamesite: None          # (Strict|Lax|None) デフォルトは Lax

cookieSamesite 属性は、他のドメインからのアクセス時にクッキーが送信されるかどうかに影響します。これは、クロスサイトリクエストフォージェリ(CSRF)攻撃に対するある程度の保護を提供します。

DI サービス

これらのサービスは DI コンテナに追加されます:

名前 説明
http.request Nette\Http\Request HTTP リクエスト
http.response Nette\Http\Response HTTP レスポンス
session.session Nette\Http\Session セッション管理