首页 > 技术文章 > HTTP知识点

zhoujingye 2020-03-26 23:38 原文

1.必考:HTTP 状态码知道哪些?分别什么意思?

     HTTP STATS CAT 哈哈哈哈哈哈哈

2.大公司必考:HTTP 缓存有哪几种?

  • 需要详细的了解 ETag、CacheControl、Expires 的异同
  • 参考 https://imweb.io/topic/5795dcb6fb312541492eda8c
  • 答题要点:(三个字段,两个对比)
    1. ETag 是通过对比浏览器和服务器资源的特征值(如MD5)来决定是否要发送文件内容,如果一样就只发送 304(not modified)
    2. Expires 是设置过期时间(绝对时间),但是如果用户的本地时间被调整了,可能会有问题
    3. CacheControl: max-age=3600 是设置过期时长(相对时间),跟本地时间无关。
  • Etag和CacheControl的区别:CacheControl是从本地浏览器文件缓存读的,而ETag还是会发起请求的,ETag是有请求的,命中的状态码是304
  • Expires和CacheControl对比,答本地时间和相对时间
  • PWA技术,浏览器缓存的先后顺序

为什么第一次打开页面会慢,之后会快?
浏览器有缓存机制,可以从network观察资源的加载情况
第一次加载时:所有资源都要从服务器加载一遍
第二次加载时:因为浏览器有缓存,css js等资源都直接从缓存中获取
浏览器缓存有2种方式:
①.mate标签
-content-type 设置文档内容类型,字符集
-expires 设置网页到期期限
-pragma cache模式,是否从缓存中访问网页内容
-refresh 等待一定时间自动刷新或跳转到其他url
②.header头
浏览器会通过Response header信息来确认是否缓存,怎么缓存

去服务器获取资源时候存在两种缓存策略,分别为:
1. 强制缓存
浏览器加载资源时先判断头信息是否包含:Cache-control和Expires属性,Expires是http1.0,Cache-control是http 1.1,cache-control优先级更高;
Expires设置的是绝对时间,是个日期,响应时看expires字段,再次请求时查看缓存时间过了没有,如果没有过则从缓存拿出来,过了就重新请求;
Cache-control的值包含:
- max-age=xxx 将在多少秒后失效,相对时间
- public 所有内容将被缓存(客户端、代理服务器都可缓存)
- private 内容只缓存到私有缓存中(仅客户端可以)
- no-cache 必须先喝服务器确认返回的响应是否被更改,之后才能使用该响应满足后续请求,如果存在合适的验证令牌ETag,no-cache会发起往返通心验证缓存的响应,如果资源为被更改,可以避免下载
- no-store:所有内容都不会被缓存或 Internet 临时文件中
- must-revalidation/proxy-revalidation:如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

2.协商缓存 last-modified和Etag
当判断浏览器不是强缓存,就会向服务器发送请求判断是否为协商缓存,如果是,服务器返回304 Not Modified,浏览器从缓存中加载
Last-Modified和If-Modified-Since字段:
- 浏览器初次向服务器发送请求,服务器返回资源并在response header加上last-modified字段,表示资源最后修改的时间
- 浏览器再次请求这个资源时,请求头会加上If-Modified-Since字段,如果两个字段一样,说明没被修改,返回304,浏览器从缓存中获取资源;如果字段不一样,则资源被修改过,服务器返回资源

Etag和If-None-Match字段:
如果服务器上资源变化,但是最后修改时间没更新
- 浏览器第一次想服务器请求,服务器返回资源并在response header加上ETag,表示资源本身,资源有变化,则ETag变化
- 浏览器再次向服务器请求这个资源时,请求头携带If-None-Match字段。若这两个字段相同,则代表资源没有变化,服务器返回304Not Modified,浏览器从缓存中加载。若两个字段不同,证明资源有变动,服务器正常返回资源

 

3. 必考:GET 和 POST 的区别

    1. 错解,但是能过面试
      • GET在浏览器回退时是无害的,而POST会再次提交请求。
      • GET产生的URL地址可以被加入收藏栏,而POST不可以。
      • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
      • GET请求只能进行url编码,而POST支持多种编码方式。
      • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
      • GET请求在URL中传送的参数是有长度限制的,而POST没有。
      • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
      • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
      • GET参数通过URL传递,POST放在Request body中。
  • post安全,get不安全
  • get url有长度限制,post没有
  • get参数放在url里,post放在消息体里
  • get只需要一个报文,post需要两个以上(因为他有消息体)
  • get幂等的,post不幂等的(发多次Get不会改变数据库的数据的)
    1. 正解
      就一个区别:语义——GET 用于获取资源,POST 用于提交资源。

4.Cookie V.S. LocalStorage V.S. SessionStorage V.S. Session

  • Cookie V.S. LocalStorage
    1. 主要区别是 Cookie 会被发送到服务器,而 LocalStorage 不会发送到服务器上
    2. Cookie 大小限制比较小,一般最大 4k,LocalStorage 可以用 5Mb 甚至 10Mb(各浏览器不同)
    3. cookie用来存用户信息的,LocalStorage存不重要的东西的
  • LocalStorage V.S. SessionStorage
    1. LocalStorage 一般不会自动过期(除非用户手动清除),而 SessionStorage 在回话结束时过期(如关闭浏览器)
  • Cookie V.S. Session
    1. cookie是服务器发送给浏览器的一段字符串,浏览器在每一次访问服务器的时候都要带上这个字符串(门票);Session表示浏览器与服务器一段时间的会话
    2. Cookie 存在浏览器的文件里,Session 存在服务器的文件里
    3. Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里

5. HTTP2和HTTP1的区别 背!

Jerry Qu 屈光宇

重点:多路复用、服务端推送,知乎

 

推荐阅读