HTTP协议介绍与TCP协议的区别

1、HTTP介绍

         HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信,通常使用端口 80/8080。HTTP可以传输多种数据类型,如html文件、图片、视频等数据。传输的数据类型是多种类型的,如:text/html; charset=UTF-8application/json等。

(HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。)

2、HTTP消息结构

HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。HTTP消息分为两种类型:请求消息和响应消息。

一个 HTTP 客户端是一个应用程序(Web 浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。

客户端请求的报文格式如下

1.请求行 

        (1)请求方法:

上述的 GET, POST 和 HEAD 方法属于HTTP 1.0的版本,其他的方法数据HTTP1.1新增的方法。

        (2) 请求 URI(统一资源标识符):请求的资源路径,通常包括主机名、端口号(如果非默认)、路径和查询字符串。

        (3)HTTP 版本:如 HTTP/1.1 或 HTTP/2。

        请求行的格式示例:

GET /index.html HTTP/1.1

2.请求头

        包含了客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等。常见的请求头如下:

3.空行

        请求头和请求体之间的分隔符,表示请求头的结束。

4.请求体(可选)

        在某些类型的HTTP请求(如 POST 和 PUT)中,请求体包含要发送给服务器的数据。

        

服务端的响应消息格式

1.状态行 

       (1) HTTP 版本:与请求消息中的版本相匹配。

       (2)状态码:三位数,表示请求的处理结果,如 200 表示成功,404 表示未找到资源。

        常用的状态码如下:

1xx信息,服务器收到请求,需要请求者继续执行操作
2xx成功,操作被成功接收并处理
3xx重定向,需要进一步的操作以完成请求
4xx客户端错误,请求包含语法错误或无法完成请求
5xx服务器错误,服务器在处理请求的过程中发生了错误

        (3)状态信息:状态码的简短描述。

        状态行的格式示例:

HTTP/1.1 200 OK

2.响应头

        包含了服务器环境信息、响应体的大小、服务器支持的压缩类型等。常见的响应头信息如下:

Date响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT
Server服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)
Content-Type响应体的媒体类型(MIME类型),如text/html; charset=UTF-8application/json等。
Content-Length响应体的大小,单位是字节。例如:3145
Content-Encoding响应体的压缩编码,如 gzipdeflate等。
Content-Language响应体的语言。例如:zh-CN
Cache-Control控制响应的缓存行为, 如 no-cache 表示必须重新请求。
Connection管理连接的选项,如keep-aliveclose,keep-alive 表示连接不会在传输后关闭。。
Set-Cookie设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure
Expires响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT

HTTP1.0中默认使用的是短链接,HTTP1.1中默认使用的是长链接。短链接的Connection值设置为close;长链接的Connection值设置为keep-alive。短链接是指每次的HTTP请求都需要重新链接,长链接是指HTTP的请求可以复用上次请求已连接的socket套接字进行通信。

 3.空行

        响应头和响应体之间的分隔符,表示响应头的结束。

4.响应体(可选)

        包含服务器返回的数据,如请求的网页内容、图片、JSON数据等。

消息响应举例如下:

3、HTTP和TCP的区别

