当前位置:首页 > 日记 > 正文

HTTP协议简介_动力节点Java学院整理

HTTP协议简介_动力节点Java学院整理

TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

随着时间的推移,html页面变得复杂了,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次tcp连接就显得低效了。因此Keep-Alive被提出用来解决效率低的问题。从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。虽然这里使用TCP连接保持了一段时间,但是这个时间是有限范围的,到了时间点依然是会关闭的,所以我们还把其看做是每次连接完成后就会关闭。后来,通过Session, Cookie等相关技术,也能保持一些用户的状态。但是还是每次都使用一个连接,依然是无状态连接。

为什么Http是无状态的短连接,而TCP是有状态的长连接?Http不是建立在TCP的基础上吗,为什么还能是短连接? Http就是在每次请求完成后就把TCP连接关了,所以是短连接。而我们直接通过Socket编程使用TCP协议的时候,因为我们自己可以通过代码区控制什么时候打开连接什么时候关闭连接,只要我们不通过代码把连接关闭,这个连接就会在客户端和服务端的进程中一直存在,相关状态数据会一直保存着。

在Java中会有Socket,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。

比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。对于从C#编程的角度来讲,为了方便,你可以直接选择已经制造好的轿车Http来与服务器交互。但是有时候往往因为环境因素或者其他的一些定制的请求,必须要使用TCP协议,这时就需要使用Socket编程,然后自己去处理获取的数据。就像是你用已有的发动机,自己造了一辆卡车,去从服务器交互。

HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的“门”。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。

WebService不需要连接,一秒中至少可以支持上万/十万的请求,每次请求然后释放,没有空余的内存消耗。一般不会限制同时连接的个数,这是优势。因为每个连接即使没有在请求数据,也会在内存中占用一定的空间存储。会限制,比如SQL Server数据库服务器,一般最多同时连接16个。

Http协议一定通过指定的端口,80,所以一般计算机上不会限制这个端口,所以Http协议能够顺利通过所有机器上的防火墙。而使用Socket编程的话,就需要自己指定特定的端口,那么很可能这个端口是在某个环境中禁用的,那么就无法穿透防火墙。

apache使用的是80端口,也就是这个程序一直在监听着这个端口。一旦发现有人要建立到这个端口的连接,他就会响应,然后建立连接。这里说的连接都是短连接。所以你对服务器上的网址的请求,都是通过80端口送到网站程序的。然后通过这个端口发送的客户端浏览器。

相关文章

ASP.NET中画图形验证码的实现代码

ASP.NET中画图形验证码的实现代码

验证码,画图形,代码,电脑软件,ASP,本文给大家分享一段asp.net代码实现画图形验证码功能,代码简单易懂,具体代码如下所示:context.Response.ContentType = "image/jpeg"; //生成随机的中文验证码 string yzm = "人口手大小多少上中下男…

Vue 滚动行为的具体使用方法

Vue 滚动行为的具体使用方法

使用方法,电脑软件,Vue,滚动行为使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。注意: 这个功能只在 HTML5 history 模…

AngularJS实现页面定时刷新

AngularJS实现页面定时刷新

定时刷新,页面,电脑软件,AngularJS,有时我们在前端可能会有这样的需求:1、每隔一段时间刷新一下页面中的数据2、根据需要可以暂停和启用刷新接下来我们就来看下AngularJS的实现方法: 首先我们了解到AngularJS中$interval可以用来处理间歇性处…

Excel表格字符的LEFT函数如何应用

Excel表格字符的LEFT函数如何应用

字符,函数,函数应用,表格,电脑软件,  在Excel中使用比较长的字符串时,可能会遇到需要提取其中某一部分字符串的情况,这时我们就要用到截取字符串函数了。以下是小编为您带来的关于Excel表格字符的LEFT函数应用,希望对您有所帮助。Excel表格…

excel自动计算总分的方法excel怎么

excel自动计算总分的方法excel怎么

计算,方法,总分,电脑软件,excel,  Excel中经常需要使用到自动计算总分的 功能,自动计算具体该如何操作呢?下面是由小编分享的excel自动计算总分的方法,以供大家阅读和学习。excel自动计算总分的方法自动计算总分步骤1:选中要计算的数据,不同…

bash 中用于grep的正则表达式

bash 中用于grep的正则表达式

正则表达式,用于,电脑软件,bash,grep,正则表达式是一类用于匹配文本的表达方式,常用于grep命令中表达检索条件。其实就是相当于你在用百度搜索时规定一些高级要求,例如你想找百度一个叫做詹姆斯的人的照片,你会发现出来一大堆骑士队的詹姆斯,这…

photoshop复制粘贴文字的方法步骤

photoshop复制粘贴文字的方法步骤

方法,文字,复制粘贴,指定位置,步骤,  复制粘贴图片的方法其实就和外面复制粘贴文字差不多,但是很多同学还不太清楚。为此小编整理的一些关于photoshop复制粘贴文字的方法,供您参阅。photoshop复制粘贴文字的方法如图,看怎么用快捷键复制图层…

powerpoint如何设页码数

powerpoint如何设页码数

方法,设置,页码,电脑软件,powerpoint,  在制作幻灯片的时候,怎么在其中设置页码呢?一份好的PPT不仅可以吸引观众的眼球同时还可以反映自己的制作能力,下面小编就为你介绍powerpoint如何设置页码的方法啦,不懂的朋友会请多多学习哦。powerpoi…

excel表格内单元格加宽的方法excel

excel表格内单元格加宽的方法excel

方法,单元格,表格,电脑软件,excel,  Excel中经常需要使用到单元格加宽的功能,表格内的单元格具体该如何加宽呢?下面是小编带来的关于excel表格内单元格加宽的方法,希望阅读过后对你有所启发!excel表格内单元格加宽的方法单元格加宽步骤1:这…

js实现移动端微信页面禁止字体放大

js实现移动端微信页面禁止字体放大

字体,移动端,页面,电脑软件,js,由于微信自带字体放大功能,因此基于微信的页面都可以通过微信进行字体放大,但是有些情况下这并不是我们想要的,因为很多移动端页面的开发都是使用rem作为单位的,当使用微信进行字体放大是,会导致页面的整体布局乱…

ps解析淘宝女士包包产品后期修图教

ps解析淘宝女士包包产品后期修图教

产品,教程,淘宝,包包,后期,美工必看:ps解析淘宝女士包包产品后期修图教程,只要六步,就可以完成一个淘宝女士包包的后期修图,非常不错,想要学习淘宝产品修图教程的朋友可以看看!教程结束,以上就是ps解析淘宝女士包包产品后期修图教程的全部内容,希望…

AI制作一个手提式磁带播放器矢量图

AI制作一个手提式磁带播放器矢量图

矢量图,教程,磁带,播放器,电脑软件,效果图:主要过程:12 3 阅读全文1 23 阅读全文教程结束,以上就是AI制作一个手提式磁带播放器矢量图教程的全部内容,希望大家喜欢!相关教程推荐:Illustrator(AI)模仿制作逼真的mediaplayer11媒体播放器图标实例…