HTTP及浏览器面试题整理

134 阅读5分钟

以下面试题摘抄于juejin.cn/post/735130… 部分面试题答案有所整理与更改

1、GET和POST有什么区别?

  1. 请求参数传递方式不同:get的请求参数放在url后面,post请求参数放在请求体中
  2. 请求参数长度限制不同:get请求参数受限于浏览器对url长度的限制,post没有限制
  3. 幂等性不同:get请求是幂等的,post不是幂等的,post每次提交都会创建新的资源
  4. 安全性不同:post请求相对比get请求安全性高
  5. 缓存处理:get请求可以被缓存,pOST请求不会,除非在响应头中包含适当的Cache-control或Expires字段
  6. 使用场景不同:get适用于从服务器请求数据资源,post请求适用于向服务器提交数据

2、HTTP的状态码有哪些?并代表什么意思?

  • 1xx 信息状态码
    • 100:客户端应继续其请求
  • 2xx 成功状态码
    • 200:请求成功
    • 201:请求已经被实现,并因此创建了一个新的资源
    • 204:服务器成功处理了请求,但没有返回任何内容
  • 3xx 重定向状态码
    • 301:请求的资源已被永久移动到新的URL上
    • 302:请求的资源现在临时从不同的URL响应请求
    • 304:客户端已经执行了GET请求,但文件未发生变化
  • 4xx 客户端错误状态码
    • 400: 服务器无法理解请求
    • 401:请求要求进行身份验证
    • 403:服务器理解请求,但拒绝执行它
    • 404:服务器无法找到请求的资源
    • 405;请求中指定的方法不被允许
  • 5xx 服务器错误状态码
    • 500:服务器遇到了一个未曾预料的情况,导致其无法完成对请求的处理
    • 501:服务器不支持当前请求所需的某个功能
    • 503:由于临时的服务器维护或者过载,服务器当前无法处理请求

3、从输入URL到看到页面发生的全过程

  1. 浏览器解析URL:判断URL是否是合法的
  2. DNS域名解析:浏览器通过DNS解析将域名转换为对应的IP地址
  3. TCP连接:获得服务器IP地址后,浏览器与服务器建立TCP连接,这个过程通过三次握手完成
  4. 发送HTTP请求:TCP建立连接后,浏览器向服务器发送HTTP请求。
  5. 服务器处理请求:根据请求内容进行相应处理
  6. 发送HTTP响应:服务器处理完请求后,会发送一个HTTP响应给浏览器。这个响应包含了状态码、页面要展示的内容等
  7. 浏览器解析并渲染页面:浏览器接收到服务器的响应后,解析HTML内容,下载并执行JavaScript代码,加载并应用css样式,最终渲染出用户可见的网页

4、为什么会存在跨域及常见跨域的解决办法?

跨域(协议、端口、域名不同)存在的主要原因是浏览器的同源策略,同源策略是一种安全机制,旨在保护用户数据的安全和隐私。当web页面尝试从不同的域请求资源时,如果服务器没有设置适当的跨域策略,浏览器会阻止这种请求,从而导致跨域问题。

解决跨域问题常见的方法:

  1. JSONP:利用动态脚本标签和JavaScript的scrip标签进行跨域请求的方法。(它通过生成一个带有查询参数的URL来请求数据,服务器接收到请求后返回一个经过URL编码的JavaScript函数调用,这个函数在客户端执行后,可以将获取的数据插入到页面中)优点是兼容性好,可以用于较旧得浏览器,缺点是仅支持get请求,安全性较低。
  2. CORS(跨域资源共享):CORS是一种W3C规范,通过在服务器端设置适当的HTTP响应头来实现跨域访问。服务器通过设置Access-Control-Allow-Origin等响应头,允许浏览器知道哪些源可以访问该资源。CORS适用于所有类型的HTTP请求,包括GET、POST等,且安全性较高。
  3. window.postMessage(): 这是一种用于在不同窗口或文档之间实现安全跨源通信的API。它允许不同窗口或文档之间发送消息,仅当目标窗口的origin符合预期时,消息才会被发送,提供了一种受控制的跨文档通信方式。
  4. nginx代理跨域和nodejs中间件代理跨域:这两种方法都是通过服务器端的配置来实现跨域访问。nginx可以通过配置代理规则来允许跨域请求,而nodejs中间件则可以通过设置代理和中间件来实现跨域资源共享。
  5. window.name+ifram跨域 和 location.hash+iframe跨域:这两种方法都是利用iframe元素进行跨域通信。前者通过iframe的location.hash进行传值,后者利用window.name属性在跨域的情况下传递信息。
  6. document.domain + iframe跨域:这种方法适用于主域相同而子域不同的跨域场景。通过设置两个页面的document.domain为基础主域,可以实现同域访问。
  7. WebSocket协议跨域:WebSocket协议本身支持跨域,通过在服务器端进行适当的配置,可以允许WebSocket连接跨越不同的源。