全栈工程师成神之路--网络

@wanqiuz 2018-06-30 07:16:49发表于 wanqiuz/blog-articles 全栈工程师成神之路

⭐️ 七层协议和四层协议

0_1325744597wm32

⭐️ 什么是RESTful架构?

REST全称是Representational State Transfer。
(1) 每一个URI代表一种资源;
(2) 客户端和服务器之间,传递这种资源的某种表现层;
(3) 客户端通过HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

⭐️ 简单理解URI、URL、URN区别与联系

URI = Universal Resource Identifier
URL = Universal Resource Locator
URN = Universal Resource Name
用面向对象的思想理解,URI就像是一个父类,用一个函数规定了基本的语法,URL和URN就像是URI的子类。URL多了访问方式(Http、ftp等)、资源地址两个成员变量,URN多了资源名字这个成员变量,而这个名字是唯一的,不依赖于时间、空间、访问方式等等。基于多态的原理,我们一般用父类的指针或者引向指向子类的实体,所以在web开发中,URI这个抽象名词用的比较多。

⭐️ HTTP Request几种方法的安全性和幂等性?

安全性:不会改变资源状态,可以理解为只读的。
幂等性:执行1次和执行N次,对资源状态改变的副作用是等价的。幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的。声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试。

方法名 安全性 幂等性
Get
Post
Put
Delete
Options
Head

安全性和幂等性均不保证反复请求能拿到相同的response。以 DELETE 为例,第一次DELETE返回200表示删除成功,第二次返回404提示资源不存在,这是允许的。

⭐️ 当我们在浏览器的地址栏输入 www.baidu.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢?

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

⭐️ HTTP和HTTPS的区别

  • HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头;
  • HTTP 无法加密,是不安全的,无需证书,而 HTTPS 对传输的数据进行加密,是安全的,需要CA机构颁发SSL证书;
  • 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  • HTTP 标准端口是80 ,而 HTTPS 的标准端口是443

⭐️ HTTP请求报文与响应报文格式

HTTP请求报文格式

  1. 请求行:包含请求方法、URI、HTTP版本信息
  2. 请求头部(分为请求首部字段、通用首部字段、实体首部字段)
  3. 空行
  4. 请求实体

HTTP响应报文格式

  1. 状态行:包含HTTP版本、状态码、状态码的原因短语
  2. 响应头部(分为响应首部字段、通用首部字段、实体首部字段)
  3. 空行
  4. 响应实体

常见的首部:

  • 通用首部字段(请求报文与响应报文都会使用的首部字段)
    Date:创建报文时间
    Connection:连接的管理
    Cache-Control:缓存的控制
    Transfer-Encoding:报文主体的传输编码方式
  • 请求首部字段(请求报文会使用的首部字段)
    Host:请求资源所在服务器
    Accept:可处理的媒体类型
    Accept-Charset:可接收的字符集
    Accept-Encoding:可接受的内容编码
    Accept-Language:可接受的自然语言
  • 响应首部字段(响应报文会使用的首部字段)
    Accept-Ranges:可接受的字节范围
    Location:令客户端重新定向到的URI
    Server:HTTP服务器的安装信息
  • 实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
    Allow:资源可支持的HTTP方法
    Content-Type:实体主类的类型
    Content-Encoding:实体主体适用的编码方式
    Content-Language:实体主体的自然语言
    Content-Length:实体主体的的字节数
    Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

⭐️ HTTP1.0和HTTP1.1对比

HTTP1.0:

  • 无状态、无连接

HTTP1.1:

  • 持久连接
  • 请求管道化(可以并行请求,但是不能并行响应,所以无法解决队头阻塞问题;为了解决这个问题,现代浏览器允许我们打开多个TCP的会话,进行不同的TCP连接上的HTTP请求和响应,实现真正的并行)
  • 增加缓存处理(新的字段如cache-control)
  • 增加Host字段(使得一个服务器能够用来创建多个Web站点)、支持断点传输等

⭐️ Cookie和Session区别

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在内存、数据库、文件中
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息(用户名、密码等),也是实现Session的一种方式(session id)