TCP http keep-alive CORS

状态码

  • 3位数,5大类
  • 1XX 表示通知信息,如请求收到了或正在进行处理。
  • 2XX 表示成功
    • 201 created
    • 204 no content
    • 206 服务器成功处理了部分 GET 请求
  • 3XX 表示重定向,若是完成ygfigip必须采起进一步的行动。
    • 301 永久移动
    • 302 临时重定向 post到get
    • 303 See Other一般做为 PUT 或 POST 操做的返回结果,它表示重定向连接指向的不是新上传的资源,而是另一个页面,好比消息确认页面或上传进度页面。而请求重定向页面的方法要老是使用 GET。
    • 304 Not Modified
    • 307 与 302 之间的惟一区别在于,当发送重定向请求的时候,307 状态码能够确保请求方法和消息主体不会发生变化。
  • 4XX 表示客户的差错,如请求中有错误的语法或不能完成。
    • 400 服务器不理解请求的语法,当参数错误的时候会遇到
    • 401 身份验证错误,当访问受保护路由须要登陆
    • 403 Forbidden,当访问的资源不被容许
    • 404 服务器找不到请求的网页
    • 405 Method Not Allowed 方法实现了可是不充许用
    • 406 Not Acceptable MIME type
  • 5XX 表示服务器
    • 500 后端程序报错会遇到
    • 501 Not Implemented 请求的方法没有实现
    • 502 错误网关,服务器做为网关或代理,从上游服务器收到了无效的响应。
    • 503 服务不可用,当服务器宕机
    • 504 请求超时
    • 505 HTTP 版本不受支持

HTTP 缓存

  • 命中强缓存的状况下,返回的 HTTP 状态码为 200
  • Cache-Control 相对于 expires 更加准确,它的优先级也更高。当 Cache-Control 与 expires 同时出现时,咱们以 Cache-Control 为准。
  • 若是服务端提示缓存资源未改动(Not Modified),资源会被重定向到浏览器缓存,这种状况下网络请求对应的状态码是 304(以下图)。
  • Etag 在感知文件变化上比 Last-Modified 更加准确,优先级也更高。当 Etag 和 Last-Modified 同时存在时,以 Etag 为准。
ETag: W/"2a3b-1602480f459"
If-None-Match: W/"2a3b-1602480f459"

 Last-Modified
 If-Modified-Since
复制代码

must-revalidate

那么这样一来,基本能够将 no-cache 与 must-revalidate, max-age=0 划等了,但这二者也有些细节上的区别,即:vue

在执行must-revalidate时,若浏览器第二次去请求服务器来作新鲜度验证,结果服务器挂了,没法访问,那么缓存须要返回一个504 Gateway Timeout的错误(这里应该是像nginx这样的代理来返回,如果浏览器如chrome,将直接是ERR_CONNECTION_REFUSED,即没法访问,链接被拒绝)。ios

而若是是no-cache,当验证新鲜度时,服务器扑街,则会照样使用本地缓存显示给用户(有的总比没的好,固然有可能显示的就是旧的文档了)。nginx

因此must-revalidate用在对事务要求比较严苛的状况下使用(好比支付)web

报文分三部分

  1. 开始行 用于区分是请求报文仍是响应报文,在请求报文中的开始行叫作请求行,而在响应报文中的开始行叫作状态行。
  2. 首部行 每一行在结束的地方都要有回车或换行。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
  3. 实体主体

3次握手和4次挥手

6个控制位,用来讲明本报文段的性质。说明: 确认 ack、推送 psh、 复位 rst、同步 syn、 终止 fin、 窗口算法

为何A最后还要发送一次确认呢?这主要是为了防止已失效的链接请求报文段忽然又传到B,于是产生错误。

UDP/TCP

用户数据报协议 UDP

  • 无链接,发送数据以前不须要建议链接,所以减小了开销和发送数据以前的时延。
  • 尽最大努力交付,不保证可靠交付。
  • 没有拥塞控制
  • 支持一对1、一对多、多对一和多对多的交互通讯
  • 首部开销小,只有8字节,比tcp的20个字节短。

传输控制协议 tcp

  • 面向链接,在使用以前必须建议链接。传送完后再释放,就像打电话,挂机。
  • 可靠交付,无差错、不丢失、不重复、而且按序到达。
  • 全双工通讯
  • 每一条链接只有两个端点,只能是点对点的。
  • 面向字节流

可靠传输的工做原理

  • 中止等待协议,就是每发完一个分组就中止发送,等待对方的确认。在收到确认后再发送下一个分组。
  • 每发送完一个分组,设置一个超时计时器。若是超时没有收到,认为丢失了,重传前面发过的分组,叫作超时重传。
  • 确认迟到,重复收到到,不向上层交付,而后发送确认。

http1.1 keep-alive

1.1版本新增,对同一个域名同时开6个connection,我发了12个get请求,浏览器采用非流水线模式。见下图:chrome

观察connection列,第二组与第一组的id是相同的,说明是共用的第一组。express

跨域资源共享(CORS)

不一样的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。 浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头。json

  • express 设置容许跨域代码
