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 |
|
|
|
|
以上是关于HTTP解析的主要内容,如果未能解决你的问题,请参考以下文章
无法解析片段中的 ViewModelProvider 构造?
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段