文章目录
  1. 1. Post & Get
  2. 2. Http缓存机制
    1. 2.1. 缓存控制
    2. 2.2. 缓存生命和认证
    3. 2.3. 缓存更新机制
    4. 2.4. ETag response header
    5. 2.5. 缓存认证机制
  3. 3. DNS解析方法
  4. 4. 跨域/同源策略
  5. 5. XSS/CSRF
  6. 6. JS严格模式
  7. 7. JS设计模式
  8. 8. 排序方法(涉及算法)
  9. 9. 异步流程控制
  10. 10. 数据库查询优化
  11. 11. 平常用的开源库??0. 0

Post & Get

The GET method is a safe method (or nullipotent), meaning that calling it produces no side-effects: retrieving or accessing a record does not change it. The PUT and DELETE methods are idempotent, meaning that the state of the system exposed by the API is unchanged no matter how many times more than once the same request is repeated.

Get 可以多次重复请求而不存在副作用, 但是Post没法做到..然后大众化的讲, 就是get用来View, post用来change.

Refer

觉得还是要提一下这个=, =RESTful URL based

Http缓存机制

看到这个问题想到了加载问题, 差不多就是用户体验/后台性能方面.
cache 分两种 Public/Shared 和 Private/Local
Public减缓服务器压力, private则是对本地

缓存控制

通过Http的Cache-Control的Header字段来控制, 值得注意的是下面这两个value:
no-storeVSno-cache, 前一个表示禁用cache, 后面一个则是在每次缓存copy的之前需要向服务端进行认证而不是禁用cache.

缓存生命和认证

字段和前面的一样, value换了: max-age=3600. 表示重新缓存之前最长能保存3600秒.
Cache-Control: must-revalidate这个字段和前面的no-cache有点不一样, 只要这个字段一接收到, 必须要对缓存内容认证, 如果认证失败则丢弃缓存重新获取.

缓存更新机制

图基本能解释了, 存在一个生命周期,每次交互都会增加年龄,当达到生命上限时进行cache比对,仍然不变则返回http/1.1 304 Not Modified;否则重新获取进行cache
cache-freshness

ETag response header

ETag响应头是一个可以被用来做强验证的非透明用户代理值(opaque-to-the-useragent).作用是user-agent用户端(浏览器)通过发送If-None-Match头给下一次的请求来要求验证缓存的文档是否修改,因为对于用户端来说他无法知道发送过来的数据是否正确, 也无法预测.

Last-Modified这个响应头用来作为一个弱验证头, 原因是他只拥有1秒的周期(1-second-resolution不清楚是否是这样翻译).如果该字段被响应头表示出来的话, 客户端可以发送一个If-Modified-Since的请求头来验证缓存的文档数据.

对于服务器(server)来讲: 他可以通过发送200 OK来无视认证, 也可以发送304 Not Modified来指定浏览器(client)使用缓存数据, 304这个方案还可以更新缓存过期时间.

缓存认证机制

按图来看还是很简单的流程, cache需要满足所有client所请求的内容.
cache-varifing

Refer-MDN

DNS解析方法

看到这个问题想到以前碰到过dns查询递归的问题, 不过查了一下= =好特么简单, 其实就是拥有域名之后就能懂得的一些内容..
这里随便提一下:

  1. DNS记录指向 相当于说你要哪家DNS服务商解析你的域名
  2. A记录 高级域名 -> IP
  3. CName 高级域名 -> 其他域名
  4. 以前申请过企业域名, 就会用到MX记录.这个需要两条记录, 一条是MX记录 mail.xxx的高级域名 -> mail.服务商域名
    另一条就是 CName/A记录, 通过唯一识别码来识别企业域名的邮箱位置.

关于DNS解析过程@Marlous借用的这个流程很详细了

跨域/同源策略

具体参考这篇知乎@NoSec 2017-04写的
还要了解一下URL结构

关于方式: AJAX只能使用同域资源
跨域:

  1. JSONP 这里需要注意一个问题: POST和JSONP
    jQuery - ajaxAPI这个也需要熟悉, 而且自定义的jsonp函数会覆盖success调用
    做了个demo, 基本涵盖到了.
    实质上就是数据在server端, 但是通过callback参数可以使用client端的函数并返回结果.

  2. WebSocket 搜到这篇文章长连接/短连接/长轮询/websocket解释很棒.
    http/1.1默认长连接: HTTP协议:Connection: keep-alive 这个有点像是多人在线状态显示的那种技术=, =
    轮询: client通过setInterval这种方式像server不断发送请求来保持连接
    WebSocket: H5技术 scheme ws/wss(TSL加密)

  3. CORS

XSS/CSRF

difference between XSS&CSRF
CSRF需要建立在可信session.
有两个关于CSRF的视频感觉挺好的 understanding CSRF&
Cross Site Request Forgery
讲一下原理: Tabs共用同一个session, 所以没有anti-forgery的token的话就会被授权进行越权操作.
anti-forgery的方式就是创建一个对应的token组, tokenA放入后端, tokenB存入cookie, cookie对于认证用户是唯一的.
还有一个HTTP-only, 保证cookie无法被script所读取

JS严格模式

严格模式真的很严格~

  1. 拼写错误
  2. 对不同类型的值重新赋值->TypeError
  3. 删除不可删除属性
  4. 重名属性(<ES6)/函数重名参数
  5. 八进制012语法
  6. Primitive类型禁止配置属性
  7. 禁用with;eval不会污染当前域和上级域变量
  8. 无法删除声明变量
  9. etc以及相关代码↓
    ReferMDN

JS设计模式

我记得掘金有篇文章挺详细的

排序方法(涉及算法)

前人栽树, 后人乘凉.
Refer: 排序-louis

异步流程控制

数据库查询优化

平常用的开源库??0. 0

文章目录
  1. 1. Post & Get
  2. 2. Http缓存机制
    1. 2.1. 缓存控制
    2. 2.2. 缓存生命和认证
    3. 2.3. 缓存更新机制
    4. 2.4. ETag response header
    5. 2.5. 缓存认证机制
  3. 3. DNS解析方法
  4. 4. 跨域/同源策略
  5. 5. XSS/CSRF
  6. 6. JS严格模式
  7. 7. JS设计模式
  8. 8. 排序方法(涉及算法)
  9. 9. 异步流程控制
  10. 10. 数据库查询优化
  11. 11. 平常用的开源库??0. 0