在像 HTTP 这样的客户端 - 服务器协议中,会话一般包含三个部分:
- 客户端建立 TCP 连接(或者如果传输层不是 TCP 的话就是某种适当的连接)。
- 客户端发送请求,并等待服务器应答
- 服务器处理请求,回送应答,提供状态码和适当的数据。
对于 HTTP/1.1来说,在完成第三步以后,连接不再被关闭,客户端可以立刻发起进一步的请求:这意味着第二、三两步现在可以执行任意次。即连接的复用。
在像 HTTP 这样的客户端 - 服务器协议中,会话一般包含三个部分:
对于 HTTP/1.1来说,在完成第三步以后,连接不再被关闭,客户端可以立刻发起进一步的请求:这意味着第二、三两步现在可以执行任意次。即连接的复用。
翻译原文:Request
A request message from a client to a server includes, within the first line of that message, the method to be applied to the resource, the identifier of the resource, and the protocol version in use.
一个从客户端发送到服务器的请求消息的行首(请求的第一行)中包括了,操作资源的method方法(GET/POST/PUT等),资源标识符(即URI),以及使用的协议版本(HTTP/1.1,HTTP/1.2等)。
完整的请求消息结构如下,包含了4个部分:行首,请求头,换行,消息体1
2
3
4
5
6Request = Request-Line ; 行首(1)
*(( general-header ; 通用头部(2)
| request-header ; 请求头部(2)
| entity-header ) CRLF) ; 实体头部(2)
CRLF ; 请求头与消息体之间有换行(3)
[ message-body ] ; 消息体(4)
这显然是个棘手的问题,可能大多数程序员会认为这个表达式会返回一个类似 [1,2,3]
的数组,如果你在浏览器中输入上面的表达式回车后,就会看到实际返回的是 [1, NaN, NaN]
。
解释如下,parseInt
作为 JavaScript
的内置函数,试图将一个字符串转换为数值,并返回该数值。所以,一个这样的调用:1
const n = parseInt('123');
应该将数值 123
赋给变量 n
。
你应该知道,当遇到字符串无法转换为数值的时候,parseInt
方法会返回 NaN
,NaN
是 Not a Number
的缩写,通常意味着出现了某种数值计算错误。所以,一个这样的表达式:1
const x = parseInt('xyz');
会将 NaN
赋值给变量 x
。
原文: NGINX: Proxy folders to different root
这篇教程教你在 Nginx 中将站点的不同目录设置成不同的反向代理站点的根目录。
默认情况下,假设有一个设置了 proxy_pass
的 location
区块,这个 location
区块匹配的是一个目录,例如 /nagios
,访问这个目录将跳转到代理服务器:1
2
3
4
5
6
7
8location /nagios/ {
proxy_pass http://10.0.21.8:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
当在浏览器中访问的时候,上面的配置会将你的请求发送到 http://10.0.21.8/nagios/
,因为这就是 Nginx location
的默认行为。然而如果你想要浏览器转发请求到 http://10.0.21.8/
,你要么 rewrite
URL 要么就使用 /
location。
微信小程序要求使用 https
发送请求,并且 TLS
(传输层安全协议)的版本至少为 1.2
,在配置好 https
之后,如果 TLS
的版本较低,就涉及到升级问题
从申请免费证书到配置 Nginx HTTPS 配置,有一篇比较完整的教程:微信小程序Server端环境配置
Linux 下配置的教程有很多,这里记录一下 Windows 中的配置过程,公司的 Nginx 跑在 Windows Server 上。
当前 Nginx 配置中,Https 有关的配置:1
2
3
4
5
6
7
8ssl_certificate 1_gis.wohitech.com_bundle.crt;
ssl_certificate_key 2_gis.wohitech.com.key;
ssl on;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
最近在公司搭建 Jenkins 持续集成环境,要将测试环境中配置的 Jenkins 作业导入到正式环境中,上网找了下资料,大概有三种可行的方案:
有更好的办法欢迎交流。
原文:Using CORS
APIs are the threads that let you stitch together a rich web experience. But this experience has a hard time translating to the browser, where the options for cross-domain requests are limited to techniques like JSON-P(which has limited use due to security concerns) or setting up a custom proxy (which can be a pain to set up and maintain).
API 是让你将丰富的 web 体验拼接在一起的纽带。但是在过去,跨域请求被限制只能在一些技术上使用的时候,例如 JSON-P(出于安全考虑,使用上有诸多限制)或者设置自定义代理(难于设置和维护),这些体验是很难在浏览器中实现的。
Cross-Origin Resource Sharing (CORS) is a W3C spec that allows cross-domain communication from the browser. By building on top of the XMLHttpRequest object, CORS allows developers to work with the same idioms as same-domain requests.
跨源资源共享 (CORS)是一个 W3C 规范,允许浏览器跨域通信。建立在 XMLHttpRequest 对象之上,CORS 允许开发者使用与同域请求相同的语法。
谁都会有手抖的时候,晚上远程公司的ArchLinux时不小心 sudo rm -rf Desktop
了一下,然后开始尝试恢复误删文件。
google了一篇恢复的教程:PhotoRec – Recover Deleted or Lost Files in Linux
当我们不小心用 shift + delete
,删除选项,或者清空回收站的方式删除了文件的时候,文件的内容实际上并没有被从硬盘上擦除。系统只是简单的将这些文件从目录结构中移除了,所以在被删的文件夹下看不到删除的文件了,但是他们实际上仍然保存在硬盘上被删除的位置上。
只要具备了正确的工具和知识,你就可以将他们从电脑上恢复出来。但是如果你从硬盘上恢复更多文件时,最近被删除的文件可能会被覆盖,导致你可能拿不到最近删除的文件。
原文:What’s the difference between a tilde (~) and a caret (^) in a npm package.json file?
如果你用 npm
来管理 JavaScript
应用程序的 package
,那你应该熟悉 package.json
文件了。1
2
3
4
5{
"devDependencies": {
"ember-cli": "~2.14.0"
}
}
语法是 JSON
格式,key 是 package 的名称,value 是要使用的这个 package 的版本号。
在公司台式机上装了Arch Linux,自己的笔记本用Windows,用Synergy共享键鼠,由于网口有限,台式机接有线,笔记本连wifi,不在一个网段内,公司网络不稳定,Synergy时不时会断开连接,于是就想把手里的Realtek-8812AU(后面简称无线网卡)用在台式机上,这样台式机和笔记本都连wifi,出问题的概率应该会小一点。