2023年11月28日发(作者:)
【软件通信协议】3.详细解析HTTP协议
1. HTTP协议简介
超⽂本传输协议(HTTP,Hyper Text Transfer Protocol)是互联⽹上应⽤最为⼴泛的⼀种⽹络协议。所有的WWW⽂件都必须遵守这个
标准。设计HTTP最初的⽬的是为了提供⼀种发布和接收HTML页⾯的⽅法。
在Web应⽤中,服务器把⽹页传给浏览器,实际上就是把⽹页的HTML代码发送给浏览器,让浏览器显⽰出来。⽽浏览器和服务器之间的传
输协议是HTTP,所以:
HTML是⼀种⽤来定义⽹页的⽂本,会HTML,就可以编写⽹页;
HTTP是在⽹络上传输HTML的协议,⽤于浏览器和服务器的通信。
2. HTTP的主要特点
简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。每种⽅法规定了客户与服
务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
Web上可⽤的每种资源如HTML⽂档、图像、视频⽚段、程序等都是⼀个来URI来定位的
URI⼀般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源⾃⾝的名称,由路径表⽰,着重强调于资源。
URL是uniform resource locator,统⼀资源定位器,它是⼀种具体的URI,即URL可以⽤来标识⼀个资源,⽽且还指明了如何locate这
个资源。
URL是Internet上⽤来描述信息资源的字符串,主要⽤在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
http是超⽂本传输协议,信息是明⽂传输,https 则是具有安全性的ssl加密传输协议
http和https使⽤的是完全不同的连接⽅式⽤的端⼝也不⼀样,前者是80,后者是443。
http的连接很简单,是⽆状态的
HTTPS协议是由SSL+HTTP协议构建的可进⾏加密传输、⾝份认证的⽹络协议 要⽐http协议安全
HTTPS解决的问题:
a. 信任主机的问题。采⽤https 的server 必须从CA 申请⼀个⽤于证明服务器⽤途类型的证书。该证书只有⽤于对应的server的时候,客
户端才信任该主机。所以⽬前所有的银⾏系统⽹站,关键部分应⽤都是https的。 客户端通过信任该证书,从⽽信任了该主机。其实这样做
效率很低,但是银⾏更侧重安全。这⼀点对我们没有任何意义,我们的server,采⽤的证书不管⾃⼰issue 还是在公众的地⽅issue, 客户端
都是⾃⼰的,所以我们也就肯定信任该server。
当我们在地址栏输⼊时,浏览器将显⽰新浪的⾸页。在这个过程中,浏览器都⼲了哪些事情呢?通过Network的记录,我
们就可以知道。在Network中,定位到第⼆条记录,点击,右侧将显⽰Request Headers,点击右侧的view source,我们就可以看到浏览器
发给新浪服务器的请求:
最主要的头两⾏分析如下,第⼀⾏:
GET / HTTP/1.1
GET表⽰⼀个读取请求,将从服务器获得⽹页数据,/表⽰URL的路径,URL总是以/开头,/就表⽰⾸页,最后的HTTP/1.1指⽰采⽤的
HTTP协议版本是1.1。⽬前HTTP协议的版本就是1.1,但是⼤部分服务器也⽀持1.0版本,主要区别在于1.1版本允许多个HTTP请求复⽤
⼀个TCP连接,以加快传输速度。
从第⼆⾏开始,每⼀⾏都类似于Xxx: abcdefg:
Host:
表⽰请求的域名是。如果⼀台服务器有多个⽹站,服务器就需要通过Host来区分浏览器请求的是哪个⽹站。
继续往下找到Response Headers,点击view source,显⽰服务器返回的原始响应数据:
HTTP响应分为Header和Body两部分(Body是可选项),我们在Network中看到的Header最重要的⼏⾏如下:
200 OK
200表⽰⼀个成功的响应,后⾯的OK是说明。失败的响应有404 Not Found:⽹页不存在,500 Internal Server Error:服务器内部出
错,等等。
Content-Type: text/html
HTTP响应的Body就是HTML源码,我们在页⾯上右键查看HTML源码:
当浏览器读取到新浪⾸页的HTML源码后,它会解析HTML,显⽰页⾯,然后,根据HTML⾥⾯的各种链接,再发送HTTP请求给新浪
服务器,拿到相应的图⽚、视频、Flash、JavaScript脚本、CSS等各种资源,最终显⽰出⼀个完整的页⾯。所以我们在Network下⾯能看
到很多额外的HTTP请求。
6.1 HTTP请求
跟踪了新浪的⾸页,我们来总结⼀下HTTP请求的流程:
步骤1:浏览器⾸先向服务器发送HTTP请求,请求包括:
⽅法:GET还是POST,GET仅请求资源,POST会附带⽤户数据;
路径:/full/url/path;
域名:由Host头指定:Host:
以及其他相关的Header;
如果是POST,那么请求还包括⼀个Body,包含⽤户数据。
步骤2:服务器向浏览器返回HTTP响应,响应包括:
响应代码:200表⽰成功,3xx表⽰重定向,4xx表⽰客户端发送的请求有错误,5xx表⽰服务器端处理时发⽣了错误;
响应类型:由Content-Type指定,例如:Content-Type: text/html;charset=utf-8表⽰响应类型是HTML⽂本,并且编码是UTF-
8,Content-Type: image/jpeg表⽰响应类型是JPEG格式的图⽚;
以及其他相关的Header;
通常服务器的HTTP响应会携带内容,也就是有⼀个Body,包含响应的内容,⽹页的HTML源码就在Body中。
步骤3:如果浏览器还需要继续向服务器请求其他资源,⽐如图⽚,就再次发出HTTP请求,重复步骤1、2。
Web采⽤的HTTP协议采⽤了⾮常简单的请求-响应模式,从⽽⼤⼤简化了开发。当我们编写⼀个页⾯时,我们只需要在HTTP响应中
把HTML发送出去,不需要考虑如何附带图⽚、视频等,浏览器如果需要请求图⽚和视频,它会发送另⼀个HTTP请求,因此,⼀个HTTP
请求只处理⼀个资源。
6.2 HTTP格式
每个HTTP请求和响应都遵循相同的格式,⼀个HTTP包含Header和Body两部分,其中Body是可选的。
HTTP协议是⼀种⽂本协议,所以,它的格式也⾮常简单。HTTP GET请求的格式:
GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
每个Header⼀⾏⼀个,换⾏符是rn。
HTTP POST请求的格式:
POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
body data
当遇到连续两个rn时,Header部分结束,后⾯的数据全部是Body。
HTTP响应的格式:
200 OK
Header1: Value1
Header2: Value2
发布评论