HTTP协议那些事

HTTP请求模型

上图描述的http最最最基本的一个概况css

  • 两个端:客户端 和 服务端
  • 两个动做:
    • 客户端向服务端发起请求(request)
    • 服务端对客户端进行响应(response)

http协议是一种无状态协议,它维持不住当前的通讯状态。 即:客户端发起请求,服务端响应,这就结束了,这是独立的一次轮回,若是想再请求,那么就会再来一次 请求响应,这两次轮回是相互独立的,互不影响。html

浏览器行为与http协议

处理流程:

  1. 输入网址并回车
  2. 解析域名
  3. 浏览器发送http请求
  4. 服务器处理请求
  5. 服务器返回http响应
  6. 浏览器处理html页面
  7. 继续请求其余资源

总结:浏览器

第一步 用户在浏览器输入网址,对浏览器发号指令,带我去google.com,这样浏览器就接受到了这个指令。缓存

第二步 浏览器检查网络是否通畅,在局域网中,向防火墙或者家用路由器或者网关,提交密码,翻出墙外。这里所说的墙内就是咱们的局域网,墙外则是互联网。安全

第三步 google.com这是一个字符串,浏览器是不认识这个字符串的 它须要把这个字符串转化为 IP地址,这个时候它就去请问 DNS 服务器 ,找到对应的IP地址(Ipv4协议)。google.com至关因而一个名字,除了你本身没人知道具体地址在哪,而IP地址则是一个具体的门牌号,这样浏览器就知道往哪走了。服务器

第四步 知道了地址,就能够上路了,这里并非 直接过去的,它须要多个路由的转发,相似于快递的运送cookie

第五步 浏览器顺着网线 终于到了google的服务器对应的地址。可是这个地址上有不少的服务器。也就是图4上描述的一棵树上站了不少只鸟🐦。一只鸟🐦就表明一个服务器,也就是说这么多服务器有一个共同的出口,即这个ip地址,这些服务器怎么公用了一个ip地址这就涉及到了反向代理,后续解释。反向代理帮你指定到你想要访问的服务器,到此为止,request请求就结束了网络

第六步 服务器处理请求,处理业务逻辑,处理完的数据返回给浏览器,这个过程就是response。session

最后 浏览器将得到的数据 进行一系列的处理 整合渲染以后返回给用户并发

什么是HTTP协议

HTTP是超文本传输协议,从www浏览器传输到本地浏览器的一种传输协议,网站是基于HTTP协议的,例如网站的图片、css、js等都是基于http协议进行传输的

http协议是由从客户端到服务器的请求和从服务器到客户端的响应进行的约束和规范,你们须要遵照的一种规范

http 协议主要是经过 request请求和 response 这两个动做进行约束的

了解TCP/IP协议栈

协议栈是分层的 下图中 左图为 ISO/OSI 协议 这是一种建议规范 右图为TCP/IP协议 这是一种事实协议

  1. 应用层 为用户提供所须要的各类服务,例如:HTTP、FTP、DNS等等
  2. 传输层 为应用层实体提供端到端的通讯功能,保证数据包的顺序传送以及数据的完整性 TCP 传输控制协议,维持通讯状态 UDP 用户数据报协议
  3. 网络层 分配ip地址,PPP协议,创建通讯链路
  4. 数据链路层 物理层上传输的信号
  5. 物理层 看到见摸得着的硬件,网线,还有一些看不见摸不着的载体 无线电波

http协议属于应用层,在TCP/IP协议之上,HTTP协议 与HTTPS协议大部分是相同的,区别在于 https 在应用层中多添加了加密协议,若是按照ISO/OSI协议的话,也就是加在了表示层和会话层中。http默认端口是80,https默认端口是443

HTTP的工做过程

一次HTTP操做称为一个事务

事务是由若干个步骤构成的,这些若干个步骤必须严格的按照必定的顺序去执行,而且其中的一个步骤失败了,那么整个事情就失败了。

http 操做过程分为四步:

  1. 首先客户机与服务器须要创建连接(在 TCP层次)。只要点击某个超级连接,http的工做开始。
  2. 创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。 这一步是 http层面上的 request
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 这一步是http层面上的response
  4. 客户端接受服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开连接,这一步骤分为两层 一层是浏览器进行渲染,另外一层面是在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加速
  • 负载均衡
  • 缓存静态内容
  • 压缩
  • 减速上传
  • 安全
  • 外网发布
相关文章
相关标签/搜索