HTTP(Hypertext Transfer Protocol)和TCP(Transmission Control Protocol)在网络协议栈中处于不同的层次,它们各自有不同的职责和特性。以下是HTTP和TCP之间的主要区别:

  1. 协议层次
    • TCP是传输层协议,它负责在源端和目的端之间建立、管理和终止连接,确保数据的可靠传输。
    • HTTP是应用层协议,它使用TCP作为传输层协议来发送和接收数据。HTTP定义了如何格式化请求和响应消息,以及如何在Web上实现超文本链接、缓存等功能。
  2. 职责和特性
    • TCP:
      • 提供面向连接的、可靠的、基于字节流的服务。
      • 使用序列号、确认和重传机制确保数据的顺序和完整。
      • 支持全双工通信,允许在建立连接后,双方同时发送和接收数据。
      • 提供了流量控制、拥塞控制等机制,以优化网络性能。
    • HTTP:
      • 定义了客户端和服务器之间交换消息的格式和规则。
      • 提供了请求/响应模型,客户端发送请求,服务器返回响应。
      • 支持多种请求方法(如GET、POST、PUT、DELETE等)和状态码(如200 OK、404 Not Found等)。
      • 支持持久连接(HTTP/1.1),允许在一个TCP连接上发送多个请求和响应,减少建立和关闭连接的开销。
  3. 通信过程
    • 当使用HTTP进行通信时,首先需要在客户端和服务器之间建立一个TCP连接(HTTP/1.0或更早版本中通常是每次请求建立一次连接,HTTP/1.1和更高版本支持持久连接)。
    • 建立连接后,客户端发送HTTP请求消息给服务器,服务器收到请求后处理并返回HTTP响应消息给客户端。
    • 通信完成后,TCP连接可以被关闭或保持打开状态以支持后续的请求。
  4. 安全性和加密
    • TCP本身不提供加密或身份验证功能,它只负责数据的可靠传输。
    • HTTP可以通过使用HTTPS(HTTP Secure)来提供加密和身份验证功能。HTTPS在HTTP的基础上增加了TLS/SSL协议,用于加密传输的数据,保护通信的机密性和完整性。
  5. 用途和场景
    • TCP可以用于各种需要可靠传输的场景,如文件传输、邮件发送、数据库连接等。
    • HTTP主要用于Web通信,是互联网上的主要协议之一,用于浏览网页、传输文件、执行Web服务等。

HTTP和TCP在网络协议栈中处于不同的层次,各自负责不同的任务。HTTP使用TCP作为传输层协议来确保数据的可靠传输,并在其上定义了如何格式化请求和响应消息以及如何在Web上实现各种功能。

上述文章部分内容参考于:

 HTTP/HTTPS 简介 | 菜鸟教程 (runoob.com)

 HTTP请求、响应报文格式_http 响应包的格式-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/19551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件需求规格说明书(Word原件@配套软件全资料)

软件需求规格说明书编写规范编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件项目相关全套精华资料包获取方式①:点我获取 获取方式②:本文末个人名片直接获取。 软件资料清单列表部分文档清单:工作安排任…

Optional类

一、概述 泛型类、java8引进的、java.util包里 二、作用 解决空指针异常带来的不便 三、做法 将对象封装为一个Optional对象,如果封装的对象为空(即该对象不存在),可以使用默认值和或者执行默认操作 四、方法 1、empty() 创…

【Qt知识】Qt Creator快捷键

以下是Qt Creator中的一些常用快捷键列表(持续更新): 基本编辑 多行注释/取消多行注释: Ctrl /编译工程: Ctrl B运行工程: Ctrl R整行上移/下移: Ctrl Shift ↑/↓查找: Ctrl F函数声明和定义切换: F2向下查找: F3头文件和源文件切换:…

【postgresql初级使用】初识触发器,在数据行发生变化时自动执行用户行为,也可以SQL级别触发,特别是视图上可以有触发器了

初识触发器 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 初识触发器概…

【成品设计】基于RT-thread星火开发板的智能监测系统设计

《基于RT-thread星火开发板的智能监测系统设计》 所需器件: 主控:STM32F407星火开发板。温湿度传感器:采集当前环境中的温湿度。环境传感器:采集当前环境中的光照强度。CO2传感器,采集当前环境中的C02浓度。粉尘传感…

excel怎么对非数字求和汇总?

如:学生小王的成绩为:A,A,A,A,B,B-……想得到的成绩汇总求和为:2A,2A,1B,1B- 如果在低版本里,用公式计算可能相当复杂,但是有了TEXTJOIN函数和UNIQUE函数&…

校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)

校园交友网站 目录 基于SprinBootvue的校园交友网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…

CSS学习笔记:bootstrap的介绍、下载、使用及响应式布局的实现

介绍 Bootstrap 是由 Twitter 公司开发维护的前端 UI 框架,它提供了大量编写好的CSS 样式 bootstrap过时了吗? 其实在学bootstrap这一部分的网课时,在弹幕上看到一些同学说bootstrap已经过时了,这里谈谈我的看法 我的前端学习…

3天13部,端午档电影数何以是五一档2倍?

