web-dev-qa-db-ja.com

ブラウザーがサイト上にあるときに、ブラウザーがどのファイル名を読み込んでいるかを確認するにはどうすればよいですか?

ドメインのホームページを表示するために、ブラウザがどのファイルを読み取ったかを知ることは有益です。

ブラウザがgoogle.comのようなものに行き、index.htmlなどのデフォルトのファイル名/タイプを探し始め、おそらくindex.htmなど、他の数十個のファイルのリストを探し始めます。

ブラウザーが実際にレンダリングを開始したファイルに興味があります(ブラウザーウィンドウを右クリックして[名前を付けて保存]をクリックしてもファイル名が表示されません)。ドメインに存在するファイル名(index.phpなど)は、ブラウザが探した最初のファイル試行の1つでしたが、より典型的なもの(例:placeholder.html)です。

6
Tony DiNitto

あなたのブラウザはロードしませんanyファイル、それrequests a resourceサーバーはそれを提供します彼の裁量で(以下で詳細に説明します)。

ブラウザのツールバーにgoogle.comと入力すると、ブラウザは最初にhttp://またはhttpsのいずれかのプロトコルを追加します。次に、ブラウザはgoogle.com172.217.19.206)に属するIPアドレスを検索します。ブラウザは適切なポートでそのサーバーとのソケットを確立します(httpの場合は80、httpsの場合は443)。

その後、ブラウザは次のリクエストをサーバーに送信します。

GET / HTTP/1.1
Host: google.com

その後、Webサーバーが何をするかを決定します。これには多くの手順が含まれます。

Webサーバー通常には、彼がサービスを提供するすべてのドメインに対してドキュメントルートと呼ばれるものがあります。 Webサーバーがユーザーにサービスを提供できるファイル通常この中に存在するドキュメントルート。たとえば、google.comのドキュメントルートは/var/www/domains/google.com/htdocs/にある場合があります。

これで、リソースを要求すると、Webサーバーは最初にリソースを検査し、次に適切なアクションを実行します。たとえば、リソースが.phpで終了する場合、Webサーバーは自分で何も提供しないことを決定するかもしれませんが、代わりにPHPインタープリターを呼び出し、PHPインタープリターを実行させます要求されたリソースの適切なPHPファイルを作成し、ユーザーに出力を提供します。

このリクエストを例に取ります:

GET /article.php?id=123456 HTTP/1.1
Host: news.example.org

この場合、news.example.org上のWebサーバーには、リソース/article.php?id=123456を提供するタスクが割り当てられます。起こりそうなことは、このWebサーバーがPHPインタープリターを開始することです。ドキュメントルートからarticle.phpファイルを取得し、PHPインタープリターにフィードして、出力を待ちます。次に、出力bckを要求したブラウザに送信します。この場合、これはおそらくデータベースからロードされた特定のコンテンツ(id 12345で保存された記事のコンテンツ)を持つブログのサイトです。

しかし、他のことも起こり得ます。

元の例に戻りましょう。

GET / HTTP/1.1
Host: google.com

標準的なWebサーバー(Apache、Lighttpdなど)で起こることは、多かれ少なかれ次のとおりです。

  • index.html(ドキュメントルート内)という名前のファイルを探して提供します
  • 存在しない場合は、ファイルindex.htmを探して提供します
  • 存在しない場合は、ファイルindex.phpを探してPHPインタープリターを起動し、出力を提供します
  • 存在しない場合は、404 NOT FOUNDエラーを提供します

拡張機能の優先順位は、通常、Webサーバーの側で構成可能です。サーバーはindex.xxxファイルをまったく提供しない場合があります。たとえば、node.jsサーバーが実行されている場合、Webサーバーはnode.jsサーバーにタスクを実行して、リソース/を提供します。ノード上でそれを決定します。

tl:dr;ブラウザはファイルを検索しません。ブラウザrequests a resource、Webサーバーはリクエストを処理し、リクエストされたリソースのコンテンツ承認者にサービスを提供します。これはmightファイルであり、ただし、サードパーティプログラムの出力である場合もあります。

速度に関する限り、これはWebサーバーに依存します。しかし、asjkdjhfz9874jykdfndsk.htmlが要求されたときにWebサーバーが常に/ファイルを提供するようにしたい場合、通常、そのようなファイルを検索するようにWebサーバーを構成しますfirst他の構成と同じくらい高速。

免責事項これは、Webサーバーがどのように機能するかについての完全な説明ではなく、特定のWebサーバーに合わせて調整されたものでもありません。ほとんどのWebサーバーは同様に動作しますが、特にgoogle.comのようなサイトは、特にそのニーズに合わせてカスタマイズされたカスタムのものを実行する可能性があります。


通常、ブラウザはネットワークアクティビティを検査するツールを提供します。 Chromeを使用すると、「開発ツール」を開いてヘッダーを検査できます。これは、この答えを編集できるようにするためにブラウザがSEに送信するものです。

GET /posts/93567/edit HTTP/1.1
Host: webmasters.stackexchange.com

