透析HTTP协议笔记

434 阅读4分钟
  • TCP/UDP
  • TCP/IP 
  • SSL/TLS --(SSL即安全套接层)信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全 (通信安全必须同时具备机密性、完整性、身份认证和不可否认这四个特性)
  • CDN---内容分发网络 
  • DNS --是一个树状的分布式查询系统 
  • URL---统一资源定位符,“网址” 由协议名、主机名、路径组成 HTTPS 协议栈有四层:最上层“应用层” 最下层“链接层” TCP/IP 则在中间: TCP --传输层 IP---网际层
  • 七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
  • 为了保护cookie,还要给他设置有效期、作用域等属性,常用的有Max-Age(相对时间,单位是秒,收到报文的时间点再加上Max-Age,就可以得到失效的绝对时间)、Expires(过期时间,用的是绝对时间点)、Domain(cookie所属的域名)、path(属于路径)、HttpOnly(告诉浏览器,此cookie只能通过浏览器Http协议传输,禁止其他方式访问)等等
  • 服务器标记资源有效期使用的头字段是“Cache-Control”<no_store:不允许缓存;no_cache:允许缓存,但在使用之前必须要去服务器验证是否过期,是否有最新的版本;must_revalidate:缓存不过期就可以继续使用,但过期了如果还想用就必须去服务器验证>
  • 验证资源是否失效需要使用“条件请求”,常用的是“if-Modified-Since”和“If-None-Match”,收到304就可以复用缓存里的资源
  • 验证资源是否被修改的条件有两个:“Last-modified”和“ETag”,需要服务器预先在响应报文里设置,搭配条件请求使用(ETag有强弱之分,弱ETag在值前面有个“W/”标记)
  • 浏览器也可以发送“Cache-Control” 字段,做缓存控制只能是刷新数据,不能很好地利用缓存数据,又因为缓存会失效,使用前还必须要去服务器验证是否是最新版 可以结合使用“Max-Ag=0”或“no_cache” 刷新数据
  • 如果想要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP”
  • HTTPS的语法、语义仍然是HTTP,但把下层的协议有TCP/IP换成了SSL/TLS
  • Accept字段标记的是客户端可理解的MIME type,可以用“,”做分隔符列出多个类型,让服务器有更多的选择(注:application表示数据格式不固定)
  • Content-Type字段标记的是服务器告诉实体数据的真实类型
  • Accept-Encoding字段标记的是客户端支持的压缩格式(如果请求报文里没有这个字段,就表示客户端不支持压缩数据)
  • 常用的Encoding  type类型:gzip(GNU zip压缩格式)、deflate(zlib<deflate>压缩格式、br(一种专门为http优化的新压缩算法<brotli>))
  • Content-Encoding字段标记的是服务器告诉客户端实际使用的压缩格式(如果响应报文里没有这个字段,表示响应数据没有被压缩)
  • Vary字段表示服务器依据了XXX、XXX、和XX这三个头字段,然后决定了发回的响应报文
  • 语言类型表示实体数据的自然语言,相关的头字段是Accept-Language和Content-Language
  • 字符集表示实体数据的编码方式,相关的头字段是Accpept-Charset和Content-Type
  • Transfer-Encoding:chunked 表示报文里的body部分不是一次性发过来的,而是分成了许多的块(chunk)逐个发送
  • “Transfer-Encoding:chunked ”和“Content-Length” 这两个字段是互斥的,不可同时存在,一个响应报文的传输要么是长度已知,要么是长度未知
  • 请求范围是指允许客户端在请求里使用专用字段来表示只获取文件的一部分,相当于是客户端的“化整为零”,但这不是web服务器必备的功能,可以实现也可以不实现,所以服务器必须在响应里使用字段“Accept-Ranges:bytes”明确告知客户端:“我是支持范围请求的”。如果不支持,服务器可以发送“Accept-Ranges:none”或者不发该字段
  • 请求头Range是HTTP范围请求的专用字段,格式是:“bytes=x-y”(注意x,y表示的是“偏移量”,范围必须从0计数)且服务器收到该字段后,返回客户端会有两个状态码,416表示范围请求有误,超出范围,无法处理;206Partial Content 表示成功,但表示body只是原数据的一部分
  • 服务器发送“Connection: keep-alive”字段表示启用了长连接
  • 报文头里如果有“Connection: close”就表示长连接即将关闭