调查目的:了解当前各基于TLS的协议方案中ClientHello的指纹独特性。理论背景见 https://arxiv.org/abs/1607.01639 。
指纹数据库:
(利益相关:我是这个的作者)
调查目的:了解当前各基于TLS的协议方案中ClientHello的指纹独特性。理论背景见 https://arxiv.org/abs/1607.01639 。
指纹数据库:
(利益相关:我是这个的作者)
| module.exports = { | |
| pages: { | |
| pageA: 'src/pageA.js', | |
| pageB: 'src/pageB.js', | |
| pageC: 'src/pageC.js', | |
| }, | |
| chainWebpack: config => { | |
| const options = module.exports | |
| const pages = options.pages | 
| const MODULE_DIR = /(.*([\/\\]node_modules|\.\.)[\/\\](@[^\/\\]+[\/\\])?[^\/\\]+)([\/\\].*)?$/g; | |
| { | |
| loader: 'babel-loader', | |
| test: /\.jsx?$/, | |
| include(filepath) { | |
| if (filepath.split(/[/\\]/).indexOf('node_modules')===-1) return true; | |
| let pkg, manifest = path.resolve(filepath.replace(MODULE_DIR, '$1'), 'package.json'); | |
| try { pkg = JSON.parse(fs.readFileSync(manifest)); } catch (e) {} | |
| return !!(pkg.module || pkg['jsnext:main']); | 
| var str = 'class ಠ_ಠ extends Array {constructor(j = "a", ...c) {const q = (({u: e}) => {return { [`s${c}`]: Symbol(j) };})({});super(j, q, ...c);}}' + | |
| 'new Promise((f) => {const a = function* (){return "\u{20BB7}".match(/./u)[0].length === 2 || true;};for (let vre of a()) {' + | |
| 'const [uw, as, he, re] = [new Set(), new WeakSet(), new Map(), new WeakMap()];break;}f(new Proxy({}, {get: (han, h) => h in han ? han[h] ' + | |
| ': "42".repeat(0o10)}));}).then(bi => new ಠ_ಠ(bi.rd));'; | |
| try { | |
| eval(str); | |
| } catch(e) { | |
| alert('Your browser does not support ES6!') | |
| } | 
| #!/bin/bash | |
| for c in $(brew cask list); do | |
| info=$(brew cask info $c) | |
| installed_ver=$(echo "$info" | cut -d$'\n' -f1 | tr -d ' ' | cut -d':' -f 2) | |
| current_ver=$(echo "$info" | cut -d$'\n' -f3 | cut -d' ' -f 1 | rev | cut -d'/' -f 1 | rev) | |
| if [ "$installed_ver" != "$current_ver" ]; then | |
| echo "$c is installed '$installed_ver', current is '$current_ver'" | |
| brew cask reinstall $c | |
| fi | 
Following our series on HTTP, here is a quick note on HTTP status code, sent with the HTTP response. They are organized in 5 categories:
1xx Informational, ex:
100 Continue used when doing a multi-part file upload101 Switching Protocol used when switching from HTTP to WebSocket2xx Success, ex:
| -- A global variable for the Hyper Mode | |
| k = hs.hotkey.modal.new({}, "F17") | |
| -- Trigger existing hyper key shortcuts | |
| k:bind({}, 'm', nil, function() hs.eventtap.keyStroke({"cmd","alt","shift","ctrl"}, 'm') end) | |
| -- OR build your own | |
| launch = function(appname) | 
| npm set registry https://r.npm.taobao.org # 注册模块镜像 | |
| npm set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像 | |
| ## 以下选择添加 | |
| npm set sass_binary_site https://npm.taobao.org/mirrors/node-sass # node-sass 二进制包镜像 | |
| npm set electron_mirror https://npm.taobao.org/mirrors/electron/ # electron 二进制包镜像 | |
| npm set ELECTRON_MIRROR https://cdn.npm.taobao.org/dist/electron/ # electron 二进制包镜像 | |
| npm set puppeteer_download_host https://npm.taobao.org/mirrors # puppeteer 二进制包镜像 | |
| npm set chromedriver_cdnurl https://npm.taobao.org/mirrors/chromedriver # chromedriver 二进制包镜像 | |
| npm set operadriver_cdnurl https://npm.taobao.org/mirrors/operadriver # operadriver 二进制包镜像 | 
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> | |
| <title>Auto play html audio in iOS WeChat InAppBrowser the right way</title> | |
| </head> | |
| <body> | |
| <h1>在 iOS 微信浏览器中自动播放 HTML5 audio(音乐) 的正确方式</h1> | |
| <p>核心原理: 在微信的JS-API 中 play 一下 audio 即可达到自动播放的目的(应该是微信自己做了处理)</p> | 
| map $http_origin $allow_origin { | |
| default ""; | |
| "~^https?://(?:[^/]*\.)?(stevebuzonas\.(?:com|local))(?::[0-9]+)?$" "$http_origin"; | |
| } | |
| map $request_method $cors_method { | |
| default "allowed"; | |
| "OPTIONS" "preflight"; | |
| } |