【问答格式】【精简版】HTTP/HTTPS

115 阅读3分钟

Q1: 怎么理解HTTP的无状态?

  1. 服务端不会记住之前的连接
  2. 每个request都是唯一且独立的
  3. cookie和session让连接变得有状态
    • 举例:我登陆了淘宝之后才能看到我的购物车,我不登陆的话我就无法看到购物车,是cookie和session让服务端记住了我有登陆过这件事。

Q2: http有哪些缓存策略?

  1. 强制缓存
    • 客户端初次请求后,服务器返回资源和Cache-Control,之后客户端再次请求,就是本地缓存返回资源了,而不是服务端
  2. 协商缓存
    • 客户端初次请求后,服务器返回资源和资源标识,标识可以是Last-Modified最后修改时间或者是Etag资源的唯一标识,如果返回的是Last-Modified,当客户端再次请求时,Request Headers会带着if-Modified-Since,服务端判断if-Modified-Since和资源最后修改时间是否一样,如果一样的话则返回304,不一样的话说明资源已经更新了,就返回新的资源和新的Last-Modified. 如果是Etag的话,客户端再次请求时会在Request Headers带着if-None-Match,服务端判断if-None-Match和现在资源的标识是否一样,如果一样则返回304,不一样就返回新的资源和新的Etag. 总的来说优先使用Etag, 因为Last-Modified记录的时间没办法非常精确,而且如果资源被重复生成内容不变的话,用Etag会更好。

Q3: 说一下常见的http状态码以及对应的场景

  • 【101 - 切换协议 Switching Protocol】 服务器已经接受了客户端的协议切换请求,并且将切换到不同的协议进行进一步的通信。
  • 【200 - 正常访问 OK】,服务器返回请求的数据。
  • 【301 - 永久重定向 Moved Permanently】 请求的资源已经被转移到新的网址上,浏览器会自动跳转的,新网址可以在返回的location header里找到
  • 【302 - 临时重定向 Move Temporarily】 请求的资源被暂时转移到了新网址上,浏览器会自动跳转的,新网址可以在返回的location header里找到
  • 【304 - 资源未被修改 Not Modified】 用户进行第二次请求该资源时,服务端如果确定资源和之前的一样,则返回304告诉用户可以用缓存的资源,否则返回200和最新的资源。
  • 【400 - 错误请求 Bad Request】 由于客户端请求中存在格式错误,服务器无法处理请求, 比如缺少某些参数。
  • 【401 - 未经证实 Unauthorized】 用于缺失或者错误的身份验证,比如没登陆淘宝就去访问购物车,服务器不知道你是谁,但是你登录之后有了身份凭证然后再次请求就可以访问了。
  • 【403 - 未经许可 Forbidden】 用户经过服务器验证了,服务器知道你是谁,但是未被服务器授权去请求某些资源,服务器拒绝返回这些资源,不管你修改什么修改身份都没用,请求多次都会被拒绝。
  • 【404 - 未发现指定网址 Not Found】 可能是输错网址或者原本的资源已经被删除
  • 【500 - 服务器错误 Internal Server Error】 服务器可能没启动
  • 【504 - 网关超时 Gateway Timeout】 表示网关无法在预定的时间内获得另一个服务器的响应,可能是因为服务器过载或者是网络问题

401和403的英文有争议,401可以认为是Unauthenticated, 403可以认为是Unauthorized.

Q4: http和https的区别

  • HTTPS是HTTP协议的安全版本
  • HTTP协议的数据传输是明文的,是不安全的,HTTPS对数据进行了加密处理
  • http默认端口是80,https默认端口是443