サーバーにキャッシュ、私が期待している言語、私が使用しているブラウザ、どこから来たのかを伝えるものがいくつかありますが、ここでは興味深いものではありません。要点は、私のブラウザーがresource/posts/93567/editを要求するということです。私のブラウザには、Webサーバーが提供するファイルに関するanyという考えは決してありません。 SEは ASP.NET MVC 5 で実行されます。これは、Webサーバー(SEの場合はIIS)が適切な.aspファイル(どこにでも配置可能)をロードする可能性が高いことを意味します。ランタイムがパラメーターpostId=93567を評価します。実際のファイルまたは内部の仕組みはneverです。これは、ブラウザが知る必要がないためです(また、サーバーを実行しているものについてはその情報を隠すほうが安全です)。

ビューには、ブラウザがサイトを正しくレンダリングするためにリクエストする他のリソース(CSSファイル、JSファイル、画像など)も表示されます。しかし、それらを使用すると、resourceについてのみ学習し、ファイルシステム内のactuallyファイルであるかどうかはわかりません。

14
Polygnome

ブラウザはファイルを探していません。 resourceを要求しているだけです。サーバーは、そのリソースが返すものを決定します。

最も基本的なレベルでは、「ファイル」は文字通り単なるファイルです。ディレクトリのデフォルトのインデックスページの場合、サーバーのセットアップ方法によって、返されるファイルが決まります。一部のサーバーは、ファイルが存在する場合にindex.htmlを返すようにデフォルトで構成され、その後index.htmなどにフォールバックします。他のサーバーはdefault.htmlなどにデフォルトで設定されます。ファイルが使い果たされ、404エラーが返されます。

サーバーの書き換えがオンになっている場合、または動的ページが構築されている場合、返されるコンテンツは通常、ファイルではありません。出力が(通常).htmlファイルに含まれるHTMLであるため、ファイルに似ています。しかし、舞台裏では数十または数百のファイルがそのコンテンツを作成します。

14
John Conde

どのファイルがレンダリングされているかをどのように知っているのでしょうか。 URLでそのファイル名を明示的に呼び出すだけで、最終的には十分に長いタイムラインで正確に推測できます。 www.xyz.com/index.htmlは何もロードできませんか?次に、www.xyz.com/index.htmを試して、サイトがレンダリングされるまで続けます。ブラウザーが読み込んだファイルを知るためのショートカットを探しています。

ここでジョンに同意します。URLを指定することで要求しているのは、サーバーからのリソース(またはより良いWordのオブジェクト)です。

URLが要求されたときに実際にどのディスクファイルが読み取られているかを確実に100%知ることはありません。これは、サーバーが出力を生成するためにサーバーに関連付けるサードパーティプログラムを必要とする場合に特に当てはまります。

典型的なサードパーティのプログラムはPHPインタープリターです。これはWordpressがコンテンツを配信するために使用するものです。インタープリターは、サーバーのディスクから任意の数のファイルをロードして、ユーザーのブラウザーに配信されるHTMLデータを作成するコードを処理できます。

さらに、特別な構成をサーバーに適用して、特別なURLをリソースに割り当てることができます。これは(Apache環境で)URL書き換えと呼ばれ、フレンドリーなURL作成の開始以来非常に優れています。

気になるのはページ上の実際のコンテンツだけなので、ユーザーはロードされたファイルの正確なファイル名を知りませんし、彼らも気にしません(ハッカーでない限り)。

一部のサーバー管理者は、セキュリティ上の理由からURLで実際のファイル名を使用しないことを決定する可能性もあります。

4
Mike

私の回答では2つのリンクに制限されています...リンクが実際にどのように機能するかを話すのは挑戦です:-/おそらくいくつかのポイントを獲得し、すぐに戻ってこの経験を改善することができます。

既に述べたように、Webサイトの動作と応答は使用するサーバーに固有であり、幅広い設定です。おそらく、LAMPサーバーの「典型的な」振る舞いについて説明できます(Linux Apache Mysql Php-おそらく現在使用されている最も一般的なWebサーバー)

Exemple.comのApache構成では、そのサイトに一致するフォルダーを探す場所をApacheに指示するDocumentRootディレクティブがあります。/www/

そのディレクトリとそのすべてのサブディレクトリの特定の定義を保持できる.htaccessというファイルを作成できます。

.htaccessを/ www /に配置すると、サイト全体に適用されます(Unixの規則では、ドットで始まるファイル名は隠しファイルであることに注意してください)

そのファイルを/ www/test /に配置すると、 http://exemple.com/test/で始まるすべての呼び出し(GET POST PUTなど)に適用されます。 GET http:// exemple.com/test /は実際には

GET /test/ HTTP/1.1
Host: exemple.com

しかし、GET httpを書く方が簡単です:// exemple.com/test /

Apacheは、ポート80でリッスンするときにその呼び出しを受信します。 http://exemple.com:8080/ が表示されたら、ポートを強制的に8080

http:// exemple.com/test/= http:// exemple.com:80/test /

Apacheは、/ www /および/ www/test /で.htaccessファイルを探します。

最初に/ www /にあるものを解釈し、次に/ www/test /にあるものを解釈します(ファイルが存在する場合はもちろん)

そのため、まずデフォルトの動作ではない特定のディレクティブを指定するために、それらのファイルがあるので、まずこれらのファイルを確認する必要があります。

0
Antony Gibbs