读书笔记 --- > [基础知识点] 小结3

1. cookie与session的区别

Cookie是服务器在本地机器上存储的小段文本,并随每一次发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户端中,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求束缚上这些cookies。

具体来说,cookie机制采用的是在客户端保持状态的方案.它是在客户端的会话状态的存储机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过HTTP的响应头中加上一行特殊的指示,提示浏览器按照指示生成相应的cookie。然而存粹的客户端脚本如JavaScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头部上发送给服务器

cookie的内容主要包括: 名字、值,过时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookiedd的生命周期为浏览器会话期间,关闭浏览器窗口,cookie会消失。这种生命周期为浏览器会话器的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式…

session机制

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识,如果已包含则说明以前已经为此客户端创建过session,服务器会按照session id把这个session检索出来使用,如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id, session id的值应该是一个既不会重用又不容易找到规律以仿造的字符串,这个session id将在本次响应中返回给客户端保存.

cookie与session的区别

比较值cookiesession
存取方式只能保管ASCII字符串; Unicode字符需转义; 不能直接存取Java对象能够存取任何类型的数据;可看做是JAVA的一个容器类
隐私策略存储在客户端的阅读器上,对客户端是可见的存储在服务器上,对客户端是透明的
有效期可以给Cookie的过期时间属性设为一个很大很大的数字Session保存在服务器内存中,如果过期时间设置久了,会导致内存泄漏
服务器压力不占服务器资源.如果阅读的用户十分多,推荐使用Cookie每个用户都会产生一个Session,并发访问的用户十分多,会产生大量session,耗费大量内存
浏览器支持需要浏览器支持,如果用户禁用了浏览器支持,则cookie不生效若客户端浏览器不支持cookie,则需要用到session和URL重写.否则会失去用户的信息跟踪
跨域支持支持跨域名访问不支持跨域名访问
存储位置客户端服务器

2. cookie、sessionStorage和localStorage的区别

比较对象cookiesessionSoragelocalStorage
有效期根据设置的过期时间,过期则消失;未过期,浏览器关闭也不会消失存储在浏览器的内存中,退出浏览器环境即消失存储在客户端硬盘中,不主动删除不会消失
作用域在同源窗口中是共享的在不同的浏览器窗口中是不共享的在同源窗口中是共享的
数据大小不能超过4K5M左右5M左右
http请求每次都会携带在http头部仅在浏览器中保存仅在浏览器保存
应用场景主要用于识别用户登录存储一些页面中传递的参数存储一些页面中传递的参数

3. http状态码分类

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作并成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务端错误,服务器在处理请求的过程中发生了错误

4. http状态码列表

状态码描述中文描述
100Continue继续,客户端应继续其请求
101Switchin Protocols切换协议,服务器根据客户端的请求切换协议.
200OK请求成功,一般用于GET与POST
201Created已创建,成功请求并创立了新的资源
202Accepted已接受,已经接收请求,但未完成处理
203Non-Authoritative Information非授权信息,请求成功,但返回的mate信息不在原始服务器上
204Not Content无内容,服务器成功处理,但未返回内容
205Reset Content重置内容,服务器处理成功,用户终端应重置文档视图
206Partial Content部分内容,服务器成功处理了部分GET请求
300Mutiple Choise多种选择,请求的资源可包括多个位置
301Moved Permanently永久移动,请求的资源被永久的移动到新URL上
302Found临时移动,资源临时被移动.客户端应继续使用原有的URL
303See Other查看其他地址.
304Not Modified未修改,所请求的资源浏览器返回缓存(未过期)的资源
305Use Proxy使用代理,所请求的资源必需通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向,使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理理解客户端的请求,但是拒绝执行此请求
404Not Found服务器无法找到客户端请求的资源
405Method Not Allowed客户端请求的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在(永久的删除,并不是更改了URL)
411Length Requried服务器无法处理客户端发送不带Content-Length的信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large请求的实体过大,服务器无法处理
414Request-URL Too Large请求的URL过长,服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed无服务无法满足Expect的请求头信息
500Interval Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或代理工作的服务器尝试执行请求时,从远程服务器收到一个无效的响应
503Service Unvailable超荷或系统维护导致服务器暂时无法处理客户端的请求
504Gateway Time-out网关(或代理服务器)未能从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本

5. http常用的请求头

