图解HTTP~总结

<图解http-第一章>

客户端 : 通过发送请求获取服务器资源的 Web 浏览器

TCP/IP : 互联网相关的各种协议的总称 , 层次分别分为以下 4 层:应用层、传输层、网络层和链路层

  应用层 : 决定了向用户提供应用服务时通信的活动 ( HTTP 协议处于该层 )

  传输层 : 提供处于网络连接中的两台计算机之间的数据传输。

  网络层 : 用来处理在网络上流动的数据包

      数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。

  链路层 : 来处理连接网络的硬件部分 ; 硬件上的范畴均在链路层的作用范围之内。

 

TCP 协议采用了三次握手 : 

发送端首先发送一个带 SYN 标志的数据包给对方。

接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。

最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

 

DNS : 简单的说,就是因为一串数字难以记得,然后就用域名,域名就可以用DNS来解析  (提供域名查找到地址的过程 或 地址查找到域名的过程)

 

各大协议的关系 : 

 

 

URL : 统一资源定位符 即地址 ( URL 是 URI 的子集 )

RUI : 统一资源标识符 , 在http请求/响应的时候,会在报文首部(请求行/状态行出现)

绝对URL : 完整的访问地址

相对URL : 相对当前位置的地址

绝对URI : 

登录信息(认证)
  指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
服务器地址
  使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。
服务器端口号
  指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
带层次的文件路径
  指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。
查询字符串

  针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。

片段标识符
  使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项

 

<图解http-第二章>

HTTP 协议用于客户端和服务器端之间的通信

HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理

Cookie 正因为http是无状态协议,才有了Cookie技术.有了 Cookie 再用 HTTP 协议通信,就可以管理状态了( 后面就用token代替了cookie了 )

客户端 : 请求访问文本或图像等资源的一端

服务端 : 提供资源响应的一端

 

客户端发送给某个 HTTP 服务器端的请求报文中的内容

GET /index.htm HTTP/1.1
Host: hackr.jp
GET 表示请求访问服务器的类型,称为方法 /index.htm 指明了请求访问的资源对象,也叫做请求 URI HTTP/1.1 即 HTTP 的版本号,用来提示客户端使用的 HTTP 协议功能。
Host: hackr.jp 请求首部字段
这段请求内容的意思是:请求访问某台 HTTP 服务器上的 /index.htm 页面资源

 

<图解http-第三章>

HTTP 报文用于 HTTP 协议交互的信息 

请求报文 : 请求端(客户端)的 HTTP 报文

响应报文 : 响应端(服务器端)的 HTTP 报文

HTTP 报文 : 报文首部( header )和报文主体( body ) ; 通常不一定有body : get(没有) post(有)

<图解http-第四章>

没有

<图解http-第五章>

通信数据转发程序 :代理、网关、隧道

代理

  是在客户端与服务器之间加一层代理服务器,客户端每次访问时都是访问的代理服务器,然后由代理服务器将请求报文转发给源服务器,源服务器处理完成后将响应发送给代理服务器,代理服务器再返回给客户端。

  这里代理的作用主要有

    ①对客户端请求进行分发;

    ②缓存响应数据;

    ③获取访问日志等等。

    代理和网关的主要区别在于,代理只会接收请求报文,但是不会对其做过多处理,然后将其转发给源服务器,而网关是会对请求做一定的处理的。
网关
  网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

  有时客户端可能都不会察觉,自己的通信目标是一个网关。
隧道
  隧道是在客户端与服务器之间建立一条通信线路,这样就可以使用SSL等加密手段进行通信。

  隧道的主要目的是确保客户端与服务器之间能够进行安全的通信。

 

保存资源的缓存主要有两种类型代理服务器缓存和客户端缓存

两者之间的作用非常类似,就是在客户端发送请求时,首先会检查客户端是否有缓存,如果有,则直接从客户端取,如果没有,则请求代理服务器,

代理服务器如果存在缓存,则直接返回缓存数据,如果不存在,则请求资源服务器。

这里需要注意的一个问题是,缓存的失效是通过缓存设置的时间来控制的,当超过了设置的时间之后,客户端或者代理服务器就会将请求发到资源服务器,从而拉取最新数据,更新缓存。

 

<图解http-第六章>

http的首部字段

通用首部字段

Cache-Control : 控制缓存的行为

Cache-Control: private, max-age=0, no-cache

                     

 

 

Connection : 逐跳首部,链接管理

Date : 创建报文的日期时间

Pragma : 报文指令

Trailer : 报文末端的首部一览

Transfer-Encoding : 指定报文主体的传输编码方式

Upgrade : 升级为其他协议

Via : 代理服务器的相关信息

Warning : 错误通知

请求首部字段

Accept : 用户代理可处理的媒体类型

Accept-Charset : 优先的字符集

Accept-Encoding : 优先的内容编码

Accept-Language : 优先的语言

Authorization : Web认证信息

Expect : 期待服务器的特点行为

From : 用户的电子邮件地址

Host : 请求资源所在服务器

If-Match : 比较实体标记

If-Modified-Since : 比较资源的更新时间

If-Range : 资源未更新时发送实体Byte的范围请求

If-Unmodified-since : 比较资源的更新时间

Max-Forwards : 最大传输逐跳数

Proxy-Authorization : 代理服务器要求客户端的认证信息

Range : 实体的字节范围请求

Referer : 对请求中URL的原始获取方

TE : 传输编码的优先级

User-Agent : HTTP客户端程序的信息

响应首部字段

Accept-Ranges : 是否接受字节范围请求

Age : 推算资源创建经过时间

ETag : 资源的匹配信息

Location : 令客户端重定向至指定URI

Proxy-Authenticate : 代理服务器对客户端的认证信息

Retry-After : 对再次发起请求的时机要求

Server : HTTP服务器的安装信息

Vary : 代理服务器缓存的管理信息

WWW-Autehnticate : 服务器对客户端的认证信息

实体首部字段

Allow : 资源可支持的HTTP方法

Content-Encoding : 实体主体适用的编码方式

Content-Language : 实体主体的自然语言

Content-Length : 实体主体的大小

Content-Location : 替代对应资源的URI

Content-MD5 : 实体主体的报文摘要

Content-Range : 实体主体的位置范围

Content-Type : 实体主体的媒体类型

Expires : 实体主体过期的日期时间

Last-Modified : 资源的最后修改日期时间

 

<图解http-第七章>

http的不足 : 

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

与 SSL 组合使用的 HTTP 被称为 HTTPS

HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

<图解http-第八章>

没有

<图解http-第九章>

WebSocket协议是基于HTTP协议的,连接的发起方仍然是客户端,一旦建立了通信连接,双方可互相发送报文

主要特点 : 

推送功能
  支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
减少通信量
  只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息很小,通信量也相应减少了。

为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一次“握手”(Handshaking)的步骤

 

完结 ~ ~

 

posted @ 2022-04-18 17:29  杨建鑫  阅读(251)  评论(0编辑  收藏  举报