app.all('*', function(req, res, next) {
	res.header("Access-Control-Allow-Origin", "*");
	res.header("Access-Control-Allow-Headers", "Content-Type,Access-Token,X-Requested-With");
	res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
	res.header("X-Powered-By",' 3.2.1')
	res.header("Content-Type", "application/json;charset=utf-8");
	next();
})
复制代码

预检请求

与前述简单请求不一样,“需预检的请求”要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否容许该实际请求。"预检请求“的使用,能够避免跨域请求对服务器的用户数据产生未预期的影响。axios

  • 使用了下面任一 HTTP 方法,应首先发送预检请求
    • PUT
    • DELETE
    • CONNECT
    • OPTIONS
    • TRACE
    • PATCH
  • Content-Type 的值不属于下列之一:
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

举例:OPTIONS /users/ 200 0.883 ms - 13后端

发送post请求到users,S端只收到options请求,B收到响应后, 知道不许许跨域,不会再发送真正的post请求

跨域请求发送携带身份凭证信息

# vue 中axios 
this.$http.get('http://localhost:3000/users/', {
	withCredentials: true
})

# 响应头设置
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header("Access-Control-Allow-Headers", "Content-Type,x-xsrf-token");
res.header("Access-Control-Allow-Credentials",true);
复制代码

对于附带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为“*”。

功能概述

跨域资源共享标准新增了一组 HTTP 首部字段,容许服务器声明哪些源站经过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生反作用的 HTTP 请求方法(特别是 GET 之外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否容许该跨域请求。服务器确认容许以后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也能够通知客户端,是否须要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。

五层协议

  • 计算机通讯 是两个运行的进程之间的通讯
  • 五层协议的体系结构只为介绍网络原理而设计,实用应用的仍是tcp/ip四层体系结构

HTTPS和HTTP的区别

  • 1、https协议须要到ca申请证书,通常免费证书不多,须要交费。
  • 2、http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议。
  • 3、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
  • 4、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

http2

之因此要递增一个大版本到 2.0,主要是由于它改变了客户端与服务器之间交换数据 的方式。为实现宏伟的性能改进目标,HTTP 2.0 增长了新的二进制分帧数据层,而 这一层并不兼容以前的 HTTP 1.x 服务器及客户端——是谓 2.0。

  1. 二进制分帧数据层
  2. 服务器端推送
  3. 全部通讯都在一个TCP链接,多路复用
  4. 头部进行压缩
  • 流是链接中的一个虚拟信道,能够承载双向的消息;每一个流都有一个惟一的整数 标识符(一、2…N)

  • 消息是指逻辑上的 HTTP 消息,好比请求、响应等,由一或多个帧组成

  • 帧是最小的通讯单位,承载着特定类型的数据,如 HTTP 首部、负荷,等等。

  • 有了新的分帧机制后,HTTP 2.0 再也不依赖多个 TCP 链接去实现多流并行了。 如今, 每一个数据流都拆分红不少帧,而这些帧能够交错,还能够分别优先级。 因而,全部 HTTP 2.0 链接都是持久化的,并且客户端与服务器之间也只须要一个链接便可。

参考连接

持续新增

HTTP Strict Transport Security

(一般简称为HSTS)是一个安全功能,它告诉浏览器只能经过HTTPS访问当前资源,而不是HTTP。

语法

设置在浏览器收到这个请求后的<expire-time>秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。
Strict-Transport-Security: max-age=<expire-time>

若是这个可选的参数被指定,那么说明此规则也适用于该网站的全部子域名。
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains

查看 预加载 HSTS 得到详情。不是标准的一部分。
Strict-Transport-Security: max-age=<expire-time>; preload
复制代码

Chrome、Firefox等浏览器里,当您尝试访问该域名下的内容时,会产生一个307 Internal Redirect(内部跳转),自动跳转到HTTPS请求。

Upgrade-Insecure-Requests: 1 是一个请求首部,用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应,

参考 :developer.mozilla.org/zh-CN/docs/…

HTTPS

密码编码学是密码体制的设计学,而密码分析学则是未知密钥的状况下从密文推演出明文或密钥的技术。密码编码学与密码分析学合起来即为密码学。

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被普遍使用。当时他们三人都在麻省理工学院工做。RSA就是他们三人姓氏开头字母拼在一块儿组成的。

HTTPS在传输的过程当中会涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密

客户端生成的随机密钥,用来进行对称加密

简要过程

  • (1)协商加密算法。

    • 1.浏览器A向服务器B发送浏览器的ssl版本号和一些加密算法。
    • 2.B从中选定本身所支持的算法如RSA,并告知A.
  • (2) 服务器鉴别。

    • 3.服务器B向浏览器A发送包含其rsa公钥的数字证书。
    • 4.A使用该证书的认证机构CA公开发布的RAS公钥对该证书进行验证。
  • (3) 会话密钥计算。 由浏览器A随机产生一个秘密数。

    • 5。用服务器B的RAS公钥进行加密后发送给B。
    • 6 双方根据协商的算法产生共享的对称会话密钥。
  • (4)安全数据传输

    • 7双方用会话密钥加密和解密他们之间传送的数据并验证其完整性。
相关文章
相关标签/搜索