About Cosense
Help
Log in
nwtgck / Ryo Ota
X
M
L
H
t
t
p
R
e
q
u
e
s
t
#
H
T
T
P
#
W
e
b
ブ
ラ
ウ
ザ
の
J
a
v
a
S
c
r
i
p
t
#
J
a
v
a
S
c
r
i
p
t
#
X
H
R
X
M
L
H
t
t
p
R
e
q
u
e
s
t
-
W
e
b
A
P
I
|
M
D
N
Related
Sort by
Related
Modified
Created
Last visited
Most linked
Page rank
Title
Links
WebブラウザのJavaScript
#プロジェクト内用語定義このプロジェクトではブラウザ上で動くJavaScriptに関することを指す言葉。[Node.js]と「ブラウザで動くJavaScript」は必ずしも同じ機能が使えるとは限らない。ブラウザだと[Streams API]はNode.jsのReadableとかWritableとは違うし、cryptoも違うし、
ブラウザのJavaScriptでPOSTリクエストのBodyをストリーミングしたいが、Chromeも未対応みたい
fetch()でもXMLHttpRequestでもデフォルトでリダイレクトを追跡してXHRだとリダイレクトさせない方法はない
#WebブラウザのJavaScript #Fetch_API #XMLHttpRequest #HTTP #リダイレクト[*** fetch()]まず`fetch()`は以下の仕様で分かるようにデフォルトが`redirect: 'follow'`になる。> A request has an associated redirect mode, which is "follow", "error", or "manual". Unless stated otherwise, it is "follow".
Piping Server (TypeScript版)の0.14.0まで質素なWeb UIでXMLHttpRequestを使わなかった理由と0.15.0で使うようになった理由
<a>のdownload属性は同一オリジンじゃないとダウンロード出来ない
JavaScriptでバイナリを連結したければnew Blob([b1, b2, ...])のようにした方が効率的かもしれない
Piping Server (Rust)の質素なWeb UIの実装のこだわり
Webブラウザ上で純粋なHTTPだけで単方向リアルタイム通信を可能にするHTTPのストリーミングアップロードが遂にやってくる
XMLHttpRequestでバイナリな文字列を送信できそうなメソッド
HTTP
SSH接続をWebブラウザの純粋なHTTP上で実現する
ファイルのストリーミング強制保存をクロスオリジンでも実現させるService Workerの裏技ぽい使い方
Promiseベースでaccept()で立てられるHTTPサーバー - Node.js
Rust実装でPiping Severの転送速度を1.7倍~1.8倍高速化 (Hyper)
HTTPのヘッダの標準化「Structured Field Values」でJSONが使われない理由が書かれている場所
#Structured_Field_Values #HTTPEN: https://www.rfc-editor.org/rfc/rfc8941.html#name-why-not-jsonJA: https://triple-underscore.github.io/http-header-structure-ja.html#why-not-json
Rustのhyper内部で利用されているTowerに「ストリームベースのプロトコルには不向きかも」と書かれている
#hyper #Rust[Rust]の[HTTP]のライブラリの[hyper]では`tower_service::Service`がベースになってできている。[https://github.com/tower-rs/tower]のAboutにも書かれているとおり「 async fn(Request) -> Result<Response, Error> 」をしたいライブラリになっている。つまりリクエストをもらってレスポンスを非同期で返す。
HTTP/1.0で通信してくるソフトウェアをまとめたい(まだ2個)
#HTTP/1.0 #HTTP[** モチベーション]「HTTPの1系ならほとんどは1.1だろう」と思われていそうな時代にそれなりに広く使われていてデフォルトで[HTTP/1.0]を使ってくるソフトウェアをまとめたい。1.0にはTransfer-Encoding: chunkedがなかったりしてハマることがあるのでHTTP/1.0なのか1.1なのかが重要になるケースがある。[*** 一覧][ApacheBench], [abコマンド]
HTTPのリバースプロキシが本来のパスを伝えるためのヘッダ - X-Forwarded-Prefix
#X-Forwarded-Prefix #HTTP #リバースプロキシ #reverse_proxyリバースプロキシが受け取ったHTTPのリクエストのパス(`GET <ここの部分> HTTP/1.1`)をupstreamのサーバーに伝える時のヘッダに[X-Forwarded-Prefix]を使うことが広く使わされていることが分かった。[X-Forwarded-Prefix]の情報は現段階では少ない。[X-Forwarded-Prefix]は非標準のヘッダ。
古いWebブラウザとHTTPの年表を書きたい
#Webブラウザ #HTTP #Web目的:時系列で過去を知り、昔のWebブラウザでも動くアプリケーションを作るため。そのため場合によっては、HTMLの歴史OSの歴史
Cloud RunでPiping Serverを立てる方法と注意点と解決策
curlコマンドでのHTTP/2の多重化は非対応
[curl]コマンドで[HTTP/2]の[多重化]を実装するのにステートが必要だと思うからどう実装してるのかなって思ってたけど、非対応だと公式が言っているのを見つけた。> The [command] line tool won't do any [HTTP/2] [multiplexing] even though [libcurl] supports it, simply because the curl tool is not written to take advantage of the libcurl API that's necessary for
ServiceWorkerの登録時に付与される"Service-Worker" HTTPヘッダはscriptだけを値にとると思われる
#Service-Worker #ServiceWorker #HTTP以下の仕様に書かれているとおり、Webブラウザは[ServiceWorker]の登録をするときのHTTPリクエストに[Service-Workerヘッダ]をつける。>An HTTP request to fetch a service worker's script resource will include the following header:
curlを使わずにnc, echo, cat, wc, bc, awkでPiping Server経由でファイルを送受信する
#Piping_Server #コマンド #netcat[*** やりたいこと][curl]がインストールされてない/できない非常事態でもデータをデータ転送を[Piping Server]でしたい。[*** 送信]`./myfile.txt`は任意のファイルパスに変更可能。
Rust の Hyper 0.13, futures 0.3, async/.awaitなどに対応したPiping Serverを実装したときの話
[low-leve]の[HTTP]のライブラリと謳う[Hyper] 0.13での破壊的変更やRustの機能 async/awaitに対応を[Rust]版 [Piping Server]でおこなった。この対応における実際のコードの変化は以下。「[Merge branch 'feature/hyper-0.13-futures-0.3-http-0.2' into develop · nwtgck/piping-server-rust@28216b7 https://github.com/nwtgck/piping-server-rust/commit/28216b7e0dc0212393e74a8130baca98d4525298]」
Piping Server
POSTのTransfer-Encoding: chunkedを実際に話す例(Piping Server)
HTTPで1110TB転送できている記録(Piping Server)
公開されたPiping Serverを知っている人のみが使えるように限定公開する
リンク: QUICがステートフルだからHTTP/3もステートフル
#QUIC #HTTP>QUICはステートフルですので、おなじQUICコネクションのUDPパケットは同じサーバに割り振ってやる必要があります引用元: [HTTP/3をUDPロードバランサで分散するときの問題点 (AWS NLBで試してみた) - ASnoKaze blog https://asnokaze.hatenablog.com/entry/2019/12/30/201331]
RustのHyperでHTTPのボディを任意のタイミングで流し込む例
87日間連続でリモートのPiping Serverに無限にデータ転送して45.1TB転送できてる図
HTTPのTransfer-Encoding: chunkedした時のデータの増量は0.0174%程度だった
#HTTP[*** 知りたいこと][HTTP]の[Transfer-Encoding: chunked]した時に、元データと比べてどれぐらい増えるのかを知りたい。[Base64]だとバイナリデータと比べて約133%増えるなどと言われていてそういった具合に[Transfer-Encoding: chunked]の場合のデータの増加ぐあいを知りたい。([Base64 - Wikipedia https://ja.wikipedia.org/wiki/Base64])
WebブラウザのJavaScript
Web Bluetoothで全デバイスをスキャン対象にする
#Web_Bluetooth #WebブラウザのJavaScript #JavaScript以下のように、`acceptAllDevices: true`をして、`filters: [...]`はしないようにすれば良い。`navigator.bluetooth.requestDevice({ acceptAllDevices: true })``.then(device => { console.log(device) })`
ダークモードかどうかJavaScriptで判定する方法
#WebブラウザのJavaScript #JavaScript #ダークモード #ダークテーマ`window.matchMedia('(prefers-color-scheme: dark)').matches``.matches`は```true`だったら[ダークテーマ]で、それ以外は`false`。[NIpp]: [Prefers dark https://nipp.nwtgck.org/#Prefers_dark/es2017/K8/MS8kv18tNLEnO8E1NyUzUUNcoKEpNSy0q1k3Oz8kv0i1OzkjNTbVSSEksytZU14QoTS0GAA==]
JavaScriptでUint8Array ⇄ Base64文字列の相互変換
#WebブラウザのJavaScript #JavaScript[*** Uint8Array → Base64]`// (from: https://stackoverflow.com/a/11562550/2885946)``function uint8ArrayToBase64(uint8Array) {``return btoa(String.fromCharCode(...uint8Array));`
リンク集: Webブラウザのfetch()でReadableStreamをアップロードする機能の情報をまとめたい場所
fetch()がReadableStreamをアップロードできるかの判定 - fetch streaming upload
#WebブラウザのJavaScript #JavaScript #feature_detection[*** 判定方法]以下のようにしてこの機能に対応しているブラウザかどうか判定できる。引用元: [Streaming requests with the fetch API https://web.dev/fetch-upload-streaming/#feature-detection]上記はReadableStreamのアップロードに非対応だと、`"[object ReadableStream]"`がアップロードされてしまうことを利用している様子。その結果おそらく`Content-Type: text/plain ...`がつく仕様になっているのだと思う。
ReadableStreamを包んでReadableStreamを作る
#WebブラウザのJavaScript #JavaScript #ストリームすごく意味なさそうだけど[Polyfill]とか入ってるときに使ったりする。
JavaScript: ワンラインでランダムな文字列を得る方法: Math.random()...
#WebブラウザのJavaScript #JavaScript #random引用元: [Javascriptでランダムな文字列を生成する方法 - Qiita https://qiita.com/ryounagaoka/items/4736c225bdd86a74d59c#%E3%81%84%E3%81%8F%E3%81%A4%E3%81%8B%E3%81%AE%E6%96%B9%E6%B3%95]
Service Workerに向かってメッセージを送ってService Worker側から返事を返す方法
#Service_Worker #WebブラウザのJavaScript #PWA[*** やりたいこと][Service Worker]にメッセージを送ってレスポンスを受け取りたい。送るだけでなくて[Service Worker]からなんらかの結果を受け取れるところが大事なところ。[*** やりかた]
Web Crypto
#WebブラウザのJavaScript #JavaScript #暗号 #セキュリティ [Web Crypto API - Web APIs | MDN https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API]
JavaScriptでマウスポインタを奪える実例
#WebブラウザのJavaScript #JavaScript[[SWAGSHOT] https://js13kgames.com/games/swagshot/index.html][GitHub]: [remvst/swagshot https://github.com/remvst/swagshot]どうやって実装しているのか見てみたい。[< ESC]で抜けれる。
BlobをReadableStreamに変換する (JavaScript)
#Blob #ReadableStream #WebブラウザのJavaScript #JavaScript[https://github.com/mozilla/send/blob/90f6a07d4af4863165a827895a6d2a01ab948bde/app/streams.js#L43-L73][Firefox Send]は、ユーザーがドラッグアンドドロップした`File`(`Blob`)をストリーミングしながら暗号化したりしているので、どうやっているのか調べて見つけたもの。[Blob.slice https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice]があるのでそれを活用している。
Svelte
#ライブラリ #WebブラウザのJavaScript #JavaScript #トランスパイル公式: [Svelte • Cybernetically enhanced web apps https://svelte.dev/]GitHub: [sveltejs/svelte: Cybernetically enhanced web apps https://github.com/sveltejs/svelte]
JavaScript(ブラウザ)でTCPを使うことに関してまとめ
#TCP #WebブラウザのJavaScript #JavaScriptまだ標準的な機能ではない。[Google Chrome]には[Chrome拡張]限定で使えるみたいなことが以下に書かれている。[html5 - Connecting to TCP Socket from browser using javascript - Stack Overflow https://stackoverflow.com/a/17337074/2885946]
JWTをWebブラウザ完結でパースするNipp
#JWT #JSON_Web_Token #WebブラウザのJavaScript #Nipp以下でサーバーにデータを送らずにJWTをパースできる。[** [Parse JWT https://nipp.nwtgck.org/#Parse_JWT/es2017/hU9bU+IwFH7vr8i4O0OyYlsuVoHBGRQvxQUUUNdVR9OSQrQknSSVVof/vqnIxV3Hfeg055zvalkABoJPqmCsVCSrljWiUpkjqsaxZ/p8YnlcUDmJpVWwS8WdsvMtA+jDhDC1VShXSnbRQUY
JavaScriptのfetch()でタイムアウトをsignalを使って設定する例
#WebブラウザのJavaScript #fetch #timeout`function timeoutGet(path, timeout) {``const controller = new AbortController();``const resPromise = fetch(path, {``signal: controller.signal,`
JSONをフラットにするNipp
#WebブラウザのJavaScript[Nipp] : [https://nipp.nwtgck.org/#Flatten_JSON/es2017/fY9Rb9s2FIXf9SsuiDxIiKImA4YO8pRiDxuwFKsDOG+uUNMyadOhSZe8WmoI+u8lKcmR7aR6kKjDe879Dq9VhUIr2Fqtng57NuWxPybQROCeSiuLgO5C8xkaKPpzmA8T9kVgtYH4ODNYg51aB
Web CryptoでJavaScriptだけでパスワードによる暗号化/復号
#Web_Crypto #WebブラウザのJavaScript #セキュリティ[*** やりたいこと][WebブラウザのJavaScript]だけで[Web Crypto]を使って安全にパスワードによる暗号化をしたい。[Web Crypto]はWeb標準の機能で動く。[*** やりかた]
Web Audio APIで和音を奏でる
#Web_Audio_API #WebブラウザのJavaScriptドミソ:https://nipp.nwtgck.org/#/es2017,click_run/hc9LCoMwEIDhvafIUjdBJ2CR0EXpAXqGEKcQkIQmYx+3rzEKtQZchvnnY6KdDcTU2BvXsDOz+GKX+Lg6S/imspKFnhMXdAxSybVHRXgL2gyDIudjt4RzAUcWrBYcWuLIEqsl8lYRb+d3j48Rrf7wpxpGnHagb
SHA256のハッシュをJavaScriptのWeb標準のライブラリだけで計算する
#Web_Crypto #SHA256 #ダイジェスト #メッセージダイジェスト #ハッシュ #WebブラウザのJavaScript[*** やりたいこと]サードパーティー製のライブラリを使わずに標準のライブラリだけでハッシュを計算したい。Web標準で使える[Web Crypto]を使えばできる。[*** 方法]
「きらきら星」をWeb Audio APIで奏でる
#Web_Audio_API #WebブラウザのJavaScript[Nipp]:https://nipp.nwtgck.org/#/es2017,click_run/zY+9btswFIV3PcWFu8ioQ0uyfmu4QJCiRac+gJFBoGlXgEC6JtXWCLzYkx8gc5AxQPZOfRq/SHmp3/w06hKgGgjx4zn3nkMFlwrSYpEJmAFnP+Ac/y8EV+ynsodTixqFkFS/Gx2hG5Yq9kXSLM9TJTaoypmCt
Web標準のJavaScriptだけで楕円曲線ディフィー・ヘルマン鍵共有してE2E暗号化用の鍵を生成してAES-GCMで暗号化/復号する一連の流れ
StreamSaver.jsがサポートされているか確認する
#StreamSaver.js #WebブラウザのJavaScript[*** 確認]https://gist.githack.com/nwtgck/55945861612869d9225a7de61780cef5/raw/StreamSaver.js-support-check.html[*** [Gist]][https://gist.github.com/nwtgck/55945861612869d9225a7de61780cef5]
JavaScript
JavaScriptで「for(let i = 0; ...」と「let i; for(i = 0; ... 」の挙動は同じとは限らない
#JavaScript #for文 #レキシカルスコープ #クロージャ[Google Chrome]で検証。[*** for(let i = 0; ...]以下は昔ながらfor文を`let`を使って書いたもの。`for(let i = 0; i < 10; i++) {`
Dependabotのリポジトリ追加でLoad more reposを自動で押し続けるブックマークレット
NippのURLから内部のコードを抽出するNipp
#Nipp #JavaScript[Nipp]のホスト先のドメインなど関係なく、URLのフラグメント(`#`以降)からコードが抽出できる。[https://nipp.nwtgck.org/#Extract_Nipp_Code_from_URL/es2017/rY9Bi9swEIXv/hVzKNgG49BrQihLNpRCmi3b5NKyNKo0jlVkSYzkZtuQ/96RkzQO9NiDZc3M+0bvTSbwSVBA2D6vQFgF+BpJyAhRR4MVOB+1s+E8stIpVAs+sqa3Mk3AJ3qtvd+SgaIn
JavaScriptの「null == undefined」はtrue
#JavaScript[Nipp]: https://nipp.nwtgck.org/#/es2017/yyvNyVGwtVUozUtJTcvMS00BAA==関連:[JavaScriptの「==」の評価アルゴリズムはAbstract Equality Comparison Algorithmという]
大雑把にJavaScriptで年齢を算出する
#JavaScript`Math.floor((new Date() - new Date("1995-12-17T03:24:00")) / (365 * 24 * 60 * 60 * 1000)) + "歳"`"1995-12-17T03:24:00"は[Date - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date]からとったもので、好きな生年月日を入れれば良い。
JavaScriptのAbortControllerは使い回すべきではなさそう
#AbortController #JavaScript #fetch[JavaScripit]の`fetch()`を中断させた時などに使う`AbortController`は使い回すべきではなさそうなことが分かった。なんとなくそのような気がしていたがちゃんと試した。一度`abort()`した`AbortController`は中断したという状態を保持し続けるような実装になっているように見える。他の実装の可能性として`EventTarget`のようにイベントが発生した瞬間に中断が発生するようなことがありえると思うがそうではなさそう。
JavaScriptのTemporalのPolyfillをCDN経由で<script src="...">する時のURL
#Temporal #JavaScript #Polyfill[*** やりたいこと]「[JavaScriptの日時処理はこう変わる! Temporal入門 - Qiita https://qiita.com/uhyo/items/5f34f5d6f33aa091a104]」を軽く眺めていると、イミュータブルな時刻表現だったり、今までの`Date`でいけてないところが改善した良さそうな感じがしたので、試したくなった。
KBやMBやGBをバイトに変換するNipp
#JavaScript[Nipp]: [https://nipp.nwtgck.org/#/es2017/NY7dSsNAEIXv+xTHIHQmhsV6K1EIFBERRLzRNFBtJnWh3chmo4GSd7eZdi/mYwbOzxAx8jscZkDTetq0rgsobT1k6J0NFdoGpTGmTIokQ/KkfFY+KN+UL8ql8kP5XiSVERe8lY64Ml5+xXdCzFMXcGraf4bNt9
バイトをKBやMBやGBをつけた読みやすい表示にするNipp
#JavaScript[Nipp]: [https://nipp.nwtgck.org/#Get_Readable_Bytes/es2017/TY9Pa4NAEMXv+ykGCUSLrbX0VOtFCKWUpoXk0oZA/DPaBRnD7iopxu/edbcxzuGxO2/3/WbKlnLFGwKBaZFmNSa/CuVGCU6Vm41nD3oGuvKGpIKWuJIQw85JHB+cN6PvRl+Mbo1+Gl0Z
Webブラウザでカメラの映像を確認できるシンプルなNipp
#JavaScript #Nipp[https://nipp.nwtgck.org/#/es2017,click_run/jY9Bb9QwEIXv+RXTcFhb2jhbLki7ClJLewRO/ACvPUkNiScajzeKqv3vuClCKnDg4MO8mfc+v7YF1TNNR3gSmdOxbe08G0ceBw7eRJQWo/Davj/cfmgGlCYn5GZCH2xzq6vQq5slRE+LmdZL8EganiuAtxp0
PageSpeed InsightsのAPIが存在してブラウザのJavaScriptからも叩ける
#PageSpeed_Insights #API #JavaScript[Nipp]:[https://nipp.nwtgck.org/#/es2017,click_run,promise_wait/RY3LCsIwEEX3/YpZuEihNCC4UaoLdy5U8AcaYppG4iTkYSml/24qtt0Mw7ln7hDme+RAcqiOMGQA3KAPEJ2GCvxhAcyqM9MTrNsQrN9T2nVdKY2RWqTQl9y8qWVSeCvE06BWKOhnR13E+0x
「"」ダブルクォートの文字列を「'」シングルクォートに変換するNipp
#single_quote #Nipp #変換[*** やりたいこと]`"I'm John Smith"`のようなダブルクォートの文字列表現をシングルクォートな文字列に変換したい時に使う。例えば[Bash]などダブルクォートな文字列だと意味が変わる場面で使える。[*** Nipp]
数の読み方のNipp
[Nipp]: [https://nipp.nwtgck.org/#Kazu_Yomikata//y1awVVAN14hRUHiyo13haUuLwtPWNoUnu9YoPJ03WeHD0rkbFZ6vXKzwbNdchWf7pis8W7tY4cWeToVnS7cqPGuc9GzT5mebZiq8nLH/afPy50vbFV42LX4+ZeOT3dOAxvU+7V//rGHui7UbFJ63LHz[JavaScript]だと以下が便利そうだった。
JavaScriptで整数 ⇄ 4バイトのバイト列の相互変換
#JavaScript #バイナリ #4バイト追記: 「[JavaScriptで整数 ⇄ バイト列に相互変換]」ですでにやっていたことを発見した...[JavaScript]の整数 (number) バイナリ表現(Uint8Array)に変換する方法。`// number => Uint8Array``function fourBytesIntToUint8Array(n) {`
ブックマーク代わりにScrapboxに貯めていくブックマークレットを作った(タグ自動生成つき)
JavaScriptのReadableStream「byob」は「Bring Your Own Buffer」の略
#JavaScript`readableStream.getReader({ mode: "byob" });`>First create the reader using ReadableStream.getReader() on the stream, specifying mode: "byob" in the options parameter. As this is a "Bring Your Own Buffer" reader, we also need to create an ArrayB
JavaScriptのstructuredClone()の情報
#JavaScript[Google Chrome Canary]:[SurmaさんはTwitterを使っています 「Chrome Canary just got structuredClone()! That means *all* browsers (yes, even Safari) and Deno now support structuredClone() in their nightlies (some even shipped it to stabl
Rust (Hyper) 版とTypeScript版のPiping Serverの違い
#piping-server-rust #piping-server #Piping_Server #Rust #TypeScript[5a8b42c486 https://github.com/nwtgck/piping-server-rust/tree/5a8b42c486616e44286216aa5d5d39f17838534c] 時点での話。追記:上記のコミットから先の時点でも以下のリストに追記をしている。
JavaScriptで文字列などを一発でReadableStreamに変換する小技
#JavaScript以下のように[Reponse https://fetch.spec.whatwg.org/#response-class]を使えば簡単にできる。
strict modeではないことを「sloppy mode」と呼ぶらしい
#JavaScript #用語 #逆 #反対 #対義語> The normal, non-strict mode of JavaScript is sometimes referred to as sloppy mode.[Sloppy mode - MDN Web Docs Glossary: Definitions of Web-related terms | MDN https://developer.mozilla.org/en-US/docs/Glossary/Sloppy_mode]
なぜPiping ServerのデフォルトのWeb UIは質素なのか?
GitHub Actionsで実行中のワークフローに飛ぶためのURLを取得したい
New Links
XHR
Created
6 years ago
by
Ryo Ota
Updated
6 years ago
by
Ryo Ota
Views: 203
Page rank: 12.4
Copy link
Copy readable link
Start presentation
Hide dots
XMLHttpRequest
#HTTP
#WebブラウザのJavaScript
#JavaScript
#XHR
XMLHttpRequest - Web API | MDN