协议头说明
Accept可接受的内容类型(Content-Types)
Accept-Charset可接受的字符集
Accept-Encoding可接受的响应内容的编码方式
Accept-Language可接受的响应内容语言列表
Accept-Datetime可接受按照时间来表示的响应内容版本
AuthorizationHTTP协议中需要认证资源的认证信息
Cache-Control指定当前的请求/回复中,是否使用缓存机制
Connection客户端优先使用的连接类型
Cookie服务器通过Set-Cookie设置的一个HTTP协议Cookie
Content-Length请求体的长度(8进制表示)
Content-MD5数字签名,以Base64编码的结果表示
Content-Type请求体的MIME类型(用于POST和PUT请求中)
Date发送该消息的日期和时间
Expect客户端要求服务器做出特定的行为
From发起此请求的用户的邮箱地址
Host服务器的域名及端口号
If-Match客户端的实体与服务器上对应的实体相匹配时,才进行相应的操作
If-Modified-Since对应的资源未修改,返回304
If-None-Match对应的内容未被修改的情况下返回304 Not Modified
If-Range如果实体未被修改,则返回所缺少的哪一个或多个部分
If-Unmodified-Since仅当该实体自某个特定时间以来未被修改的情况下,才发送回应
Max-Forwards限制该消息可被代理及网关转发的次数
Origin发起一个针对跨域资源共享的请求
Pragma与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生
Proxy-Authorization用于向代理进行认证的认证信息
Range表示请求某个实体的一部分,字节偏移以0开始
Refer表示浏览器所访问的前一个页面
TE浏览器预期接受的传输时的编码方式
User-Agent浏览器的身份标识字符串
Upgrade要求服务器升级到一个高级版本协议
Via告诉服务器请求是由哪些代理发出的
Warning一个一般性的警告,表示在实体内容中可能存在错误

6. 强缓存与协商缓存

参考 - 浏览器缓存机制

概述

良好的缓存策略可以降低资源的重复加载提高网页的整体加载速度

通常浏览器的缓存策略分为两种: 强缓存和协商缓存

  • 基本原理
    • 浏览器在加载资源时,根据请求头部的expirescache-control判断是否命中强缓存,若是强缓存,则直接从缓存读取资源,不会发送请求到服务器
    • 如果没有名中强缓存,浏览器会发送一条请求给服务器,服务器会根据last-modifiedetag验证资源是否命中协商缓存.如果命中,服务器会返回 304(Not Modified)给浏览器,浏览器会使用缓存中的资源进行显示,并且修改expirescache-control
    • 否则,服务器会返回新的数据资源.

注意点

  • 强缓存字段有expirescache-control,如果同时存在,cache-control的优先级会高于expires
  • 协商缓存的相关字段:Last-Modified/If-Modified-Since,Etag/If-None-Match
服务器决策
服务器决策
200
304
浏览器请求
有缓存
是否过期
Etag?
从缓存读取
向web服务器请求带If-None-Match
Last-Modified
向Web服务器请求带If-Modified-Since
200 or 304
向web服务器请求
请求响应,缓存协商
呈现

7. 常见的http状态码

状态码描述中文描述
200Ok请求成功
201Created已经创建,成功请求并创建了新的资源
202Accepted已经接受请求,但是未处理
206Partial Content部分内容,服务器已经处理了部分GET请求
301Moved Permanently永久重定向,域名跳转
302Found临时重定向,让未登录的用户访问用户中心
304Not Modified资源未修改,告诉浏览器可以使用本地缓存
307Temporary Redirect临时重定向
400Bad Request服务器不能理解服务端的请求
401Unauthorized需要客户端提供验证信息
403Forbiden一般是客户端提交的数据无法通过服务端的验证,拒绝访问
404Not Found服务器通过URL无法找到对应的资源
500Interval Server Error服务器收到了请求,但是服务器执行的时候发送了错误

8. 前端优化

  • 降低请求量: 合并资源,减少HTTP请求数, minify / gzip压缩, webP, lazyLoad
  • 加快请求速度: 预解析DNS,减少域名数,并行加载,CDN分发
  • 缓存: HTTP协议缓存请求,离线缓存manifest,离线数据缓存localStorage
  • 渲染: JS/CSS优化,加载顺序,服务端渲染,pipline

9. GET和POST的区别

属性GETPOST
安全性不安全比较安全(也不是那么安全)
参数长度被浏览器限制了长度长度一般无限制
参数是否被缓存可以在浏览历史记录里看到不会被保留
TCP数据包产生1个TCP数据包产生2个TCP数据包
编码格式只能进行url编码支持多种编码方式

10. 画一个三角形

利用边框的均分原理

div {
    width: 0px;
    height: 0px;
    border-top: 10px solid red;
    border-right: 10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 10px solid transparent;
}

