前端面试题之 HTTP

  1. 列举常见的 HTTP 状态码。

    • 最基本的响应代码
      • 200("OK")
        • 一切正常。实体主体中的文档(若存在的话)是某资源的表示
      • 400("Bad Request")
        • 客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题
      • 500("Internal Server Error")
        • 服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题
      • 301("Moved Permanently")
        • 当客户端触发的动作引起了资源 URI 的变化时发送此响应代码。另外,当客户端向一个资源的旧 URI 发送请求时,也发送此响应代码
      • 404("Not Found") 和410("Gone")
        • 当客户端所请求的 URI 不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410 用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况
      • 409("Conflict")
        • 当客户端试图执行一个"会导致一个或多个资源处于不一致状态"的操作时,发送此响应代码
    • 状态码系列
      • 1XX:通知
        • 1XX系列响应代码仅在与HTTP服务器沟通时使用
      • 2XX: 成功
        • 2XX系列响应代码表明操作成功了
      • 3XX 重定向
        • 3XX 系列响应代码表明:客户端需要做些额外工作才能得到所需要的资源。它们通常用于 GET 请求。他们通常告诉客户端需要向另一个 URI 发送 GET 请求,才能得到所需的表示。那个 URI 就包含在 Location 响应报头里
      • 4XX:客户端错误
        • 这些响应代码表明客户端出现错误。不是认证信息有问题,就是表示格式或 HTTP 库本身有问题。客户端需要自行改正
      • 5XX 服务端错误
        • 这些响应代码表明服务器端出现错误。一般来说,这些代码意味着服务器处于不能执行客户端请求的状态,此时客户端应稍后重试。有时,服务器能够估计客户端应在多久之后重试。并把该信息放在 Retry-After 响应报头里
  2. HTTP 中有哪些请求方式?

    • OPTIONS
      • 返回服务器针对特定资源所支持的 HTTP 请求方法,也可以利用向 web 服务器发送'*'的请求来测试服务器的功能性
    • HEAD
      • 向服务器索与 GET 请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息
    • GET
      • 向特定的资源发出请求
      • 注意: GET 方法不应当被用于产生"副作用"的操作中,例如在 Web Application 中,其中一个原因是 GET 可能会被网络蜘蛛等随意访问。 Loadrunner 中对应 get 请求函数: web_link 和 web_url
    • POST
      • 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner 中对应 POST 请求函数: web_submit_data , web_submit_form
    • PUT
      • 向指定资源位置上传其最新内容
    • DELETE
      • 请求服务器删除Request-URL所标识的资源
    • TRACE
      • 回显服务器收到的请求,主要用于测试或诊断
    • CONNECT
      • HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
    • 注意:
      1. 方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码 405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码 501(Not Implemented)。
      2. HTTP 服务器至少应该实现 GET 和 HEAD/POST 方法,其他方法都是可选的,此外除上述方法,特定的 HTTP 服务器支持扩展自定义的方法。
  3. 一个页面从输入 URL 到页面加载显示完成,这个过程都发生了什么?

    • 首先,在浏览器地址栏中输入 url
    • 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作
      1. 浏览器缓存:浏览器会记录 DNS 一段时间,因此,只是第一个地方解析 DNS 请求
      2. 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的 DNS 查询缓存)
      3. 路由器缓存:如果上述两个步骤均不能成功获取 DNS 记录,继续搜索路由器缓存
      4. ISP 缓存:若上述均失败,继续向 ISP 搜索
    • 在发送 http 请求前,需要域名解析( DNS 解析),解析获取相应的 IP 地址
    • 浏览器向服务器发起 tcp 连接,与浏览器建立 tcp 三次握手
    • 握手成功后,浏览器向服务器发送 http 请求请求数据包
    • 服务器处理收到的请求,将数据返回至浏览器
    • 浏览器收到 HTTP 响应
    • 读取页面内容,浏览器渲染,解析 html 源码
    • 生成 Dom 树、解析 css 样式、js 交互
    • 客户端和服务器交互
    • ajax 查询
  4. cookie 与 session 的区别是什么?

    • cookie 是由 Web 服务器保存在用户浏览器上的小文件,包含有关用户的信息
    • session 是用来在客户端与服务器端之间保持状态的解决方案和存储结构
    • 区别:
      1. cookie 数据存放在客户的浏览器上,session 数据放在服务器上
      2. cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session
      3. session 会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到服务器性能方面,应当使用 cookie
      4. 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie
      5. 我认为将登陆信息等重要信息存放为 session,其他信息如果需要保留,可以放在 cookie 中

你可能感兴趣的:(前端面试题之 HTTP)