离端午还有12天,院线端午档再上热搜。 截止至5月29日,本次端午档将有13部电影在3天的节假日内集中上映,这一数量仅比2021年端午档的最高纪录少了2部,几乎是今年五一档期上映影片数量(7部)的两倍。 并且与…

UE5 Http Server

前言 最近要用UE 作为一个服务器去接收来自外部的请求,从而在UE中处理一些内容,但是之前只做过请求,哪整过这玩意,短期内还得出结果,那怎么搞嘞,本着省事的原则就找找呗,有没有现成的&#xff0…

结构体中内存的对齐

前言 学C的同学应该知道~ 想精通C语言就不得不面对—指针与内存 续上次指针进阶&#xff0c;这一章我来聊一聊C语言内存对齐的问题 学习结构体的你有没有注意过结构体向系统申请的内存为多少呢的&#x1f601; 思考 #include<stdio.h> typedef struct s1 {char a;char …

Qt6同时使用Qt3DCore与QtGUI时QTransform类冲突问题

在Qt GUI模块有一个QTransform类&#xff0c;在Qt3D Core模块也有一个QTransform类&#xff0c;如果不特殊指定一下会报错

全新/二手KEITHLEY 2400 数字万用表

吉时利Keithley 2400数字源表&#xff0c;200V&#xff0c;1A&#xff0c;20W Keithley 2400 源表是一款 20W 仪器&#xff0c;可输出和测量 5V&#xff08;输出&#xff09;和 1V&#xff08;测量&#xff09;至 200V DC 的电压以及 10pA 至 1A 的电流。该万用表功能包括高重复…

【linux深入剖析】进程间通信

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.进程间通信目的2. 什么…

react 怎样向ant table添加按钮,以及文本溢出隐藏?

这些都是一些组件自带的方法&#xff0c;只不过是不知道该怎么用&#xff0c;上面的内容可以直接拿去用&#xff0c;&#xff08;事件除外&#xff0c;要自己绑&#xff0c;还有引入的组件&#xff09;&#xff01;

数据结构:栈和队列的练习题1(括号匹配问题)

题目描述&#xff1a; 思路&#xff1a;我们首先可以把出现的情况大致分为以下几类&#xff1a; 因为涉及匹配问题&#xff0c;所以所有的左括号和右括号肯定要分开来整理。如果我们直接去匹配的话&#xff08;像第一行的从左到右独立匹配&#xff09;是行得通的&#xff0c;但…

关于d3js生成节点画布的个人笔记

实现功能 根据鼠标位置生成节点根据节点位置通过鼠标拖拽生成连线实现自定义线段颜色功能删除节点以及连线功能实现单个节点拖动功能实现整条线路的拖动功能 界面如下&#xff1a; 主要模块介绍 绘制连线 const line svg.selectAll(".line").data(links, d >…

【Linux】Git超详细教程:手把手教你(gitee版)--版本管理+远程仓库克隆(初学者必看!!!)

目录 一、前言 二、git 的深度理解 &#x1f95d; 什么是 git ? &#x1f347; git 的历史发展&#xff08;理解 git 的由来&#xff09; &#x1f34b; 感性理解 git 的版本管理 三、git 的安装 ✨Window 终端安装 ✨Linux 安装 四、git 的工作流程 五、如何在 Linux …

音视频开发—视频相关概念:YUV与RGB

文章目录 YUV相关概念组成部分优点常见的 YUV 格式数据量的计算YUV4:2:0 存储格式平面模式&#xff08;planar):打包模式&#xff08;packed&#xff09; RGB 和 YUV 的定义关系与转换RGB 到 YUV 的转换YUV 到 RGB 的转换 使用场景优缺点 YUV相关概念 YUV 是一种颜色编码格式&…

JVM-JAVA-类加载过程

JVM源码 类加载到 JVM 的过程通过 java 命令执行代码的流程 类加载到 JVM 的过程 在运行一个 main 函数启动程序是&#xff0c;首先需要类加载起把主类加载到 JVM 中 通过 java 命令执行代码的流程 loadClass的类加载过程有如下几步&#xff1a; 类被加载到方法区中后主要包…