HTTP实践 | 青训营

113 阅读8分钟

1 HTTP协议

超文本传输协议是一种客户端和服务端请求和应答的标准,是应用层面向对象的无状态通信协议。
HTTP协议在TCP连接的基础上使用统一资源标识符(URI)来建立连接和传输数据。

(1)客户端与服务端: HTTP客户端(Client)是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。 HTTP服务器(Service)是一个应用程序(通常是一个Web服务,如Apache Web服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。 

 (2)请求内容: HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求; HTTP请求由状态行、请求头、请求正文三部分组成; 状态行:包括请求方式(Method)、资源路径(URL)、协议版本(Version); 请求头:包括一些访问的域名、用户代理、Cookie等信息; 请求正文:就是HTTP请求的数据。 (

3)响应内容: HTTP响应是服务端收到了客户端发来的请求后,根据请求中的要求,做出具体的动作,将结果回应给客户端的过程; HTTP响应由三部分组成:状态行、响应头、响应正文; 状态行:包括协议版本Version、状态码StatusCode、回应短语; 响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息; 响应正文:就是响应的具体数据。 

2、HTTP协议常用方法

1 GET 向特定的资源发出请求,用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。GET中如果出现用户账号密码或MAC等可以唯一标记一个用的信息,将被视为安全隐患。 

2 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。当前DPI话单无法解析POST中内容,所以POST传输账号密码等信息可视为加密方式。 

3 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。此方法在抓包分析是可能会经常遇到,某些HTTS协议的内容会以这种格式在Wireshark中显示。 

4 PUT 向指定资源位置上传其最新内容,传输文件、报文主体中包含文件内容,保存到对应URI位置。 

5 HEAD 向服务器请求获取报文首部,响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息,一般用户验证URI是否有效。 

6 DELETE 请求服务器删除 Request-URI 所标识的资源。 

7 OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向服务器发送’*'的请求来测试服务器的功能性。 

8 TRACE 回显服务器收到的请求,主要用于测试或诊断。 注:在日常的网页和APP分析中,除GET、POST、CONNECT之外的方法通常极为少见。 

3、HTTP协议响应码分类 

1 1** 信息,服务器收到请求,需要请求者继续执行操作(很少出现) 

2 2** 成功,操作被成功接收并处理 

3 3** 重定向,需要进一步的操作以完成请求,服务端通常会携带一个Location给客户端用来指向新的URL,此过程经常被称为调度。 

4 4** 客户端错误,请求包含语法错误或无法完成请求 

5 5** 服务器错误,服务器在处理请求的过程中发生了错误 

6 (0-5) 不在标准范围之内,通常被用于某些特定场景,例如普天拨测系统经常将请求发送失败的测试记录的响应码标记为“0” 

4、HTTPS协议 

 HTTP协议被用于在Web浏览器和网站服务器之间传递信息。

 HTTP以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。(除非在传输装好密码之前在客户端直接解密,然后传输加密内容,但客户端可通过破解安装包的方式获取原始算法,所以这种方式并不安全)。 

 TLS协议由:TLS 记录协议(TLS Record)和 TLS握手协议(TLS Handshake)组成 HTTPS超文本传输协议,在HTTP协议基础上加入了SSL层。即HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

SSL(Secure Sockets Layer 安全套接层)及其继任者传输层安全(Transport Layer Security TLS)是为网络通信提供安全及数据完整性传输的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

5、HTTPS认证流程 

客户端请求:client向server发送请,连接到server的443端口。 

 服务端公钥证书:服务端须有一套数字证书(可自制或申请,区别为自己颁发的证书需客户端验证通过,使用受信任的公司申请的证书则不会弹出提示页面)这套证书可视为一对公钥和私钥。 

 传送证书:这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等。 

 客户端解析证书:这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效(比如颁发机构,过期时间等等),如证书异常,则会弹出警告,提示证书存在问题。如证书正常,则生成一个随即值(秘钥)。然后用证书对该随机值进行加密。 

 传送加密信息:传送的是用证书加密后的秘钥,服务端得到此秘钥后,客户端和服务端的通信将通过这个随机值来进行加密解密。 

 服务端加密信息:服务端用私钥解密秘密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。 

 传输加密后的信息:这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。 

 客户端解密信息:客户端用之前生成的私钥解密服务端传过来的信息。 

6、HttpDNS简介

HttpDNS域名解析方式即是将域名解析的协议由 DNS协议换成了 Http协议,用于绕过LocalDNS,直接获取到用户 IP,以保证将用户引导的访问最快或者服务端指定的 IDC节点上, 排除域名解析异常的困扰。 

 实现原理通常为:客户端通过HTTP协议中的GET请求直接访问服务端的 HttpDNS服务接口,服务端会根据用户上传的本地信息(例如客户端IP地址等信息)进行匹配或者直接返回业务在域名配置管理系统上配置的访问延迟最优的 IP地址列表(基于容灾考虑,还是保留次选使用运营商 LocalDNS解析方式)。 

 (1)解决的问题: Local DNS 劫持:由于 HttpDns 是通过 IP 直接请求 HTTP 获取服务器地址,不存在向LocalDNS询问domain解析过程,所以避免了劫持问题。 平均访问延迟下降:由于是IP直接访问省掉了一次domain解析过程,通过智能算法排序后找到最快节点进行访问。 用户连接失败率下降:通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。 

 (2)过程特征: 用户上传本地信息以及获取业务IP信息通常使用GET方式。 服务端返回的业务IP信息通常包含在HTTP响应或者其XML文档中。 IP信息文件通常为相关业务服务器名称或者域名与IP地址的键值对。 用于获取该信息的GET请求中通常会包含某些关键字如newgetdns或httpdns等。 

 HttpDns实例解析(以今日头条APP为例):

请求:

dm.bytedance.com/get\_domain…