chenxiaochun
chenxiaochun
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/execCommand
```css text-align-last: justify; ``` https://github.com/jawil/blog/issues/29
## 需求描述 最近开发[京东旅行](https://train.jd.com/)的一个买票选择座位功能,当你订票时选择的是送票上门,可以在线选择座位位置,因为每个订单最多只能预订5位乘客(包括儿童)的票,因此每种座位类型的选择逻辑如下: * 商务座/一等座 一排显示三个座位,乘客人数大于3时,需要显示两排座位 * 二等座 一排显示五个座位,可以任意选择 * 普通硬座 只允许乘客选择靠窗位置的座位数 * 硬卧/软卧 只允许乘客选择下铺的数目,并且乘客数大于等于2时,不能保证会在同一包厢(不是车厢) ### 这几种座位之间的共同点是: 1. 对于高铁票,点击可以选择一个座位,再次点击就是取消已选择的座位 2. 选择座位时,如果已选择的座位数超过了乘客数,则最早选择的那个座位会被自动取消掉,依次类推 3. 删除乘客时,也是优先取消最早选择的座位 4. 当座位显示了两排,然后删除乘客时,如果一排的座位数可以满足当前的乘客数,则自动取消掉最早选择的那一排座位 5. 卧铺的逻辑很简单,只要已选择的铺位数不会大于乘客数即可 ## 功能实现 需求已经写清楚了,我先模拟一个高铁在线选座的界面出来:...
给模块创建一个符号链接,别名:`npm ln`。 首先,使用 Javascript 创建一个可执行脚本`foo`: ```javascript #!/usr/bin/env node console.log('foo'); ``` 在命令行中输入: ```vim ./foo ``` 可能提示: ```vim zsh: permission denied: ./foo ``` 那就更改一下执行权限: ```vim chmod 775 ./foo ``` 输出: ``` foo...
假设我们有一个`index.html`中写了这样一个`iframe`元素: ```html click var button = document.getElementById('button'); var child = window.iframe; button.onclick = function(){ child.say(); } ``` 在`child.html`中定义一个js函数,以供父页面进行调用: ```javascript function say(){ alert('hello'); } ```
## HTTP的缺点 我们已经了解到HTTP有相当优秀的一面,但事物都有两面性,它也有不足的一面。 ### 通信使用明文,内容可能会被窃听 1. 通信的加密 HTTP本身不具有加密的功能,无法做到对通信整体进行加密。即使已经加密过的通信,也会被窥视到通信内容。只是通信经过加密后,就可能让人无法破解报文信息的含义。 2. 内容的加密 就是把HTTP报文里所含的内容进行加密处理,前提是要求客户端和服务器同时具备加密和解密的机制。 ### 不验证通信方的身份,因此有可能遭遇伪装 HTTP通过SSL(Secure Socket Layer,安全套接层)或者TLS(Transport Layer Security,安全层传输协议)的组合使用来加密通信。 SSL不仅提供加密处理,还会使用一种被称作证书的手段。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。 ### 无法证明报文的完整性,所以有可能已遭篡改 HTTP协议无法证明通信的报文完整性,在请求或响应送出之后,即使遭到了篡改,也没有办法获悉。像这样,在请求或响应传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Main-in-the-Middle attack,MITM)。 防止篡改常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。提供文件下载服务的网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名以及MD5算法生成的散列值。PGP是用来证明创建文件的数字签名,MD5是由单向函数生成的散列值。 ## HTTP+加密+认证+完整性保护=HTTPS SSL采用一种叫做公开密(Public-key cryptography)钥加密的加密处理方式。加密算法是公开的,而密钥是保密的。当然了,加密和解密都需要用到密钥。也就是说,任何人只要持有密钥就能解密了。...
假设html结构定义为以下形式: ```html 这是wapper 这里是footer ``` ## 第一种方法 ```css body{ margin: 0; display: flex; flex-flow: column; min-height: 100vh; } .wrapper{ background: #ccc; flex: 1; text-align: center; } footer{ height: 80px; background:...
HTTP首部字段是可以自行扩展的。接下来,我们就介绍一些常用的首部字段进行说明。 ### 一、X-Frame-Options 此首部字段用于控制网站被嵌套在Frame中时的显示问题。它有两个字段值: * DENY 拒绝 * SAMEORIGIN 仅同源域名下的页面匹配时许可。 ### 二、X-XSS-Protection 它是针对跨站脚本攻击(XSS)的一种对策,可指定的字段值: * 0 将XSS过滤设置成无效状态 * 1 将XSS过滤设置成有效状态 ```http X-XSS-Protection: 1 ``` ### 三、DNT 它是Do Not Trace的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。它的字段值: * 0...
实体首部字体是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。 ### 一、Allow 此首部字段用于告知客户端能够支持Request-URI指定资源的HTTP方法。当服务器收到不支持的HTTP方法时,会返回状态码405 Method Not Allowed,并且还会把所有支持的HTTP方法写入首部字段Allow后返回。 ```http Allow: GET, HEAD ``` ### 二、Content-Encoding 此首部字段用于告知客户端服务器对实体的主体部分选用的内容编码方式。 ```http Content-Encoding: gzip ``` ### 三、Content-Language 此首部字体用于告知客户端,实体主体使用的自然语言(指中文或者英文等)。 ```http Content-Language: zh-CN ``` ### 四、Content-Length 此首部字段表明了实体主体部分的大小(单位是字节)。对实体主体进行内容编码传输时,不能再使用Content-Length首部字段。 ```http...