前端面试基础-http

彻底了解前端缓存之HTTP缓存!(硬缓存?协商缓存?)

HTML5新特性historypushState/replaceState解决浏览器刷新缓存

axios是通过promise实现对ajax技术的一种封装


history作用

history.pushState()与history.replaceState()不刷新页面,只改变url

这个可以干啥用?一个比较常用的场景就是,配合 AJAX。

假设一个页面左侧是若干导航链接,右侧是内容,同时导航时只有右侧的内容需要更新,那么刷新整个页面无疑是浪费的。这时我们可以使用 AJAX 来拉取右面的数据。

但是如果仅仅这样,地址栏是不会改变的,用户无法前进、后退,也无法收藏当前页面或者把当前页面分享给他人;搜索引擎抓取也有困难。这时,就可以使用 HTML5 的 History API 来解决这个问题。

思路:首先绑定click事件。当用户点击一个链接时,通过preventDefault函数防止默认的行为(页面跳转),同时读取链接的地址(如果有 jQuery,可以写成$(this).attr('href')),把这个地址通过pushState塞入浏览器历史记录中,再利用 AJAX 技术拉取(如果有 jQuery,可以使用$.get方法)这个地址中真正的内容,同时替换当前网页的内容。

为了处理用户前进、后退,我们监听popstate事件。当用户点击前进或后退按钮时,浏览器地址自动被转换成相应的地址,同时popstate事件发生。在事件处理函数中,我们根据当前的地址抓取相应的内容,然后利用 AJAX 拉取这个地址的真正内容,呈现,即可。

最后,整个过程是不会改变页面标题的,可以通过直接对document.title赋值来更改页面标题。

实现过程:dispatchEvent模拟popstate事件


session、cookie、location

(1)session:会话级别,关闭会话后会关闭

(2)cookie:没有设置过期时间时是会话级别;在同一域名下访问cookie是相同的

(3)location:永久级别(除非客户端强制删除)


ajax

1.什么是ajax?有什么用?

Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页面局部刷新  

优点:可以实现异步通信效果,页面局部刷新,带来更好的用户体验

1、最大的一点是页面无刷新,用户的体验非常好。2、使用异步方式与服务器通信,具有更加迅速的响应能力。3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

ajax的缺点1、ajax不支持浏览器back按钮。2、安全问题 AJAX暴露了与服务器交互的细节。3、对搜索引擎的支持比较弱。4、破坏了程序的异常机制。5、不容易调试。

2.什么是同源?

同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性

所谓同源就是同域名、同协议、同端口,只有同源的地址才能相互通过ajax方式请求

3.如何解决跨域?

1)使用JSONP(json+padding)把数据内填充起来

2)CORS方式(跨域资源共享),在后端上配置可跨域

3)服务器代理,通过服务器的文件能访问第三方资源

4.解释jsonp?

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。 

jsonp本质是通过URL的方式进行请求的,所以它是get方式请求,没有post

5.原生js ajax有哪些步骤?

//创建 XMLHttpRequest 对象 var ajax = new XMLHttpRequest();

//规定请求的类型、URL 以及是否异步处理请求。 ajax.open('GET',url,true);

//发送信息至服务器时内容编码类型 ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//发送请求 ajax.send(null);

//接受服务器响应数据 ajax.onreadystatechange = function () { if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) { } };

6.get与post

###代码上的区别

1:get通过url传递参数

2:post设置请求头 规定请求数据类型

###使用上的区别

1:post比get安全 (因为post参数在请求体中。get参数在url上面)

2:get传输速度比post快 根据传参决定的。 (post通过请求体传参,后台通过数据流接收。速度稍微慢一些。而get通过url传参可以直接获取)

3:post传输文件大理论没有限制 get传输文件小大概7-8k ie4k左右

4:get获取数据 post上传数据 (上传的数据比较多 而且上传数据都是重要数据。所以不论在安全性还是数据量级 post是最好的选择)


http常见状态码

一: 2开头状态码2xx (成功)表示成功处理了请求的状态代码

200 (成功) 服务器已成功处理了请求。 通常。

二: 3开头状态码3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

三: 4开头状态码4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理

1:400 (错误请求) 服务器不理解请求的语法。

2:403 (禁止) 服务器拒绝请求。

3:404 (未找到) 服务器找不到请求的网页。

四: 5开头状态码5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错

500 (服务器内部错误) 服务器遇到错误,无法完成请求


XMLHttpRequest对象的常用方法和属性

open(“method”,”URL”) 建立对服务器的调用,第一个参数是HTTP请求 方式可以为GET,POST或任何服务器所支持的您想调用的方式。第二个参数是请求页面的URL。

send()方法,发送具体请求abort()方法,停止当前请求

readyState属性 请求的状态 有5个可取值0=未初始化 ,1=正在加载2=以加载,3=交互中,4=完成

responseText 属性 服务器的响应,表示为一个串

reponseXML 属性 服务器的响应,表示为XML

status 服务器的HTTP状态码,200对应ok 400对应not found


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. HTML 1. 必考:你是如何理解 HTML 语义化的? 荒野阶段:最开始是 PHP 后端写 HTML,不会...
    Qingelin阅读 712评论 0 0
  • 前言开门见山,这篇文章,适合 「 初级前端 」 ,如果你还在校招的话,或者还在求职的话,可以看看本文,找一找灵感,...
    WEB前端含光阅读 1,357评论 1 2
  • 0、底层 Event Loop事件循环:就是一个执行消息队列的机制 宏任务 微任务为了解决这种情况,将任务分为了同...
    月光一族阅读 2,919评论 7 42
  • 1、 HTML语义化 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码...
    5e8294296ff4阅读 596评论 0 0
  • 听说成年人的自尊都是工资给的,我已经没有自尊两个多月了,哈哈哈 疫情影响很多小伙伴都被破离职了,下面整理了一些常见...
    WEB前端含光阅读 5,849评论 9 156