博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP协议工作原理
阅读量:4965 次
发布时间:2019-06-12

本文共 1711 字,大约阅读时间需要 5 分钟。

HTTP简介

超文本传输协议(HTTP:Hypertext Transport Protocol)是万维网应用层的协议,它通过两个程序实现:一个是客户端程序(各种浏览器),另一个是服务器 (常称Web服务器)。
这两个通常运行在不同的主机上,通过交换报文来完成网页请求和响应。

报文是一个数据块,包括要传送的数据,也包括必要的附加信息,像目的IP、目的端口、源地址、源端口、数据长度、所用协议、加密等,它定义了报文的结构和客户与服务器之间交换报文的规则。

        报文可简单分为:请求报文(Request Message)与响应报文(Response Message)。

        报文的组成部分分别为:(1)起始行(Start Line);(2)首部(Header);(3)主体(Body)。

HTTP工作流程

 客户机与服务器建立连接后,浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超连接时,浏览器就向服务器发出了HTTP请求,
请求方式的格式为:统一资源标识符、协议版本号,后边是MIME(Multipurpose Internet Mail Extensions)信息包括请求修饰符、客户机信息和可能的内容。该请求被送往由URL指定的WEB服务器,
WEB服务器接收到请求后,进行相应反映,其格式为:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边服务器信息、实体信息和可能的内容
。即以HTTP规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。

1497155-20190308122211708-711721571.png

在HTTP协议中,由于WEB服务器在发送用户要求的文档过程中,并不储存任何有关客户端的状态信息。如果某个客户端在几秒钟内两次要求同一文档,服务器绝对不会认为不合理,它不记得用户端曾经来访过,HTTP不维持客户端状态。

   在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP80,当然还有其它端口可供使用。

 HTTP在运作过程中的连接

第一:连接过程说明
       假设某个网页有5个img图像,总共6个对象存在同一个服务器中,该网页的基本文档形式URL为:
      当采用HTTP/1.0时,WEB服务过程:
      ⑴、客户端启用了对 Control Protocol )连接,服务器监听来自网络的网络服务请求。
      ⑵、客户端通过第一步建立的链接套接字发送“请求报文”。请求报文中包含了文档的路径名( /list.aspx?caid=118)。
      ⑶、服务器通过第一步建立的连接套接字收到了所要请求的报文,从数据库中查找 /list.aspx?caid=118,将文档封存在HTTP的“相应报文”中,并通过先前建立的套接字将该报文传回到客户端。
      ⑷、服务器告诉TCP断开连接,在客户端完全收到响应报文之前不会断开TCP连接。
      ⑸、当客户端接受完响应的报文,本次TCP连接就宣告结束了。到达的报文说明所封装的内容是HTML基本文件,客户端从响应报文中取出文件,对HTML文件进行解析,从而发现该文件还要引用另外5个img对象。由于每个请求对象建立和维持一个全新的连接,在客户端和服务器端都要为TCP分配缓存并保持TCP变量,当客户多了,同样会造成不小的负担。
       针对所有的img对象,需要重复进行前四个步骤。即:

1497155-20190308122738183-1933446702.png

上述步骤使用的是非坚持连接的的工作模式,由于服务器在每个对象发送后都要关闭TCP连接。由于TCP连接传输一个请求报文和一个响应报文,这样这个例子在传送一个网页时就需要6次TCP连接,效率就比较低了。
第二:提高HTTP服务效率的两种方法
      (1)从一个客户端同时发送多个TCP连接并列到一个WEB服务器上,即建立“并行”的TCP连接,目前浏览器可以配置5~10个并行连接,每个连接完成一次HTTP的报文交换,但其没有从根本上解决服务器负担问题。
     (2)使用持续连接模式,服务器在完成一次HTTP报文交互后继续保持连接,统一客户端和服务器之间后继的请求和响应报文可以在原来的连接进行。

转载于:https://www.cnblogs.com/tyx666/p/10495041.html

你可能感兴趣的文章
.NET泛型解析(上)
查看>>
(asp.net MVC学习)System.Web.Mvc.HtmlHelper学习及使用
查看>>
C# 给某个方法设定执行超时时间
查看>>
数三角形
查看>>
wp8用LongListSelector做列表(可用QQ好友动态,微博列表各种地方),加入上拉加载...
查看>>
instancetype 和id
查看>>
select XX.nextval from dual
查看>>
CSS实现垂直居中的几种方法
查看>>
[Vim] 03 凡人进阶
查看>>
Linux系统下部署项目流程
查看>>
linux tar.gz zip 解压缩 压缩命令
查看>>
HDU 2717 Catch That Cow (bfs)
查看>>
Visual Studio 2010中创建ASP.Net Web Service
查看>>
UIAlertView用法
查看>>
openstack cinder-volume 的高可用(HA)
查看>>
庖丁解牛Linux内核分析 0x00:《庖丁解牛》
查看>>
C语言scanf函数详细解释(转载)
查看>>
【XSY2921】yja 拉格朗日乘法
查看>>
java基本语法——数组
查看>>
编写一个爬虫类库——(一)想法
查看>>