HTTP解析

Posted linfeng-learning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP解析相关的知识,希望对你有一定的参考价值。

1.HTTP概述

1.1 简介

  • HTTP(Hyper Text Transfer Protocol),超文本传输协议,用于从万维网(www)传输超文本到本地浏览器的传送协议。
  • HTTP是一种应用层协议,承载于传输层协议之上,一般为TCP/IP。

P.S.:

HTTP 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。属于通信加密,即在整个通信线路中加密。

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

1.2 特点

  • 简单快速:HTTP机制简单,程序规模小,通信速度快。
  • 媒体独立:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
  • 无连接:HTTP限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。从而可以节省传输时间。
  • 无状态:HTTP协议是无状态协议,即对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。而当服务器不需要先前信息时,它的应答就较快。

2. HTTP工作机制

HTTP的工作机制由请求和响应构成,是一个标准的客户端/服务器(C/S)模型。

技术图片

  HTTP的基本工作流程如下:

(1)建立TCP连接:客户端与服务器建立TCP套接字连接。

(2)发送HTTP请求:客户端TCP套接字向服务器发送请求报文。

(3)服务器接受请求并返回HTTP响应:服务器解析请求,定位请求资源,并把资源数据写入TCP套接字,由客户端读取。

(4)释放连接TCP连接:若connection 模式为close,则服务器主动关闭TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

3.HTTP解析

3.1 URI与URL

(1)URI与URL简介

  • URI(uniform resource identifier),统一资源标识符,用来唯一的标识一个资源。
  • URL(uniform resource locator),统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

(2)URL格式

互联网通过URL来标识某一资源的地址,HTTP通过URL来获取指定的资源数据。

技术图片

  URL格式:protocol :// hostname[:port] / path / [;parameters][?query][#fragment]

  • protocol:传输协议
  • hostname:存放资源的服务器的域名或 IP 地址。
  • port:端口号。可选,省略时使用方案的默认端口,HTTP默认为80。
  • path:文件路径。
  • parameters:用于指定特殊参数。可选
  • query:用于给动态网页传递参数。可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。可选。
  • fragment:信息片段,用于指定网络资源中的片段。可选。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

3.2 HTTP请求消息结构

客户端通过发送HTTP请求消息向服务器请求资源的访问。HTTP请求由三部分组成:请求行、请求报头、空行、请求正文。

技术图片

(1)请求行

请求行用来说明请求方法,要访问的资源以及所使用的HTTP版本。

请求行格式: Method  Request-URI  HTTP-VersionCRLF(以空格为间隔)

  • Method :请求方法
  • Request-URI:指定要访问资源的地址
  • HTTP-Version:HTTP版本
  • CRLF:换行符

(2)请求报头

请求报头用来说明服务器要使用的附加信息、或者客户端自身的信息。服务器可以根据请求报头为客户端提供更好的响应。

请求报头格式:属性名:[空格]内容。

(3)空行

空行表示请求报头结束

(4)请求正文

只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。

3.3 HTTP响应消息结构

服务器接收并处理客户端发过来的请求后,会返回一个HTTP的响应消息。HTTP响应消息也由四个部分组成:状态行、响应报头、空行、响应正文。

技术图片

 (1)状态行

状态行用来描述服务器对HTTP请求消息的处理结果。

状态行格式:HTTP-Version  Status-Code  Reason-PhraseCRLF(以空格为间隔)

  • HTTP-Version:HTTP版本
  • Status-Code:状态码,用以表示HTTP请求消息的处理状态
  • Reason-Phrase:短文,用以描述HTTP请求消息的处理状态

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别。

1xx 表示请求已接收,继续处理
2xx 表示请求已被成功接收、理解、接受
3xx 要完成请求必须进行更进一步的操作
4xx 请求有语法错误或请求无法实现
5xx 服务器未能实现合法的请求

 

 

 

 

 

 

 

常用的状态码:

技术图片

(2)响应报头

响应报头为客户端提供一些额外的信息,有助于客户端处理响应,并在将来发起更好的请求。

响应报头格式:属性名:[空格]内容。

(3)空行

空行表示响应报头结束。

(4)响应正文

响应正文服务器返回给客户端的数据信息。

4. HTTP请求方法

(1)请求方法

HTTP/1.1协议中共定义了八种方法,以不同方式操作指定的资源。

GET

向服务器请求指定的资源数据,并由服务器返回实体主体。

HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。使用这个方法可以在不必传输全部内容的情况下,就可以获取其中关于该资源的信息。
POST 向指定资源位置提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求消息。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT 向指定资源位置上传其最新内容。
DELETE 请求服务器删除Request-URI所标识的资源。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 该方法可使服务器传回该资源所支持的所有HTTP请求方法。用‘*‘来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
TRACE 回显服务器收到的请求,主要用于测试或诊断。

GET与POST的区别:

  • GET是从服务器上获取数据,POST是向服务器传送数据。
  • GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连。 POST方法是把提交的数据放在HTTP包的请求体中。
  • GET传送的数据量较小,一般不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。文件传输一般用POST。
  • GET安全性非常低,POST安全性稍微高点。但是如果没有加密的话,它们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。

(2)注意事项

  • HTTP请求方法是区分大小写的。
  • HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。特定的HTTP服务器还能够扩展自定义的方法。

5. HTTP历史版本

HTTP0.9 HTTP1.0 HTTP1.1(当前应用最广泛) HTTP2.0
  • 只支持GET请求方法
  • 不支持请求/响应头
  • 只支持文本传输
  • 只支持短连接
  • 支持GET、HEAD、POST方法
  • 支持请求/响应头
  • 支持对象不限于超文本
  • 支持长连接、缓存机制、身份认证
  • 支持多种请求方法
  • 支持请求/响应头
  • 支持对象不限于超文本
  • 支持长连接、编码传输、请求流水线
  • http 2.0是下一代http协议,目前应用还非常少

以上是关于HTTP解析的主要内容,如果未能解决你的问题,请参考以下文章

jsoup解析xml某片段的问题

无法解析片段中的 ViewModelProvider 构造?

Relay.js 没有正确解析组合片段

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

HTTP客户端代码片段