本文主要是介绍超文本传输协议HTTP,详解+实例!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 概念
HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的(Transaction-oriented)应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式和规则,它是万维网上能够可靠交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
2. HTTP的操作过程
从协议执行过程来说,浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析。一旦获得了服务器的IP地址,浏览器将通过TCP向服务器发送连接建立请求。
万维网的大致工作过程如下图所示:
图 1 万维网的工作过程
每个万维网站点都有一个服务器进程,它不断地监听TCP的端口80(默认),当监听到连接请求后便与浏览器建立连接。TCP连接建立后,浏览器就向服务器发送请求获取某一Web页面的HTTP请求。服务器收到HTTP请求后,将构建所请求的Web页必需的信息,并通过HTTP响应返回给浏览器。浏览器再将信息进行解释,然后将Web页显示给用户。最后,TCP连接释放。
在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是HTTP。因此HTTP有两类报文:
- 请求报文:从Web客户端向Web服务器发送服务请求;
- 响应报文:从Web服务器对Web客户端请求的回答;
当用户点击鼠标后所发生的时间顺序如下(以访问清华大学为例):
- 浏览器分析链接指向页面的URL(http://www.tsinghua.edu.cn/publish/thu2018/index.html);
- 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址;
- 域名系统DNS解析出清华大学服务器的IP地址;
- 浏览器与该服务器建立TCP连接(默认端口号80);
- 浏览器发出HTTP请求:GET /publish/thu2018/index.html
- 服务器通过HTTP响应把文件 index.html 发送给浏览器;
- TCP连接释放;
- 浏览器将文件 index.html 进行解释,并将Web页显示给用户;
3. 协议特点
(1)HTTP协议是无状态的
同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。
(2)HTTP采用TCP作为运输层协议,保证了数据的可靠传输
HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。
(3)HTTP协议是无连接的
虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。
(4)HTTP既可以使用非持久连接,也可以使用持久连接(HTTP/1.1支持)
4. HTTP的报文结构
HTTP是面向文本的(Text-Oriented),因此在报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。有两类HTTP报文:
- 请求报文:从客户向服务器发送的请求报文,如图2所示;
- 响应报文:从服务器到客户的回答,如图3所示;
HTTP请求报文中常用的几个方法:
- GET:请求读取由URL所标志的信息;
- HEAD:请求读取由URL所标志的信息的首部;
- POST:给服务器添加信息(例如:注释);
- CONNECT:用于代理服务器;
HTTP中的状态码:
- 1xx:(100-101)指示信息--表示请求已接收,继续处理;
- 2xx:(200-206)成功--表示请求已被成功接收、理解、接受;
- 3xx:(300-305)重定向--要完成请求必须进行更进一步的操作;
- 4xx:(400-415)客户端错误--请求有语法错误或请求无法实现;
- 5xx:(500-505)服务器端错误--服务器未能实现合法的请求;
5. HTTP与HTTPS的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)(安全套接字层)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
- 安全性:http是超文本传输协议,信息是明文传输,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- https需要申请证书:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- 端口不同:用的端口不一样,http使用的是80端口,https使用的是443。
- 所在层次不同:HTTP 协议运行在TCP 之上,HTTPS 是运行在SSL/TLS 之上的HTTP 协议,SSL/TLS(安全传输层协议) 运行在TCP 之上。
6. 抓包演示
这里对以访问清华大学主页为例进行讲解,使用的是Wireshark软件,直接按 http and tcp.port == 80 and ip.addr == 166.111.4.100 条件进行查找,其中请求报文如下所示:
图 4 HTTP请求报文示例
其中:
- Host:表示用户指定资源所在的主机和端口号,格式一般和资源的完整URL中的主机名和端口号一样,上图省略了默认端口号80;
- Connection:用于指定处理完本次请求/响应后,客户端与服务器是否还要继续保持连接。值为keep-alive时,客户端通知服务器返回本次请求结果后继续保持连接;当值为close时,客户端与服务器返回本次结果后关闭连接。HTTP1.1默认采用持久连接,在客户端发出请求消息中没有指定Connection头字段时,等效于Connection请求头的值为keep-alive的情况;
- Upgrade-Insecure-Requests:表示客户端告诉服务器,浏览器可以处理https协议;
- User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器,这个报头域不是必需的;
- Accept:请求报头域用于指定客户端接受那些类型的信息。例如:Accept:image/gif,表明客户端希望接收GIF图像格式的资源,Accept:text/html,表明客户端希望接收html文本;
- Accept-Encoding:类似于Accept,但是它用于指定可接受的内容编码,如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受;
- Accept-Language:类似于Accept,但是它是用于指定一种自然语言,如果请求消息中没有设置,服务器假定客户端对各种语言都可以接受;
响应报文如下所示:
图 5 HTTP响应报文示例
其中:
- Server:响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域相对应;
- Data:用于表示HTTP消息产生的当前时间,服务器回送正常消息中,通常设置Date头字段;
- Content-Type:实体报头域用于指明发送给接收者的实体正文的媒体类型;
- Content-Length:实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示;
- Connection:同请求报文;
- Location:此字段用于通知客户端应该到哪个新的地址去获取文档,状态码为:300~399的响应消息都应该使用Location头字段将新的文档地址告诉客户机,以便客户机自动重新连接到新地址并检索文档,常用在更换域名的时候;
后续更新(http1.0 http1.1 http2.0 区别、http缓存)
7. Reference :
- 王道考研计算机网络
- https://www.cnblogs.com/wqh17/p/6401525.html
- https://blog.csdn.net/u013219814/article/details/56290792
这篇关于超文本传输协议HTTP,详解+实例!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!