C# 面试手册

HTTP

post、get的区别?

  • get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
  • 使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会;
  • 使用get的页面可以被搜索引擎抓取,而用post的则不可以;
  • 使用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。
  • 使用post可以进行文件的提交,而用get则不可以。

http 响应码 301 和 302 代表的是什么?有什么区别?

301:永久重定向;302:暂时重定向。

它们的区别是,301 对搜索引擎优化(SEO)更加有利;302 有被提示为网络拦截的风险。

什么是 XSS 攻击,如何避免?

XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防 XSS 的核心是必须对输入的数据做过滤处理。

HTTP fetch发送2次请求的原因?

fetch发送post请求的时候,总是发送2次,第一次状态码是204,第二次才成功?

原因很简单,因为你用fetch的post请求的时候,导致fetch 第一次发送了一个Options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求。

HTTP常见的的头部有哪些?

可以将http首部分为通用首部,请求首部,响应首部,实体首部

通用首部表示一些通用信息,比如date表示报文创建时间,

请求首部就是请求报文中独有的,如cookie,和缓存相关的如if-Modified-Since

响应首部就是响应报文中独有的,如set-cookie,和重定向相关的location,

实体首部用来描述实体部分,如allow用来描述可执行的请求方法,content-type描述主题类型,content-Encoding描述主体的编码方式

什么是 CSRF 攻击,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。 防御手段:

验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。

HTTP 状态码 304 的含义?什么时候用304?

304:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。

AJAX的底层实现原理?

Ajax核心—-----XMLHttpRequest 上面我们大概感受了一下Ajax的过程,我们发现发送异步请求才是核心,事实上它就是XMLHttpRequest,整个Ajax之所以能完成异步请求完全是因为这个对应可以发送异步请求的缘故。

而且我们又发现上面那个事件就是整个处理过程的核心,可以根据不同状态执行不同操作,其实它就是XMLHttpRequest的方法onreadystatechange,它在每次状态发生改变时都会触发。那么是谁取得的返回信息呢?它就是XMLHttpRequest的另一个方法responseText(当然还有responseXML)。

我们还没有说发送给谁以及执行发送操作,这两个就是XMLHttpRequest的open和send方法。其他的当然还有了,我们直接列出来吧:

XMLHttpRequest对象属性

  • readyState:请求状态,开始请求时值为0直到请求完成这个值增长到4
  • responseText:目前为止接收到的响应体,readyState<3此属性为空字符串,=3为当前响应体,=4则为完整响应体
  • responseXML:服务器端相应,解析为xml并作为Document对象返回
  • status:服务器端返回的状态码,=200成功,=404表示“Not Found”
  • statusText:用名称表示的服务器端返回状态,对于“OK”为200,“Not Found”为400

方法

  • setRequestHeader():向一个打开但是未发生的请求设置头信息
  • open():初始化请求参数但是不发送
  • send():发送Http请求
  • abort():取消当前相应
  • getAllResponseHeaders():把http相应头作为未解析的字符串返回
  • getResponseHeader():返回http相应头的值