HTTP实用指南 | 青训营笔记

67 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

前言

作为前端开发人员,我们在工作的过程中时常会与网络协议打交道。因此我们需要学习一些基本的网络知识,在面试的过程中也会涉及这部分的提问,即使很基础,但是没有了解过的话也是没有印象的。接下来我们将花上一些时间来了解一下网络知识。

HTTP协议

HTTP是 hypertext transfer protocol(超文本传输协议)的简写,是网络通讯中的一种协议,用于定义浏览器与服务器之间交换数据的过程。客户端连上服务器后,若想获得服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与服务器通迅的格式

请求方式

既然是客户端想要获取资源,那么客户端在请求资源的时候就会有不同的请求方式:

  • GET 向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。
  • POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
  • PUT 向指定资源位置上传其最新内容
  • DELETE 请求服务器删除指定的资源
  • HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。
  • CONNECT HTTP/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协议,通过SSLTLS提供加密处理数据、验证对方身份以及数据完整性保护,从而确保了数据传输的安全。

通讯传输过程如下:

20180719094739178.jpg

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 要更耗费服务器资源。