这是我参与「第四届青训营 」笔记创作活动的的第2天
前言
作为前端开发人员,我们在工作的过程中时常会与网络协议打交道。因此我们需要学习一些基本的网络知识,在面试的过程中也会涉及这部分的提问,即使很基础,但是没有了解过的话也是没有印象的。接下来我们将花上一些时间来了解一下网络知识。
HTTP协议
HTTP是 hypertext transfer protocol(超文本传输协议)的简写,是网络通讯中的一种协议,用于定义浏览器与服务器之间交换数据的过程。客户端连上服务器后,若想获得服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与服务器通迅的格式。
请求方式
既然是客户端想要获取资源,那么客户端在请求资源的时候就会有不同的请求方式:
GET向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。PUT向指定资源位置上传其最新内容DELETE请求服务器删除指定的资源HEAD向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。OPTIONS返回服务器针对特定资源所支持的HTTP请求方法TRACE回显服务器收到的请求,主要用于测试或诊断PATCH用于对资源应用部分修改
状态码
在客户端请求到了像要的数据之后,或者没有请求到数据,这时候状态码就能很好的帮助我们定位请求失败或报错的大概原因。
- 1xx:信息性状态码(我也没有用过)
- 2xx:请求成功
200 -> 网络请求成204 -> 请求成功,但是服务没有内容返回- 206 -> 请求成功,服务器返回指定范围内的内容
- 3xx:重定向
301 -> 永久重定向(网站域名永久更改,有利于搜索引擎优化)302 -> 临时重定向(活动页面,将首页临时重定向到活动页)304 -> 请求的资源未修改,不返回任何资源
- 4xx: 资源问题
400 -> 请求报文语法错误401 -> 需要进行授权403 -> 没有权限访问资源404 -> 没有找到对应资源
- 5xx:服务器问题
500 -> 一般为后端发生错误,代码错误等- 502 -> 网关无响应
- 503 -> 服务器繁忙或者停机等情况
504 -> 网关超时
常用请求头
在客户端请求数据的时候,他向服务器发送的请求里就包含有请求头,里面的字段有着对应的信息。
- Accept:接收类型,表示浏览器支持的MIME类型(对标服务器返回的Content-Type)
- Content-Type:客户端发送出去实体内容的类型
- Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
- If-Modified-Since:对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内
- Expires:缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
- Max-age:代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
- If-None-Match:对应服务端的ETag,用来匹配文件内容是否改变(非常精确)
- Cookie:有cookie并且同域访问时会自动带上
- Referer:该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址, csrf拦截常用到这个字段)
- Origin:最初的请求是从哪里发起的(只会精确到端口) ,Origin比Referer更尊重隐私
- User-Agent:用户客户端的一些必要信息,如UA头部等
常用响应头
与之对应的,当服务器将客户端想要的数据发送回来的时候,也会在数据的前面加上响应头
- Content-Type:服务端返回的实体内容的类型
- Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
- Last-Modified:请求资源的最后修改时间
- Expires:应该在什么时候认为文档已经过期,从而不再缓存它
- Max-age:客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
- ETag:资源的特定版本的标识符, Etags类似于指纹
- Set-Cookie:设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
- Server:服务器的一些相关信息
- Access-Control-Allow-Origin:服务器端允许的请求Origin头部(譬如为*)
HTTPS
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护,从而确保了数据传输的安全。
通讯传输过程如下:
HTTP与HTTPS的区别
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,
一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。 HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是
80(http),后者是443(https)。 - HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。