HTTP实用指南学习(1) | 青训营笔记

148 阅读9分钟

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

笔记小结: 继上节课的Web开发安全知识的学习,《HTTP实用指南》学习起来较之轻松了一些。这节课老师从初识HTML、协议分析、常见的使用场景及实际应用等,向我们介绍了有关Html的基本特点、协议报文结构。发展历程等,从浏览器与node的使用方面讲述其实际的应用场景,在课程结尾也向我们介绍了更多HTTP的协议选择,以下是课程对照笔记。

01. 初识HTTP

  • HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
  • HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)。
  • HTTPS 协议是 HyperText Transfer Protocol Secure(超文本传输安全协议)的缩写,是一种通过计算机网络进行安全通信的传输协议。
  • HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
  • HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443


HTTP 工作原理

  1. HTTP 协议工作于客户端-服务端架构上。
  2. 浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
  3. Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。
  4. Web 服务器根据接收到的请求后,向客户端发送响应信息。
  5. HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。

HTTP 三点注意事项:

  • HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
  • HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
  • HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。

以下图表展示了 HTTP 协议通信流程:

cgiarch


HTTPS 作用

HTTPS 的主要作用是在不安全的网络上创建一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。
HTTPS 的信任基于预先安装在操作系统中的证书颁发机构(CA)。

因此,与一个网站之间的 HTTPS 连线仅在这些情况下可被信任:

  • 浏览器正确地实现了 HTTPS 且操作系统中安装了正确且受信任的证书颁发机构;
  • 证书颁发机构仅信任合法的网站;
  • 被访问的网站提供了一个有效的证书,也就是说它是一个由操作系统信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);
  • 该证书正确地验证了被访问的网站
  • 此协议的加密层(SSL/TLS)能够有效地提供认证和高强度的加密。

Google Chrome、Internet Explorer 和 Firefox 等浏览器在网站含有由加密和未加密内容组成的混合内容时,会发出警告。

image.png

02. 协议分析

发展历程

image.png

报文

Method

  • Safe(安全的):不会修改服务器的数据的方法
    • GET HEAD OPTIONS
  • Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的所有safe的方法都是ldempotent的
    • GET HEAD OPTIONS PUT DELETE

状态码

  • 200 OK -客户端请求成功
  • 301 资源(网页等)被永久转移到其它URL
  • 302 临时跳转
  • 401 Unauthorized -请求未经授权
  • 404 请求资源不存在,可能是输入了错误的URL
  • 500 服务器内部发生了不可预期的错误
  • 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应。

image.png

RESTful API
RESTful API:一种API设计风格;REST - Representational State Transfer

  1. 每一个URI代表―种资源;
  2. 客户端和服务器之间,传递这种资源的某种表现层;
  3. 客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"。

image.png

常用请求头

image.png

常用响应头

image.png

缓存

强缓存

  • Expires,时间戳
  • Cache-Control
    • 可缓存性
      • no-cache : 协商缓存验证
      • no-store :不使用任何缓存
    • 到期
      • max-age :单位是秒,存储的最大周期,相对于请求的时间
    • 重新验证|重新加载
      • must-revalidate : 一旦资源过期,在成功向原始服务器验证之前,不能使用

协商缓存

  • Etag/lf-None-Match :资源的特定版本的标识符,类似于指纹
  • Last-Modified/lf-Modified-Since:最后修改时间

QQ截图20220807164223(已去底).jpg

cookie
Set-Cookie - response

image.png

03. 场景分析

静态资源

静态资源:

  • 在静态Web程序中,客户端使用Web浏览器(IE、FireFox等),使用HTTP协议发起一个请求,告诉服务器我现在需要得到哪个页面,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过Web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。
  • 为了让静态web页面显示更加好看,使用javascript/VBScript/ajax,但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。
  • 静态web无法连接数据库;
  • 静态web资源开发技术:HTML;
  • 由于现在的web页面中,大量使用JS,导致浏览器打开页面,就会占用大量的内存,服务端的压力是减轻了,但压力转移到了客户端。

区别:

  • 静态页面就是设计者把页面上所有东西都设定好、然后放上去,不管是谁在任何时候看到的页面内容都是一样的(除非手动修改页面内容)。静态html页面文件,可以直接用本地的浏览器打开。比如:file:///Users/Phil/Documents/DevOps/HBuilderProjects/testJSP/index.html。
  • 动态页面的内容一般都是依靠服务器端的程序来生成的,不同人、不同时候访问页面,显示的内容都可能不同。网页设计者在写好服务器端的页面程序后,不需要手工控制,页面内容会按照页面程序的安排自动更改变换。
  • html是w3c规范的一种网页书写格式,是一种统一协议语言,静态网页。我们上网看的网页都是大部分都是基于html语言的。
  • jsp是一种基于动态语言,jsp可以实现html的所有任务,
  • HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在TXT文档中写上HTML标记就可以正常显示。
  • JSP(Java Server Page)是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显示,我们都知道,Java文件编译后会产生一个class文件,最终执行的就是这个class文件。
  • JSP的前身是servlet;
  • html和jsp的表头不一样,这个是JSP的头“ <%@ page language=“java” import=“java.util.*” pageEncoding=“gbk”%>”在表头中有编码格式和倒入包等。也是很好区分的,在jsp中用<%%>就可以写Java代码了,而html没有<%%>。
  • 不认识jsp或者asp什么什么的,但是有时候界面需要逻辑控制,所以我们就用相应的技术来实现,这样比较方便。而jsp在后台通过服务器解析为相应的html,然后在供浏览器识别显示。

跨域

同一个源下的资源与另一个源下的资源进行交换。切记 跨域仅仅是针对浏览器而言的,像两个服务端之间执行http请求的则不属于跨域。

跨域出现的场景:

  • 前后端分离情况下,前台请求不同源的后台服务
  • 微服务下,服务实例在多个不同源的服务上
  • 资源共享,公共的静态资源如图片,音频视频等存放在一个服务中,其他web页面访问该服务获取资源(其他web页面与存放静态资源的服务不同源)

为什么出现跨域

浏览器的同源 : 浏览器针对 相同的协议(http、https),相同的ip,端口(port),或者域名相同的两个页面,则认为这两个页面为同源,例如 www.baidu.com/aaa.htmlwww.baidu.com/bbb.html即可以…www.58.cn/bbb.html即可以…
浏览器的同源策略为:为了安全考虑,浏览器限制了同一个源加载的文档或脚本不允许与另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

04. 扩展——通信方式

WebSocket

  • 浏览器与服务器进行全双工通讯的网络技术
  • 典型场景:实时性要求高,例如聊天室.
  • URL使用ws://或wss://等开头

QUC: Quick UDP Internet Connection

  • 0-RTT建联(首次建联除外)。
  • 类似TCP的可靠传输。
  • 类似TLS的加密传输,支持完美前向安全。
  • 用户空间的拥塞控制,最新的BBR算法。
  • 支持h2的基于流的多路复用,但没有TCP的HOL问题。
  • 前向纠错FEC。
  • 类似MPTCP的Connection migration。