HTTP协议学习(补充)

1.HTTP长连接

每次http请求需要创建tcp连接,需要三次握手

chrome一次支持6个并发连接

创建长连接可以在请求头里面加上Connection: Keep-Alive

一个TCP连接可以发送多个HTTP请求,但是在HTTP1.1里面http请求在tcp连接上发送是有先后顺序的,但是在HTTP2上面可以并发的发送http请求

2.数据协商

客户端发送给服务端请求的时候,客户端会声明希望这个请求我拿到的数据格式和数据相关的限制,服务端会根据这个请求进行判断返回不同的数据类型

可以分为请求返回两类

1.Accept
  • Accept 我想要的数据类型
  • Accept-Encoding 想要的数据的编码格式
  • Accept-Language 希望展示的语言
  • User-Agent 浏览器相关信息(返回PC还是移动端页面)
2.Content
  • Content-Type 可以从Accept里面选择一种数据格式进行返回,实际的返回数据格式
  • Content-Encoding 服务端具体用的压缩方式
  • Content-Language 具体返回的语言

请求头里面Accept虽然填了很多,但是服务端不一定按照你想要的结果返回

Accept-Encoding: gzip, deflate, br 其中gzip是用的最多的

Accept-Language:zh-CN;q=0.9,en;q=0.8,zh-TW;q=0.7... 这里的q是权重的意思

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/66.0 3359.181 Safari/537.36

Mozilla/5.0 因为浏览器最早是网景公司出的,所以就默认是Mozilla/5.0的头

(Windows NT 10.0; Win64; x64) 是系统信息

AppleWebKit/537.36 浏览器内核

(KHTML, like Gecko)渲染引擎的版本 Gecko 是火狐浏览器的渲染引擎

Chrome/66.0 3359.181 浏览器版本号

Safari/537.36 因为WebKit是苹果出的,所以会加上这个版本号

X-Content-Type-Options: nosniff 这个在早期浏览器中,如果没有指定Content-Type,则会自动预测返回的类型,会导致一些安全性的问题,但是现在浏览器一般没有这个问题

409B 是包含了响应头的整个包的大小,下面的264B是响应体的大小(获取之后解压)

在服务端可以设置响应头Content-Encoding: gzip会压缩减小整个包的大小

Content-Type: mutipart/form-data 是在上传表单的时候,会分割表单的每一项的每个部分,每个部分有不同的类型会用Content-Type描述,如果没加就是文本

3.Redirect

不同的状态码

  • 301 永久移动

    永久重定向,即使服务端已经好了也不行,301会去读本地磁盘的缓存,所以除非清除浏览器缓存,不然还会继续重定向,没有过期时间

  • 302 临时移动

4.CSP

全称Content-Security-Policy

  • 限制资源获取情况
  • 报告资源获取越权

限制方式(资源类型有很多)

  • connect-src
  • img-src
  • font-src
  • frame-src
  • media-src
  • script-src
  • style-src
  • manifest-src...

需要外链加载的都可以进行一个资源类型的限制

'Content-Security-Policy':'default-src http: https:'   // 限制外链
'Content-Security-Policy':'default-src \'self\'; form-action\'self\''
// 指定出现触发安全策略时向服务器报告
'Content-Security-Policy':'default-src \'self\'; report-uri /report'
posted @ 2022-10-31 23:24  喵喵队立大功  阅读(17)  评论(0编辑  收藏  举报