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

发布时间 - 2026-01-11 02:24:33    点击率:

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端口送到网站程序的。然后通过这个端口发送的客户端浏览器。


# HTTP协议简介  # HTTP协议  # 详细讲解HTTP协议工作方式  # 详解Http协议以及post与get区别  # 详细HTTP协议的前世今生  # 详解HTTP协议简介  # 详解HTTP协议(很经典)  # HTTP协议详解_动力节点Java学院整理  # HTTP协议入门_动力节点Java学院整理  # 网络传输协议(http协议)  # http协议详解(超详细)  # HTTP协议详细介绍  # 自己的  # 客户端  # 都是  # 就会  # 是一种  # 什么时候  # 每次都  # 完成后  # 的是  # 应于  # 是一个  # 这是  # 器上  # 这一  # 是在  # 会有  # 也会  # 地说  # 你可以  # 是有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中间件如何使用_Laravel自定义中间件实现权限控制  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel中的withCount方法怎么高效统计关联模型数量  如何在 Pandas 中基于一列条件计算另一列的分组均值  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  5种Android数据存储方式汇总  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel如何配置和使用缓存?(Redis代码示例)  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel如何实现本地化和多语言支持?(i18n教程)  微信小程序 wx.uploadFile无法上传解决办法  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  智能起名网站制作软件有哪些,制作logo的软件?  如何制作一个表白网站视频,关于勇敢表白的小标题?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Python面向对象测试方法_mock解析【教程】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  ,交易猫的商品怎么发布到网站上去?  在线制作视频的网站有哪些,电脑如何制作视频短片?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在阿里云完成域名注册与建站?  如何在万网ECS上快速搭建专属网站?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  香港服务器部署网站为何提示未备案?  Laravel如何使用Livewire构建动态组件?(入门代码)  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何用5美元大硬盘VPS安全高效搭建个人网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何处理和验证JSON类型的数据库字段  javascript日期怎么处理_如何格式化输出  网易LOFTER官网链接 老福特网页版登录地址