DrupalがX-Generator:Drupal 8で返されるCMSタイプとバージョンの開示を削除したい( https:// www.drupal.org)ヘッダー。
次のコードを使用していますが、x-generatorヘッダーは削除されますが、X-Generator:Drupal 8( https://www.drupal.org )ブラウザーのヘッダー応答で。
function xxx_page_attachments_alter(&$data, &$context1 = NULL, &$context2 = NULL) {
foreach ($data['#attached']['html_head'] as $key => $attachment) {
if ($attachment[1] == 'system_meta_generator') {
unset($data['#attached']['html_head'][$key]);
}
}
}
コードを修正するにはどうすればよいですか?
最も簡単な方法は、カスタムEventSubscriberのヘッダーを削除することです。
$response->headers->remove('X-Generator');
例については https://drupal.stackexchange.com/a/201297/47547 を参照してください。
それはまさにあなたが尋ねている質問ではありませんが...
自分のサイトの実行に使用しているものを不明瞭にする方法はありますか? この問題への取り組みを検討しているときに役立つ場合に備えて、ここに回答として追加します。
以下のリンクを確認してください、それを行うために作成されたカスタムモジュール。
@gauravも機能するはずです。私にとってはうまくいくようです
function THEMENAME_page_attachments_alter(&$data) {
foreach ($data['#attached']['html_head'] as $key => $attachment) {
if ($attachment[1] == 'system_meta_generator') {
unset($data['#attached']['html_head'][$key]);
}
}
}
これを行う最も簡単な方法は、response_generator_subscriber
追加を担当するサービスX-Generator
そもそも。それはすべてですので、(コアのテスト以外の)何もそれに依存するべきではありません。
単にDrupal\Core\DependencyInjection\ServiceProviderInterface
次のようにモジュールに実装します。
my_module/src/MyModuleServiceProvider.php:
<?php
namespace Drupal\ws_main;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;
/**
* Remove the service adding the X-Generator header.
*/
class MyModuleServiceProvider extends ServiceProviderBase {
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
$container->removeDefinition('response_generator_subscriber');
}
}
注意する必要があるのは、クラス(およびファイル名)がモジュールのマシン名のキャメルケースバージョン(最初の文字は大文字、アンダースコアを削除して次の文字を大文字にする)である必要があるということです サービスの変更に関するドキュメント 。キャッシュをクリアした後(サービスレジストリを再構築した場合)、この方法では、すべての応答でヘッダーを追加してから削除する場合と比較して、パフォーマンスがわずかに向上するはずです。