HTTP请求模型
上图描述的http最最最基本的一个概况
- 两个端:客户端 和 服务端
- 两个动作:
- 客户端向服务端发起请求(request)
- 服务端对客户端进行响应(response)
http协议是一种无状态协议,它维持不住当前的通信状态。 即:客户端发起请求,服务端响应,这就结束了,这是独立的一次轮回,如果想再请求,那么就会再来一次 请求响应,这两次轮回是相互独立的,互不影响。
浏览器行为与http协议
处理流程:- 输入网址并回车
- 解析域名
- 浏览器发送http请求
- 服务器处理请求
- 服务器返回http响应
- 浏览器处理html页面
- 继续请求其他资源
总结:
第一步 用户在浏览器输入网址,对浏览器发号指令,带我去google.com,这样浏览器就接受到了这个指令。
第二步 浏览器检查网络是否通畅,在局域网中,向防火墙或者家用路由器或者网关,提交密码,翻出墙外。这里所说的墙内就是我们的局域网,墙外则是互联网。
第三步 google.com这是一个字符串,浏览器是不认识这个字符串的 它需要把这个字符串转化为 IP地址,这个时候它就去请问 DNS 服务器 ,找到对应的IP地址(Ipv4协议)。google.com相当于是一个名字,除了你自己没人知道具体地址在哪,而IP地址则是一个具体的门牌号,这样浏览器就知道往哪走了。
第四步 知道了地址,就可以上路了,这里并不是 直接过去的,它需要多个路由的转发,类似于快递的运送
第五步 浏览器顺着网线 终于到了google的服务器对应的地址。但是这个地址上有很多的服务器。也就是图4上描述的一棵树上站了很多只鸟?。一只鸟?就代表一个服务器,也就是说这么多服务器有一个共同的出口,即这个ip地址,这些服务器怎么公用了一个ip地址这就涉及到了反向代理,后续解释。反向代理帮你指定到你想要访问的服务器,到此为止,request请求就结束了
第六步 服务器处理请求,处理业务逻辑,处理完的数据返回给浏览器,这个过程就是response。
最后 浏览器将获得的数据 进行一系列的处理 整合渲染之后返回给用户
什么是HTTP协议
HTTP是超文本传输协议,从www浏览器传输到本地浏览器的一种传输协议,网站是基于HTTP协议的,例如网站的图片、css、js等都是基于http协议进行传输的
http协议是由从客户端到服务器的请求和从服务器到客户端的响应进行的约束和规范,大家需要遵守的一种规范
http 协议主要是通过 request请求和 response 这两个动作进行约束的
了解TCP/IP协议栈
协议栈是分层的 下图中 左图为 ISO/OSI 协议 这是一种建议规范 右图为TCP/IP协议 这是一种事实协议
- 应用层 为用户提供所需要的各种服务,例如:HTTP、FTP、DNS等等
- 传输层 为应用层实体提供端到端的通信功能,保证数据包的顺序传送以及数据的完整性 TCP 传输控制协议,维持通信状态 UDP 用户数据报协议
- 网络层 分配ip地址,PPP协议,建立通信链路
- 数据链路层 物理层上传输的信号
- 物理层 看到见摸得着的硬件,网线,还有一些看不见摸不着的载体 无线电波
http协议属于应用层,在TCP/IP协议之上,HTTP协议 与HTTPS协议大部分是相同的,区别在于 https 在应用层中多添加了加密协议,如果按照ISO/OSI协议的话,也就是加在了表示层和会话层中。http默认端口是80,https默认端口是443。
HTTP的工作过程
一次HTTP操作称为一个事务
事务是由若干个步骤构成的,这些若干个步骤必须严格的按照一定的顺序去执行,并且其中的一个步骤失败了,那么整个事情就失败了。
http 操作过程分为四步:
- 首先客户机与服务器需要建立链接(在 TCP层次)。只要点击某个超级链接,http的工作开始。
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。 这一步是 http层面上的 request
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 这一步是http层面上的response
- 客户端接受服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开链接,这一步骤分为两层 一层是浏览器进行渲染,另一层面是在TCP层面上与服务器断开链接
请求和响应
- HTTP请求组成:请求行、消息报头、请求正文
- HTTP响应组成:状态行、消息报头、响应正文
- 请求行组成:以一个方法符号开头,后面跟着请求的URL和协议的版本。
- 状态行组成:服务器HTTP协议的版本,服务器返回的响应状态码和状态码的文本描述
请求
响应
请求方法
- GET 请求获取Request-URI所标识的资源
- POST 在Request-URI所标识的资源后附加新的数据
- HEAD 请求获取由Request-URI所标识的资源的响应消息报头
- PUT 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE 请求服务器删除Request-URI所标识的资源
- TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
HTTP状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常用的请求报头
-
Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,Accept:text/
-
htmlAccept-Charset请求报头域用于指定客户端接受的字符集。
-
Accept-Encoding:Accept-Encoding请求报 头域类似于Accept,但是它是用于指定可接受的内容编码。
-
Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。
-
Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服 务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进 行验证。
-
Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,发 送请求时,该报头域是必需的。
-
User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
常用的响应报头
- Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
- Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。
- WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
常用的实体报头
请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。
- Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
- Content-Language实体报头域描述了资源所用的自然语言。
- Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
- Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。
- Last-Modified实体报头域用于指示资源的最后修改日期和时间。
- Expires实体报头域给出响应过期的日期和时间。
cookies与session
- cookie是保存在客户端的 而session 是保存在服务端的
- 当客户端每次发送URL请求时,cookie的内容都会附加在请求头上
- Session则保存在服务器端,通过唯一的值sessionID来区别每一个用户。SessionID随每个连接请求发送到服务器,服务器根据sessionID来识别客户端,再通过session 的key获取session值。
cookie 的使用
1)Cookie:客户端将服务器设置的Cookie返回到服务器; 2)Set-Cookie:服务器向客户端设置Cookie;
服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie 头中发送给服务器。从而实现会话的保持。
session 的使用
HTTP缓存机制
- 缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。
- 缓存的优点:减少相应延迟 减少网络带宽消耗
两种缓存策略;
- Etag/If-None-Match策略
- Last-Modified/If-Modified-Since策略
缓存流程:
https协议分析
- 采用非对称加密手段,数字证书策略 CA
- HTTPS协议、SSL协议、TLS协议、握手协议的关系
- HTTPS是Hypertext Transfer Protocol over Secure Socket Layer的缩写,即HTTP over SSL,可理解为基于SSL的HTTP协议。HTTPS协议安全是由SSL协议实现的。
- SSL协议是一种记录协议,扩展性良好,可以很方便的添加子协议,而握手协议便是SSL协议的一个子协议
- TLS协议是SSL协议的后续版本,本文中涉及的SSL协议默认是TLS协议1.2版本
http2 协议分析
- 使用二进制格式传输,更高效、更紧凑
- 对报头压缩,降低开销。
- 多路复用,一个网络连接实现并行请求
- 服务器主动推送,减少请求的延迟
- 默认使用加密
了解HTTP3
- 由google 创造 原名叫 HTTP-over-QUIC
- 基于 QUIC协议
- HTTP3 不是http2的扩展
- HTTP3 将是一个全新的协议 目前处于测试阶段
HTTP与反向代理
正向代理: 客户端——》局域网内 —proxy—》 互联网 反向代理: 互联网 —proxy—》服务器反向代理的作用:
- 加密和SSL加速
- 负载均衡
- 缓存静态内容
- 压缩
- 减速上传
- 安全
- 外网发布