はてなキーワード: HTTPとは
X(旧ツイッター)で、「掛け順」などとして2024年11月現在も活発に議論されている「かけ算の順序」について、重要と思われるコンテンツを選んでみました。
歴史的に重要であること、現在も閲覧できることを基準にしました。公開当初からURLが変わっているものは、現在の参照先にしています。
それぞれに解説を書く才能はなく、省略しています。いくつかに補足をつけています。
初出URLはhttpsではなくhttpでした。はてなブックマーク(b:id:entry:28308384)のコメントと合わせてお読みください。
作成は2002年です(宮城県教育研修センター 平成13年度 長期研修員(B・C・D)研究報告書)。2011年末に、(Wikipediaでない)Wikiで取り上げられたと記憶します。よく参照されるのは「表4 計算の意味の理解」です。
計算機科学は、情報の理論的基盤から実用的な応用まで、広範な領域をカバーする学問です。以下に、計算機科学の主要な分野と、特にネットワークに関連するトピックを体系的にまとめます。
プログラミングパラダイム: 手続き型、オブジェクト指向、関数型、論理型など。
プロセス管理: CPUのスケジューリングとマルチタスキング。
機械学習アルゴリズム: 教師あり学習、教師なし学習、強化学習。
深層学習: ニューラルネットワークによる高度なパターン認識。
ネットワークは、情報の共有と通信を可能にする計算機科学の核心的な分野です。
OSI参照モデル: ネットワーク通信を7つのレイヤーに分割し、それぞれの機能を定義。
プレゼンテーション層: データ形式の変換。
アプリケーション層: ユーザーアプリケーションが使用するプロトコル。
TCP/IPモデル: 現実のインターネットで使用される4層モデル。
リング型: 各ノードが一方向または双方向に隣接ノードと接続。
IP(Internet Protocol): データのパケット化とアドレッシング。
TCP(Transmission Control Protocol): 信頼性のある通信を提供。
UDP(User Datagram Protocol): 信頼性よりも速度を重視した通信。
ルーター: 異なるネットワーク間のパケット転送とルーティング。
IDS/IPS(侵入検知/防止システム): ネットワーク攻撃の検出と防御。
VPN(仮想プライベートネットワーク): 安全なリモートアクセスを提供。
SDN(Software-Defined Networking): ネットワークの柔軟な管理と制御。
IoTプロトコル: MQTT、CoAPなどの軽量プロトコル。
SNMP(Simple Network Management Protocol): ネットワークデバイスの管理。
ネットワークトラフィック分析: パフォーマンスとセキュリティの最適化。
ネットワークオーケストレーション: 自動化された設定と管理。
AIによるトラフィック最適化: パフォーマンスの向上と障害予測。
マイクロセグメンテーション: ネットワーク内部の細かなアクセス制御。
『コンピュータネットワーク』 アンドリュー・S・タネンバウム著
『ネットワークはなぜつながるのか』 戸根勤著
Coursera: 「コンピュータネットワーク」、「ネットワークセキュリティ」コース
edX: 「Computer Networking」、「Cybersecurity Fundamentals」
IETF(Internet Engineering Task Force): ietf.org
IEEE Communications Society: comsoc.org
W3C(World Wide Web Consortium): w3.org
const axios = require('axios'); // HTTPリクエストを行うためのモジュール
const fs = require('fs'); // ファイル操作モジュール
const xml2js = require('xml2js'); // XMLをJSONに変換するためのモジュール
const chardet = require('chardet'); // 文字エンコーディングを検出するためのモジュール
const iconv = require('iconv-lite'); // 文字エンコーディングを変換するためのモジュール
const rssUrl = 'https://www.mlit.go.jp/important.rdf'; // 例としてRSSフィードのURLを指定
async function fetchAndSaveRSS() {
try {
// RSSを取得
const response = await axios.get(rssUrl, { responseType: 'arraybuffer' });
const rssData = response.data;
const detectedEncoding = chardet.detect(rssData);
console.log('検出された文字エンコーディング:', detectedEncoding);
// UTF-8に変換
const utf8Data = iconv.decode(rssData, detectedEncoding);
xml2js.parseString(utf8Data, (err, result) => {
if (err) {
console.error('XML解析エラー:', err);
return;
}
const jsonData = JSON.stringify(result, null, 2);
fs.writeFileSync('rss_feed.json', jsonData, 'utf8');
console.log('RSSフィードがファイルに保存されました。');
});
console.error('エラーが発生しました:', error);
}
}
// 実行
fetchAndSaveRSS();
人間だって電話で「◯◯に関するお問い合わせは1を、◯◯に関するお問い合わせは2を」って窓口分けてたりするやん。
もう一つ、なぜコンピュータで「自然な対話」でないといけないのが意味不明。
コンピュータが自然言語で理解できるようにしろって話?処理コストが高い割に全くメリットなくて誰が得するんやそれ。
擦り合わせ自体をプロトコルに含めろ?だったら結局すり合わせのための何か別のプロトコルが必要やん?
少しの擦り合わせでもそれが100万1000万アクセス、はては世界中の合計でどれだけCPUや通信帯域を無駄にするか想像できん?
激務になりがちなWebサーバなんて世界で一番無駄をなくそうと努力されてるところなのに。
ちなみに、使うHTTPのバージョンとかはリクエストの時点ですり合わせしてる(そのあたりはブラウザが内側でよしなにやってる)
少なくとも筋ではないな。無駄な通信利用量とCPU負荷の観点からもそうだが、
セキュリティ上の観点からも、どんな理由であれサーバから自分に関する情報を送るのは危険。
相手がウェブサイトなのかなんなのか知らないでアクセスするやつはいない?
いやいや、それこそ攻撃ボットやハッカーがやってることだから。
ボットは24時間手当たり次第にアクセスしまくって攻撃対象を探してたりするやつな
なんかアクセスしたら繋がるけど何をしてるかわからんサーバは、攻撃の糸口が見つかりにくいからな。
企業に侵入して、順番にサーバにアクセスした時に自分の役割(プロトコル)を白状してくれたら、
すぐに企業全体の構成がわかってこれ以上なく攻撃が捗ると思うぞ。
まぁ、有名どころのサーバはポート番号からある程度推測できるというのはあるが、
そんなに https:// って見かけるかな?自分の中ではほぼ見かけなくなった気がしてるけど。。。
Web ブラウザも随分昔から https:// を省略して入力できるようになってるしな。
一般の人には縁のない話になるが、技術的には「無くす」ことはできない。
例えば HTML の中では
(1) <a src="https://example.com/some/page">...</a> (2) <a src="http://example.com/some/page">...</a> (3) <a src="//example.com/some/page">...</a> (4) <a src="/example.com/some/page">...</a> (5) <a src="example.com/some/page">...</a>
この 5 つはそれぞれ明確に意味があり、現実としてもよく使い分けられているから。
特に Web 技術者として働きながら (3) の意味が分からない人は、このあたりを勉強しなおした方がいい。
「現在のページが http: であれば http: のままで、現在のページが https: であれば https: のままでアクセスせよ」という意味。
まさにこの増田のページの HTML にも <iframe src="//www.googletagmanager.com/...."> という URL が使われていたりする。
ちなみに http://www.abc.co.jp の意味を郵便とかで例えると次の通りだ。
まぁ、httpのところの例えは正確じゃないけど。
これは住所と操作内容(http)に当たるものをセットで書くときの世界共通のルール(URLと呼ばれる形式)だから
例えるなら、日本の手続き時の郵送方法「〒123-4567 東京都千代田区〜 〜窓口担当者様」っていう書き方が
生まれてから一度も変わらないなぁって言ってるのと同じに聞こえる。
ホームページ配信窓口以外に何があるの?って指摘なら、めちゃくちゃ種類があって実は見えないところで色々使われてる。
一般の人が目にするのは ftp とか、あとはメールソフトを設定してたら出てくる smtp、pop、imap あたりが有名かな
他の人も言ってるが、ネットといえば http と言うぐらい一強になってしまったから http と書くのが冗長に感じるだけだと思う。
http を見るのに特化したブラウザであっても、ファイル転送用の ftp:// が使われる場合もあるし、
もしかしたら生きてる間には http ではない別のが流行る可能性も…まぁそれは無いか?
はじめに通信プロトコルを宣言するのって自然じゃない。というのは、自然な対話では「これから、日本語を話します。こんにちは。」とはならない。センター試験のリスニング問題じゃないんだから。普通は、適当に話し始めてからすり合わせる。通信プロトコルに希望がある場合は、ブラウザの設定で選べればいいだけのことだ。コマンドラインならアーギュウメントで指定すればいい。
というか、ウェブサイトを呼び出した後に、ホストの方から「httpで送るやで」と通知するのが筋じゃないのか。なにせ、相手がウェブサイトなのか、データレポジトリなのか、なんなのか知らないでアクセスするやつはいない。だいたい、昨今ftpサーバにウェブブラウザでアクセスしたら、ディレクトリ構造がウェブサイトみたいにハイパーリンク表示されるじゃんか。あれなに?
それから、「URLの構造で、大分類が先、小分類が後の方がいい」って書いてるやつ、みんなチョンボだって分かってるからな。トラバの引用しているリンク先にあるバーナーズ=リーのコメント見てから、さも自分で思いつきました然として書いてるのバレバレ。そんなに賢く見られたいのか?死ぬほどダサい上、あれれー頭おかしーぞー?しっかりしろ。むしろ、しっとりしろ。二度とやるなよ。
URI(Uniform Resource Identifier)
URL(Uniform Resource Locator)
大雑把にはそんな感じ
よく、「URIって呼べよ恥かしい」みたいな人いるけど、そっちが恥ずかしいです
例えば、下記のようなURLがあったとして
https://test:testpw@hogehogefugafuga.jp/index.html:8080
① スキーム
② オーソリティ
//test:testpw@hogehogefugafuga.jp/index.html:8080
ポート :8080
hogehogefugafuga.jp にアクセスしますよぉ、提示した情報でというもの
インターネットを作った人は全世界の人が使うようになる前提で、ややこしいhttp://を決めたのかなぁ?
こんなに使われることになるくらいならもっとシンプルなものにしてた可能性が高かったんじゃないかなと技術脳ゼロの自分は思ってしまうわけです。
すげぇシンプルです
これ以上シンプルにするって逆にどうやるの?
例えばメールサーバーには、「mx」や「mail」などのサブドメインが付きます
これに対して、webサーバーを示すサブドメインとして「www」を使ったわけです
すげぇシンプルです
業務で機械学首(データマイニング)、Web(業務システム)、組み込み(産業インフラ設備)の経験があるので、分野ごとの相違点と発生しがちな軋轢を書いておく。
- | 機械学習 | Web開発 | 組み込み開発 | 発生する軋轢 |
コードの寿命 | 半年間 | 20年間 | 40年間 | 組み込み開発er「産業系の組み込みは発売から40年後にアップデートするケースもあるので、ドキュメントは、開発担当者が全員退職して誰も残っていなくても理解できるように書いてください!」 |
コードのアップデート頻度 | 試行錯誤しつつ随時 | 2週間に1回 | 半年~5年に1回 | Web開発er「組み込みはどうしてそんなに時間がかかるの?アジャイルを導入してください。ウォーターフォールは硬直的でデメリットばかりですよ」 |
アップデートの提供方法 | -(コードは少人数の同僚だけで使用) | サーバに自動デプロイ | 技術者が現地訪問してアップデート | 組み込み開発er「アジャイルだから最初は若干のバグを残して発売し後日アップデートするって?グローバルで既にXXX台受注しているけど、誰が現地に行くの?費用を負担する部署はどこ?」 |
開発者の属性 | 数理系の修士~博士、少数精鋭 | 専門学校~修士、文理混在、大人数 | 電気系、機械系、情報系の修士~博士 | 機械学習er「数式で表現できない知識は民芸品です。エンジニアを名乗っちゃダメでしょ」 |
関係部署 | マーケティング・企画 | 顧客 | ハード開発・工場 | 組み込み開発er「納期3カ月前なのにソフトが完成していないの?生産立ち上げを工場に相談していない!?スケジュールをゴールから逆算できなかったの??今回は船便での輸送になるけど、それも計算に入れてあるよね?」 |
計算資源 | 潤沢 | 予算次第 | 貧弱 | 組み込み開発er「データマイニングやってたKさんがOSSを使うらしいけど、サイズが5MBあるんだぜ。5MB全部必要なのか聞いたら一部機能しか使わないんだって。で、他チームとの容量調整は丸投げされたの。感覚を破壊されるよな。」 |
3rdパーティライブラリ | OSS | OSS | 買ってくる | 組み込み開発er「OSSに不具合があったらどうやって修正して顧客にデリバーするつもりなんだろう?リスク移転の考えで、不具合の補償契約込みで買えばいいのに」 |
通信プロトコル・データフォーマット | 生データが王様なので、生データに従う | 最新のものを取り込む | 実績重視 | Web開発er「HTTPの実装がないの?TCPを直接使う!?暗号化や認証はS社の独自プロトコル?古いプロトコルを使い続けているから開発効率が低いんだよ」 |
電源OFFタイミング | 任意にコントロール可能 | 定期メンテナンス | コントロール不可 | 組み込み開発er「ファームウェアアップデート中に電源OFFしたらどうなるの?ファイル書き込み中の電源OFFは?状態遷移図って知ってる?」 |
性能 | 出来高 | 顧客要件、常識、予算に従う | ミリ秒~マイクロ秒単位のタイムスライスで管理 | Web開発er「性能改善でXX関数の10ミリ秒を1ミリ秒以下に短縮するために2週間も試行錯誤したって?プロパ社員の人件費は7万円/日だから70万円を消費したね?AWSでEC2の性能を調整すれば2000円/月で解決だよ。損益分岐点は350カ月だけど顧客のこれまでのリプレース実績から判断してこのシステムはそこまで長期間使われない」 |
学会発表・特許 | 結構ある | ほぼなし | 年1件の特許出願ノルマ | 組み込み開発er「学会発表も特許出願もなく、何を開発したの?ドメイン知識をソフトウェアに翻訳してAWSでポチポチやっただけなの?開発行為ではなく作業だね」 |
分野ごとに要求される製品特性が異なるから、異分野に移ると文化摩擦が起きるという話だと思う。製品特性の違いを理解し自らの行動に反映できるようになるには、ベテランでも数年かかるケースがある。開発期間10年のテーマを経験したことがあるが、そうした場合だとワンサイクルを経験するのに10年かかるので。経験から学ぶのが愚者、歴史から学ぶのが賢者ともいうが…。
はい、ブラウザの実装は確かに**コンピュータサイエンス**の一部です。以下に、その理由をいくつか挙げてみます:
1. **アルゴリズムとデータ構造**:ブラウザは、効率的な検索、ソート、データの格納と取得など、多くのアルゴリズムとデータ構造を使用します。
2. **ネットワーキング**:ブラウザは、HTTPやHTTPSなどのプロトコルを通じてインターネットと通信します。これらのプロトコルの理解と実装は、コンピュータサイエンスのネットワーキングの分野に直接関連しています。
3. **レンダリングエンジン**:ブラウザのレンダリングエンジンは、HTML、CSS、JavaScriptなどのコードを解析し、それをユーザーが見ることができる視覚的なウェブページに変換します。このプロセスは、計算理論、グラフィックス、プログラミング言語の理解を必要とします。
4. **セキュリティ**:ブラウザは、ユーザーのデータを保護するために、さまざまなセキュリティメカニズムを実装します。これには、暗号化、サンドボックス化、同一生成元ポリシーなどが含まれます。
これらすべての要素は、コンピュータサイエンスの基本的な概念に基づいています。したがって、ブラウザの実装は、その「サイエンス」の部分を明確に示しています。ブラウザの設計と実装は、これらの理論を実際の製品に適用するための実践的なフレームワークを提供します。それらは、問題解決、効率的な設計、そして最終的にはユーザーに価値を提供するための方法を探求します。これが、ブラウザの実装がコンピュータサイエンスである理由です。