小知识点记录:
状态码:204是http响应中传输数据量最小的,body为空,content-length为0,这种状态可以用于性能优化中,对于一个大型网站,对于一些不需要返回数据的请求就可以使用204状态码,减少传输的数据量,减少带宽浪费。
/*************************************** 正文 ****************************************************/
http相关的三大协议:** tcp + ip + dns **。
http的几大方法:
- get:请求资源
- post:发送数据
- put:发送文件
- delete:删除文件
- trace:追踪路径
- options:请求资源允许的获取方法
- head:返回响应的报文头部(报文体不返回)
- connect:建立隧道进行数据传输
http是持久连接,节省tcp链接反复断开和重建的时间,提高速度。
http是无状态协议,要保持登录等状态的场景下,需要借助cookie来维持状态;在请求和响应的报文头部,需要携带相应的cookie信息。
http响应类别有以下5种:
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Information(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
当在浏览器中输入一个url或者按F5刷新页面的时候,都发生了什么:
1. 域名解析:首先进行DNS查找,先浏览器查找自身的DNS缓存(查看方式:chrome://net-internals/#dns,chrome是1min过期)
2. 若浏览器没查找到,则查找操作系统的DNS缓存(存放在某一文件中,一般1d过期)
3. 若还是没查找到,读取本地HOST文件
4. 若未找到,浏览器发起一个DNS的系统调用
a)宽带运营商服务器查看本身缓存
b)若无,运营商服务器代替浏览器发起一个迭代DNS解析的请求(接下来就是一些DNS根域等进行查找的过程)。结果获取到后,运营商服务器把结果返回操作系统内核,并缓存。内核再把结果返回浏览器,浏览器至此获取到了目标域名的IP地址。
5. 浏览器拿到IP后,进行TCP/IP三次握手,建立连接
6. 链接建立好后,进行http请求的发送
7. 服务器接收到请求,进行一些后端处理并返回,假如请求的是个页面,则返回相应的html代码
8. 浏览器拿到html代码后,在解析和渲染的过程中,里面的js、css、图片静态资源,他们也是一个个的http请求,也会经历上面的步骤进行获取。
9. 最终一个完整的页面呈现给用户。
http请求头部信息中,会指定host字段,这是因为,一台物理服务器上可能部署多个web站点,在真实的网络通信中,域名被解析成ip地址,所以到了服务器端的话,可能ip地址都是一样的,究竟访问的是哪个站点,就需要请求头部信息中的host字段来区分了。
网关和代理区别的理解:二者工作方式比较相近
网关:一个局域网统一的出口,可以使用非http协议,可加密保障安全性;
代理:通过设置代理服务器,从而更快的到达目标服务器(如公司禁止登陆qq,可通过设置代理的方式),分缓存代理和透明代理(对报文不做处理,直接转发)
隧道:比较安全的一种通信方式
缓存服务器:减少服务器压力(注意:缓存文件的有效性)
报文首部与报文主体之间有一个空行(CR+LF),报文首部包含:
请求|响应行;请求首部字段;通用首部字段;实体首部字段;其他;
请求行:方法 url http版本
响应行:http版本 状态码 短语
首部字段的值 可以有多个
http首部字段类型:
请求首部字段 响应首部字段 通用首部字段 实体首部字段
Language分类:
以下两种写法均正确,后者描述更精准(新标准),但目前浏览器和操作系统都只支持前者,使用新标准可能会造成无法匹配浏览器用户定义字体、网页翻译、程序语言自动切换等功能,前端和码农为了兼容性推荐使用前者:
zh-CN 中文(简体, 中国大陆) 对应cmn-Hans-CN 普通话 (简体,中国大陆)
zh-SG 中文(简体, 新加坡) 对应 cmn-Hans-SG 普通话(简体, 新加坡)
zh-HK 中文(繁体, 香港) 对应 cmn-Hant-HK 普通话(繁体, 香港)
zh-MO 中文(繁体, 澳门) 对应 cmn-Hant-MO 普通话(繁体, 澳门)
zh-TW 中文(繁体, 台湾) 对应 cmn-Hant-TW 普通话(繁体, 台湾)
9种浏览器端缓存机制(开发者工具-resource下的既是):
- WebSql IndexedDB:浏览器可以实现小型数据库功能来存储数据
- Application Cache:离线应用(缓存的文件存储在manifest文件中)
- Cache:
- Storage:
HTTP通用首部字段
字段 | 说明 |
---|---|
Cache-Control | 缓存相关的指令(请求+响应),详情见下表 |
Connection | 1、跳到跳:不再被转发的字段,需删除相应字段后再转发; 2、端到端:管理持久连接keep-alive 、close |
Date | 报文创建日期 |
Via | 追踪报文传输路径,每经过一个服务器都会加入对应服务器的信息 |
Upgrade | 协商是否可以使用其他版本协议或其他协议来通信,服务器可以返回101switching protocols来响应 |
Transfer-Encoding | 报文主体传输编码方式:chunked分块传输(跳到跳) |
Pragma | http1.1废弃字段,为了兼容,控制缓存时,一般同时指明cache-control: no-cache 与 pragma: no-cache |
trailer | 在报文主体尾部定义的其他字段 |
Warning | 与缓存相关的警告信息(警告码+详情) |
Cache-control字段相关的取值
取值 | 客户端发起的请求 | 服务器返回的响应 |
---|---|---|
No-Cache | 不要缓存的内容,必须转发至源服务器(其实缓存服务器会向源服务器发起验证,若通过则还是返回缓存) | 缓存服务器可以缓存,但是使用前需要验证有效性 |
No-Store | 不缓存请求相关的信息 | 不缓存响应相关的信息 |
Public | 其他人都可以使用缓存 | |
Private | 只有特定用户可以使用缓存 | |
Max-age | 请求缓存时间不超过给定值的缓存 | 资源可以缓存的最大时间(最大缓存有效期) |
s-maxage | 同max-age,但是特指公共缓存服务器 | |
Min-fresh | 请求缓存新鲜时间不小于给定值的缓存 | |
Max-stale | 请求过期时间不超过给定值的缓存 | |
Only-if-cached | 只要求返回缓存,若无返回504gateway timeout | |
No-transform | 不允许更改某体类型 | 不允许更改某体类型 |
Must-revalidate | 可缓存,但必须向源服务器验证缓存有效性 | |
Proxy-revalidate | 要求中间缓存服务器向源服务器验证有效性,同must-revalidate,但不适用于代理缓存 | |
Cache-extension | 扩展字段,可添加新字段 | 扩展字段,可添加新字段 |
HTTP响应首部字段
字段 | 说明 |
---|---|
Accept-ranges | 服务器是否能处理范围请求:bytes or none |
Age | 资源从创建到现在的时间 |
Proxy-authenticate | 告知客户端代理所需要的认证信息 |
www-authenticate | http访问认证:告知客户端认证方案 |
Etag | 实体标识(无固定算法,服务器统一分配),分强Etag和弱Etag |
Server | 服务器的协议、版本等相关信息 |
Retry-after | 告知客户端多久后重试(配合3XX或者503service unavailable),可以是秒数,也可以是时间 |
Location | 资源重定向的URI(配合3XX重定向使用) |
Vary | 对缓存进行控制:只对源服务器vary指定字段的请求进行缓存 |
HTTP实体首部字段
字段 | 说明 |
---|---|
Allow | 服务器返回某资源支持的所有http方法。当以某一个不支持的方法访问该资源时,服务器返回405 method not allowed,并将所有支持的http方法设置到allow字段返回。 |
Content-Encoding | 实体主体的内容编码方式及优先级:gzip、compress、deflate、identity。 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的长度(字节B) |
Content-MD5 | 实体主体的校验和,用来确认内容是否完整,但可能会被篡改 |
Content-Location | 返回资源的URI。当返回资源与实际请求对象不同时,返回该字段。 |
Content-Range | 部分请求返回的字节范围。一般206partial content的请求会返回该字段。 |
Content-Type | 实体主体的媒体类型 |
Expires | 资源的过期时间(会优先处理cache-control的max-age) |
Last-Modified | 资源最后一次修改的日期 |
HTTP请求首部字段
web性能优化中一个重要的指标TTFB(time to firstbyte),从请求发出到接收到响应的第一个字节开始的时间。
字段 | 说明 |
---|---|
待整理 | 待整理 |
为cookie服务的首部字段:
Cookie:管理服务器和客户端的状态(工作机制是用户识别和状态管理)
Cookie使用前会验证其有效期、域名、路径等,所以不会泄露给其他web站点。
字段 | 说明 |
---|---|
Set-Cookie(响应首部) | Name = value Expires: Path: 可以使用cookie的路径 Domain: Secure: 只有使用https访问的才可以进行cookie的设置 httpOnly: js脚本无法获取cookie,防止XSS攻击 |
Cookie(请求首部) | 浏览器发送的cookie列表 |
其他首部字段:
注:区分标准首部和非标准首部的是:X-前缀
字段 | 说明 |
---|---|
X-frame-options(响应首部) | 取值:deny or sameorigin,控制资源在其他网站frame标签内的显示问题,防止点击劫持,占用自己网站的流量 |
X-XSS-protection(响应首部) | 取值0 1,控制浏览器对XSS防护的开启 |
DNT:拒绝个人信息被收集(请求首部) | 取值有0 1,拒绝被精准广告追踪的方法 |
P3P:在线隐私偏好平台(请求首部) | 将隐私设置成程序可理解的文件,达到保护用户隐私的目的 |