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|null) 既定は 'SAMEORIGIN'

安全のために、フレームワークは X-Frame-Options: SAMEORIGIN のヘッダーを送ります。これは、ページを別のページの中(<iframe> 要素の中)に表示してよいのは同じドメインの場合だけだと伝えます。場面によっては(たとえば Facebook のアプリケーションを作っているとき)これが望ましくないこともあるので、frames: http://allowed-host.com で特定のホストを許したり、frames: true でどこからでも埋め込めるようにしたり(ヘッダーが省かれます)、frames: false で完全に禁じたり(X-Frame-Options: DENY)して、振る舞いを変えられます。

既定では Nette は X-Powered-By: Nette Framework 3Content-Type: text/html; charset=utf-8 のヘッダーも送ります。これらの既定のものも含め、どのヘッダーも値を空の文字列にすれば取り除けます。

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[]) 既定では未設定

HTTPS を強制する

リクエストのスキームを無条件に HTTPS にします。これは、TLS を終端しつつ X-Forwarded-Proto のヘッダーを渡さない負荷分散装置やリバースプロキシの後ろで動く、HTTPS だけのサイトに役立ちます。そうした場合、標準の HTTPS の判別は(HTTP のプロキシを設定していても)働かないからです。

http:
	# すべてのリクエストで HTTPS のスキームを強制します
	forceHttps: true       # (bool) 既定は false

セッション

セッションの基本の設定です。

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 セッションの管理
http.requestFactory Nette\Http\RequestFactory HTTP のリクエストを作るファクトリ
バージョン: 4.x