超文本传输协议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客户端请求的回答;

当用户点击鼠标后所发生的时间顺序如下(以访问清华大学为例):

  1. 浏览器分析链接指向页面的URL(http://www.tsinghua.edu.cn/publish/thu2018/index.html);
  2. 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址;
  3. 域名系统DNS解析出清华大学服务器的IP地址;
  4. 浏览器与该服务器建立TCP连接(默认端口号80);
  5. 浏览器发出HTTP请求:GET /publish/thu2018/index.html
  6. 服务器通过HTTP响应把文件 index.html 发送给浏览器;
  7. TCP连接释放;
  8. 浏览器将文件 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的区别主要如下:

  1. 安全性:http是超文本传输协议,信息是明文传输,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  2. https需要申请证书:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  3. 端口不同:用的端口不一样,http使用的是80端口,https使用的是443。
  4. 所在层次不同: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 :

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值