美文网首页
【图解 HTTP】

【图解 HTTP】

作者: 邱杉的博客 | 来源:发表于2018-04-23 09:55 被阅读0次

HTTP 1.1 标准的通信过程:
HTTP 方法
协议格式
保温结构
首部字段
状态码

web 安全
https
SSL
证书认证
加密机智
web 攻击手段

1. 了解 web 及其网络

  • 外部链接 backward:指的是从一个单独的站点上,通过外部链接来指向并访问不属于该站点上的网页。
  • 内部链接 internal:指的是在一个单独的站点内,通过内部链接来指向并访问属于该站点内的网页。
  • 操作类链接:点击之后可以执行一些操作,如发送邮件、打开软件、导航到锚点等。

http 的诞生是为了让身处不同地方的人共享知识,解决文本传输的难题。最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的WWW(World Wide Web,万维网)。

ml 标记语言、 http 转移协议、 URI

现在已提出了3项WWW构建技术,分别是:把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的HTML(HyperText Markup Language,超文本标记语言);作为文档传递协议的HTTP;指定文档所在地址的URL(Uniform Resource Locator,统一资源定位符)。

通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。
不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。

DNS 负责域名解析
ip 负责传输 (路由,ip地址和MAC地址)
tcp 确保传输可靠 (三次握手)
uri 标识某一互联网资源, url 表示资源的地点

应用层:http、FTP、DNS
传输层:TCP、UDP
网络层:IP,选择一条传输路线,处理数据包
数据层(网络接口层):连接网络硬件部分,如控制操作系统、网卡、光线

TCP/IP 通信传输流 地址栏输入 web 页面
URI 格式

首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)。

  • IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。
  • TCP 位于传输层,提供可靠的字节流服务。大块数据包分割为报文段segment为单位的数据包,三次握手。

  • URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。

2. 简单的 HTTP 协议

请求报文的构成
status code
reason-phrase
header-field
空行分隔
entity body
响应报文的构成

get、post、head、put、delete、trace、connect
http 的 connect 方法,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

使用浏览器浏览一个包含多张图片的HTML页面时,在发送请求访问HTML页面资源的同时,也会请求该HTML页面里包含的其他资源。因此,每次的请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。
在HTTP/1.1中,所有的连接默认都是持久连接,但在HTTP/1.0内并未标准化。

当请求一个包含10张图片的HTML Web页面,与挨个连接相比,用持久连接可以让请求更快结束。而管线化技术则比持久连接还要快。请求数越多,时间差就越明显。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。

①请求报文(没有Cookie信息的状态)
GET /reader/ HTTP/1.1
Host: hackr.jp
*首部字段内没有Cookie的相关信息
②响应报文(服务器端生成Cookie信息)
HTTP/1.1200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed, =>
10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8
③请求报文(自动发送保存着的Cookie信息)
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724

3. HTTP 报文内的 HTTP 信息

  • 编码压缩传输的内容
  • 分割发送的分块传输编码
  • 多部分对象集合 Multipart
  • Range Request 指定范围发送请求
  • Content Negotiation 显示浏览器默认语言的页面
    • Accept-Language
    • Content-Language
    • Accept-Charset
    • Accept-encoding

报文 message
用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

HTTP报文大致可分为报文首部和报文主体两块。
两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体

HTTP 报文的结构 请求报文和响应报文的结构 请求报文和响应报文的实例

首部字段

  • 通用首部
  • 请求首部
  • 响应首部
  • 实体首部

通过编码提升传输速率,需要计算机来完成编码,消耗更多的 CPU 等资源。
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

报文主体和实体主体

●报文(message)
是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
●实体(entity)
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

HTTP报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

chuncked transfer coding 分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。

使用分块传输编码的实体主体会由接收的客户端负责解码,恢复到编码前的实体主体。

发送邮件时,我们可以在邮件里写入文字并添加多份附件。这是因为采用了MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。
multipart 多部分对象集合

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

5. 与 HTTP 协作的 Web 服务器

在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

代理 代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。 网关 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。 隧道 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。

是否使用缓存; 是否修改报文

网关能使通信线路上的服务器提供非 http 服务,在客户端与网关之间的线路上加密确保线路安全。网关可以连接数据库,使用SQL语句查询数据。另外,在Web购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

通用首部字段(General Header Fields)

请求报文和响应报文两方都会使用的首部。

请求首部字段(Request Header Fields)

从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

响应首部字段(Response Header Fields)

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

实体首部字段(Entity Header Fields)

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

Cookie的工作机制是用户识别及状态管理。Web网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内。接着当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie。

调用Cookie时,由于可校验Cookie的有效期,以及发送方的域、路径、协议等信息,所以正规发布的Cookie内的数据不会因来自其他Web站点和攻击者的攻击而泄露。

HTTP主要有这些不足,例举如下

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

加密

加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。

一条连接上只可发送一个请求。
请求只能从客户端开始。客户端不可以接收除响应以外的指令。
请求/响应首部未经压缩就发送。首部信息越多延迟越大。
发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
可任意选择数据压缩格式。非强制压缩发送。

成功握手确立WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。

超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。

动态HTML技术是通过调用客户端脚本语言JavaScript,实现对HTML的Web页面的动态改造。利用DOM(Document Object Model,文档对象模型)可指定欲发生动态变化的HTML元素。

CGI(Common Gateway Interface,通用网关接口)是指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。在CGI的作用下,程序会对请求内容做出相应的动作,比如创建HTML等动态内容。

JSON(JavaScript Object Notation)是一种以JavaScript(ECMAScript)的对象表示法为基础的轻量级数据标记语言。能够处理的数据类型有false/null/true/对象/数组/数字/字符串,这7种类型。

在Web应用中,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改。所以Web应用可能会接收到与预期数据不相同的内容。

相关文章

  • 《图解HTTP》

    网络基础TCP/IPTCP/IP协议族说法一:TCP/IP是指TCP和IP两种协议说法二:TCP/IP是在IP协议...

  • 【图解 HTTP】

    HTTP 1.1 标准的通信过程:HTTP 方法协议格式保温结构首部字段状态码 web 安全httpsSSL证书认...

  • 图解HTTP

    第一章 了解Web及网络基础 1.1 使用HTTP协议访问Web 1.2 HTTP的诞生 1.2.1 为知识共享而...

  • 《图解HTTP》

    译者序 讲解网络协议的权威书籍有两本《HTTP权威指南》《TCP/IP详解》但是对初学者不是很友好 HTTP本身不...

  • 图解-HTTP

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务...

  • 图解HTTP

    HTTP是不保存状态的协议,协议本身不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事物,确保协议的可...

  • 《图解http》

    1.5 负责域名解析的DNS服务DNS(Domain Name System)服务是和HTTP协议一样位于应用层的...

  • 图解HTTP

    HTTP (HyperText Transfer Protocol 超文本传输协议) HTTP 在应用层 决定向...

  • 图解HTTP

    链接: https://pan.baidu.com/s/1bp08VvT 密码: nnyd 章节一:了解Web及网...

  • 图解http

    了解Web及网络基础 使用HTTP协议访问Web浏览器(客户端)在地址栏里输入要访问的页面(URL),客户端从服务...

网友评论

      本文标题:【图解 HTTP】

      本文链接:https://www.haomeiwen.com/subject/hiiqlftx.html