11. 状态码304和200

  • 状态码200: 请求已成功,请求所希望的响应头或数据体将随此响应返回.即返回的数据未全量的数据,如果文件不通过GZIP压缩的话,文件是多大,则要有多大传输量

  • 状态码304: 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。即客户端和服务器端只需要传输很少的数据量来做文件的校验,如果文件没有修改过,则不需要返回全量的数据

12. 说一下浏览器的缓存

  • 分为强缓存和协商缓存

    • 浏览器根据IP地址获取资源时,首先在缓存种查找是否含义该资源,如果有且未过期则从缓存种获取,不请求浏览器而直接返回资源,这种返回的资源称为强缓存资源

    • 如果过期了:

      • 如果带有Etag,则会向服务器请求(带If-None-match),服务器根据客户端传入的信息,判断客户端中的缓存是否过期,若过期则返回新资源(200),否则返回状态码304,不带有资源
      • 如果不带Etag,则会检查是否带Last-Modified,如果有,则向服务器请求(带If-Modified-Since),服务器根据客户端传入的信息,判断客户端中的缓存是否过期,若过期则返回新资源(200),否则返回状态码304,不带有资源
      • 如果不带Last-Modified则直接向服务器直接申请新资源
  • 强缓存,是根据是否过期判断的,协商缓存是通过服务器判断的.

13. HTML5新增的元素

  • 语义化:新增了 header,footer,nav,aside,section等语义化标签
  • 表单: 新增加了color,email,data,range等类型
  • 存储: 提供了sessionStorage, localStorage 和离线缓存
  • 多媒体: 音频(audio) 和 视频(vedio)
  • 其他: 地理定位,canvas画布、拖放(drag)、多线程(Web Worker)

14. 在地址栏输入一个URL到这个页面呈现出来,中间会发生什么

  • 输入url后,首先会根据域名去寻找对应的ip

    • 浏览器首先会去寻找缓存,查看缓存中是否有记录,缓存的查找记录为: 浏览器缓存 --> 系统缓存 --> 路由缓存,
    • 缓存中没有则查找hosts文件中是否有记录
    • hosts文件中没有记录则查询DNS服务器,得到ip地址
  • 得到ip地址后,浏览器会根据这个ip以及相应的端口号,构造一个http请求

    • 请求报文包括
      • 请求方法
      • 请求说明
      • 请求附带的数据
  • 然后,浏览器将http请求封装在一个tcp包中

    • 这个tcp包会一次经过: 传输层、网络层、数据链路层、物理层
  • tcp请求到达服务器,服务器请求并返回资源

  • 浏览器得到html文档后,第一次会根据html生成一个DOM树,其中遇到异步(如CSS和JS的加载),会将异步任务放到异步队列中去(开一个线程去获取)

  • 当同步任务执行完毕后,会去任务队列中去寻找已经完成资源,然后进行事件循环(每次读取队首完成的任务到栈内存中执行,执行完毕在去任务队列中获取).

  • 事件循环过后,所有CSS加载完成,会生成一棵CSSOM规则.然后浏览器会将DOM树和CSSOM规则合并成一棵渲染树,主要是排除非视觉节点(Script、meta..)

  • 紧接着进行回流(Layout): 根据渲染树,计算出它们在视口(viewPort)中的准确位置和大小.

  • 然后重绘(Painting): 根据Render树和回流得到的几何信息,得到绝对像素点

  • Display: 将像素点发送给GPU进行渲染

15. 常见的http的头部

  • 首部可以分为:
    • 通用首部
      • 一些通用的信息: 如date表示报文创建时间
    • 请求首部
      • 请求报文中独有的: cookie, 和缓存相关的如 if-Modified-Since
    • 响应首部
      • 响应报文中独有的: 如set-cookie,和重定向相关的location
    • 实体首部
      • 用来描述实体部分, allow用来描述可执行的请求方法,content-type描述主体类型,content-Encoding描述主体的编码方式

16. http2.0特性

  1. 内容安全: 基于https,天然具有安全性,通过http2.0的特性可以避免单纯使用https的性能下降
  2. 二进制格式: http1.x的解析是基于文本的, http2.0将所有的传输信息分割为更小的消息和帧,并对他们采用二进制格式编码,基于二进制可以让协议有更多的扩展性,比如引入了帧来传输数据和指令
  3. 多路复用,这个功能相当于是长连接的增强,每个request请求可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面,另外多路复用中也支持了流的优先级,允许客户端告诉服务器哪些内容是更优先的资源,可以优先输出.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值