http2.0相比http1.0的优势

http2.0所有数据以二进制进行传输,

同一个连接里面发送多个请求不再按顺序来

头信息压缩以及等提高效率的功能,头压缩减少带宽,请求html同时提前推送js,css资源。

 

http1.1之后,发送一个http请求,会建立一个tcp连接,该链接在请求返回后不会关闭,下次发送其他http请求,会继续使用该链接。

抓包工具:wireshark (传输层, 网络层都可以抓), Charles

tcp三次握手

seq = 0

seq = 0 ack =1

seq = 1 ack = 1

第一次握手,发送SYN报文,传达信息:“你好,我想建立连接”;

 第二次握手,回传SYN+ACK报文,传达信息:“好的,可以建立链接”;

 第三次握手,回传ACK报文,传到信息:“好的,我知道了,那我们连接”。然后就建立连接了。

 

uri, url, urn  uri包括 url, urn

uri Uniform Resource Idetifier /统一资源标志符,唯一标识互联网上的资源

url Uniform Resource Locator /统一资源定位符

ftp协议也可以获取网络资源

urn 永久资源定位符 使用较少

 

在命令行中发起http请求  curl -v www.baidu.com

关于跨域:浏览器发送请求后,即使跨域。服务端也会返回信息,只是此时浏览器没有检测到access-control-allow-origin已设置允许跨域的域名,直接忽略返回内容,并报错

link, image, script标签无跨域限制

跨域限制:

X-Test-Cors设置后, Access-Control-Allow-Origin不允许跨域

Get , Header, Post 默认允许跨域, 其他请求方法浏览器会进行预请求验证

Content-Type设置为text-plain, multipart/form-data, application/x-www-form-urlencoded默认允许跨域,其他类型浏览器需要进行预请求

什么是预请求:

Access-Control-Allow-Headers: 'X-Test-Cors'  设置允许跨域的请求头

浏览器请求头设置X-Test-Cors:''的值后,发送正式请求之前,浏览器会先发送一个options请求,用来验证当前设置的请求头是否被允许跨域使用

其他的预请求验证还有:

Access-Control-Allow-Method:' POST, PUT, DELETE'

Access-Control-Max-Age: '1000'  预请求保存的最长有效时间 单位s  1000s之内不用再进行预请求验证

 

Cache-Control

可缓存性:

public   是指在http请求返回的内容所经过的任何路径中都可以将其缓存

private  不允许代理服务器缓存(中间经过的路径)

no-cache  可以使用缓存,但是每次都要验证

到期

max-age 单位秒

s-maxage 会覆盖max-age,只在代理服务器生效

max-stale (浏览器中很少用)

重新验证(浏览器中用的比较少)

must-revalidater

proxy-revalidater 使用在缓存服务器中

其他:

no-store 浏览器和代理服务器都不可以使用缓存

no-transform 使用在缓存服务器中,禁止转换返回内容

 

实例:Cache-Control: 'max-age = 200, public'  多个用逗号隔开

max-age后,如果时间没有到期,即使服务器资源进行了修改,浏览器端还是会使用本地的缓存。

解决上面问题的方法:资源url路径加内容计算出来的hash值

 

cache设置 no-cache时, 每次都会进行缓存验证

验证头:

Last-Modified 上次修改时间 , 配合If-Modified-Since和If-Unmodified-Since(使用较少)使用

上面的是对比最后修改时间,判断资源有没有被修改

ETag 数据签名  根据内容生成的hash值  对比浏览器端和服务端的Etag是否一致

实例:设置no-cache后才可以使用ETag和Last-modified

服务端设置

Cache-Control: 'max-age = 200000,no-cache',

ETag:'777',

Last-Modified:'123'

浏览器第一次请求时接收到上面的请求头信息,浏览器在下次发送请求时,会带上下面两个值

If-Modified-Since: 123,

If-Modified-Match: 777

此时服务端的逻辑设置为:

const ETag = request.headers['if-modified-match'];

if(ETag === '777'){

  response.writeHeader(304,{

   Cache-Control: 'max-age = 200000,no-cache',

   ETag:'777',

   Last-Modified:'123'

})

response.end('')

}

对于If-Modified-Since对比的是最后的修改时间,服务端在修改资源后,可以在数据库存储该资源最后的修改时间

 

Cookie

通过set-cookie设置

下次请求会自动带上

键值对形式,可以设置很多个

cookie属性

max-age,expires设置cookie过期时间

    max-age代表cookie有效时间有多长

    expires是指cookie到期的时间点

Secure只在https的时候发送

HttpOnly无法通过document.cookie访问

实例:

response.writeHeader(304,{

   'Cache-Control': 'max-age = 200000,no-cache',

   ’Set-Cookie': 'id=123'

})

 

子域名获取主域名设置的cookie

服务端:

const host = request.headers.host;

if(host === 'a.test.com'){

'Cache-Control': 'max-age = 200000,no-cache',

’Set-Cookie': 'id=123;max-age=200'

}

chrome工具 Host Admin 映射域名和ip

 

设置所有子域名都可以访问主域名的cookie

只需要设置cookie中的domain = test.com

’Set-Cookie': 'id=123;max-age=200;domain=test.com'

 

session

cookie不等于session

 

Http长连接

chrome最大并发 6个  最多一次6个不同的TCP连接

connect:'keep-alive'  |  'close'

http2有信道复用,  所有的请求复用一个tcp连接 (同域名)

 

数据协商

分类:请求  返回

请求:

Accept 指定想要的数据类型

Accept-Encoding 

Accept-Language

User-Agent  浏览器相关信息  系统版本   浏览器内核  渲染引擎的版本 chrome版本号  等等

返回

content

Content-Type : 数据的格式

Content-Encoding 数据压缩的方式

Content-Language 是否按照请求设置的语言返回

node中使用zlib包压缩数据

res.end(zlib.gzipSync(html))

 

Redirect

指定302

response.writeHeader(302,{

  'Loaction' : '/new'

})

指定301

response.writeHeader(301,{   //将路径永久重定向,由浏览器重定向请求

  'Loaction' : '/new'

})

 

设置请求头:vary 当请求头是同一个值时,才会使用缓存(针对代理缓存)

Cache-Control:"s-maxage=200"

vary: "X-Test-Cache"

X-Test-Cache的值相同时,才可以使用缓存

 

Https

加密

私钥

公钥 放在互联网上的加密过的字符串,所有人都可以拿到,用来对传输的信息加密

公钥和私钥在握手的时候传输

https握手过程

 

https默认使用443端口

nginx配置https http重定向到http

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值