调试工具
curl
HTTP/TCP
- 同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。
-
cookies 存储在浏览器(客户端)上,通过HTTP的请求头传输给服务器
断开连接
通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。不过如果浏览器或者服务器在其头信息中加入了:
Connection:Keep-Alive
那么 TCP 连接在发送后将仍然保持打开状态,这样浏览器就可以继续通过同一个 TCP 连接发送请求。保持 TCP 连接可以省去下次请求时需要建立连接的时间,提升资源加载速度。比如,一个 Web 页面中内嵌的图片就都来自同一个 Web 站点,如果初始化了一个持久连接,你就可以复用该连接,以请求其他资源,而不需要重新再建立新的 TCP 连接。
重定向
状态码:301
响应头字段:location
告诉浏览器,我需要重定向到另外一个网址,而需要重定向的网址正是包含在响应头的 Location 字段中,接下来,浏览器获取 Location 字段中的地址,并使用该地址重新导航,这就是一个完整重定向的执行流程。
//响应行
HTTP/1.1 301 Moved Permanently
//响应头
Date: Thu,08 Aug 2019 00:55:44 GMT
Content-Type: text/html
Content-Length:178
Connection: keep-alive
Location: https://www. geekbang. org/
Strict-Transport-Security: max-age=15768000
浏览器缓存机制
- DNS缓存
- 页面资源缓存
通过响应头字段Cache-Control来设置是否缓存,其下的Max-age参数来设置存活时长(秒)
响应头:
Cache-Control:Max-age=2000
存活时间内不再向服务器请求,直接调用本地的缓存,超过存活时间就进行重新请求,并在请求头中加入If-None-Match字段,服务器收到请求后,通过其值判断资源是否有更新
请求头:
If-None-Match:"4f80f-13c-3a1xb12a"
- 如果没有更新,就返回 304 状态码,相当于服务器 告诉浏览器:“这个缓存可以继续使用,这次就不重复发送数据给你了。”
-
如果资源有更新,服务器就直接返回最新资源给浏览器。
SESSION/COOKIE
以登录为例
- 浏览器向服务器提交请求,账号密码保存在请求体中
- 服务器收到请求,验证之后存入SESSION,返回响应,SESSION_ID存在响应头中的SET-COOKIE字段中UID参数中
- 浏览器收到响应,将SET-COOKIE字段中的参数存入本地COOKIE中,之后每次请求服务器都将自身的COOKIE进入提交,其中包括从服务器得到的UID参数,服务器通过UID/SESSION_ID就能访问为对应浏览器存储的SESSION