HTTP超详细介绍

HTTP讲解

  • 1.HTTP的介绍
  • 2.HTTP协议的特点
  • 3.HTTP工作原理
  • 4.HTTP三点注意事项
  • 5.HTTP消息结构
  • 6.客户端请求消息
  • 7.服务端响应消息
  • 8.HTTP请求方法
  • 9.HTTP 响应头信息
  • 10.HTTP 状态码(HTTP Status Code)
    • 10.1.下面是常见的HTTP状态码
    • 10.2.HTTP状态码分类
    • 10.3.HTTP状态码列表

1.HTTP的介绍

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是一种详细规定了【浏览器】和万维网(WWW:World Wide Web)【服务器】之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。说白了就是:HTTP协议就是浏览器和服务器之间进行“沟通”的一种【规范/约束】。
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件,查询结果等)。

2.HTTP协议的特点

  • 简单且快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得 HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
  • 支持B/S和C/S两种模式。

3.HTTP工作原理

HTTP协议工作于客户端/服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
首先客户端与服务器需要建立连接。只要单击某个超链接,HTTP就开始工作。
建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户端信息和可能的内容。
Web服务器根据接收到的请求后,向客户端发送响应信息。
服务器接到请求后,给予相应的响应信息,其格式为一个【状态行】,包括信息的协议版本号、 一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户端与服务器断开连接。

其他:
Web服务器有:Nginx,Apache服务器,IIS服务器(Internet Information Services)、caddy(号称替代nginx的神器,网址:https://caddyserver.com/docs/)等。
HTTP默认的端口号为80, HTTPS的端口号为443,也可以自定义端口

以下图表展示了HTTP协议通信流程:
5

4.HTTP三点注意事项

  • HTTP是无连接的:无连接的含义是,限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。这样做的好处是可以节省传输时间和服务器资源,因为服务器不需要一直保持连接等待客户端的请求。
  • HTTP是媒体独立的:HTTP协议本身不关心传输的数据内容的具体类型,只要客户端和服务器之间协商好数据类型,任何类型的数据都可以通过HTTP进行传输。客户端和服务器在发送和接收数据时,会通过MIME-type内容类型来指定数据的类型,以保证数据的正确解析和处理。
  • HTTP是无状态的:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息则它必须重传。

5.HTTP消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(可以是Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。

6.客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)请求头部(header)空行请求数据四个部分组成,下图给出了请求报文的一般格式。
4

  • 请求行:请求行位于HTTP请求消息的第一行,用于描述请求的方法、URL和HTTP协议版本。例如,GET /index.html HTTP/1.1就是一个请求行。
  • 请求头部:请求头部位于请求行之后,用于描述请求的一些附加信息,例如请求的主机名、浏览器类型、Cookie等。请求头部由多个字段组成,每个字段包含一个名称和一个值。例如,Host: www.example.com就是一个请求头部字段。
  • 空行:空行位于请求头部之后,用于分隔请求头部和请求数据。它表示请求头部的结束。
  • 请求数据:请求数据位于空行之后,用于描述请求的数据。它可以是任何格式的数据,例如表单数据、JSON数据、XML数据等

7.服务端响应消息

HTTP响应也由四个部分组成,分别是:状态行消息报头空行和响应正文
3
实例:下面实例是一个典型的使用GET来传递数据的实例
客户端请求:

  • curl是一个命令行工具,用于在各种操作系统中进行数据传输。-v是curl命令的一个选项,表示"verbose"(冗长模式),用于显示curl命令执行过程中的详细信息。
[root@localhost ~]# curl -v http://www.testpm.cn
Connected to www.testpm.cn (47.244.247.240) port 80 (#0)
> GET /hello.txt HTTP/1.1   # 请求方式与版本协议。
> User-Agent: curl/7.29.0   #用什么客户端访问
> Host: www.testpm.cn  #主机名,域名。主机和端口号,
> Accept: */  //匹配什么文件类型,“*” 是通用匹配。匹配所有类型[root@localhost ~]# curl -v http://www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
*   Trying 14.119.104.254...
* Connected to www.baidu.com (14.119.104.254) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
//或者 curl -v http://10.20.154.254

服务端响应:

< HTTP/1.1 200 OK       //请求返回的状态码
< Server: nginx/1.16.0  //请求的服务和版本号
< Date: Thu,04 Jul 2019 08:19:40 GMT //当前时间,北京时间为GMT+8小时
< Content-Type: text/plain //mime类型,test/plain:普通文本,比如image/png...、video
< Content-Length: 12 //内容的长度
< Last-Modified: Thu,04 Jul 2019 08:13:25 GMT //最后修改时间
< Connection: keep-alive  //是否支持长连接
< ETag: "5d1db525-c"  //标识,每次访问如果与最开始的值一样,则返回304;否则校验不一致则返回200
< Accept-Ranges: bytes //接受的范围单位;表示服务器支持Range头部,用于指定客户端请求的资源范围。这里的bytes表示按字节为单位。//例:
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform    //表示缓存控制策略,告诉缓存服务器和客户端如何缓存响应。private表示响应只能被单个用户缓存,no-cache表示缓存服务器和客户端不能缓存响应,no-store表示缓存服务器和客户端都不能缓存响应,proxy-revalidate表示缓存服务器必须验证缓存的响应是否过期,no-transform表示缓存服务器不能修改响应的内容。
< Connection: keep-alive    //表示是否使用持久连接,即HTTP Keep-Alive机制,可以减少HTTP请求的延迟和网络带宽的浪费。
< Content-Length: 2381
< Content-Type: text/html
< Date: Sat, 22 Jul 2023 05:16:34 GMT
< Etag: "588604dc-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:56 GMT
< Pragma: no-cache  //表示缓存控制策略,告诉缓存服务器和客户端不能缓存响应。
< Server: bfe/1.0.8.18  //表示服务器的软件名称和版本号。(BFE(Baidu FrontEnd)是百度公司自主研发的一款高性能、高可用、多协议的分布式Web前端服务器)
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ //表示服务器向客户端设置Cookie,包括名称、值、过期时间、域名和路径等信息。

8.HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GETPOSTHEAD方法。(发起方的请求叫get,响应方的回应叫post,head是请求头部)
HTTP1.1新增了五种请求方法:OPTIONSPUTDELETETRACECONNECT 方法。
2

9.HTTP 响应头信息

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。

应答头说明
Allow服务器支持哪些请求方法(如GET、POST等)。
Server服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。

10.HTTP 状态码(HTTP Status Code)

  • 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。
  • 当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

10.1.下面是常见的HTTP状态码

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在(nginx服务器问题)
  • 500 - 内部服务器错误(后端服务器问题)
  • 502 - 网关错误 bad gateway
  • 403 - forbidden 权限不足,权限问题(nginx.conf配置文件的user是nginx)
  • 302 - 临时重定向
  • 304 - 正常的状态码,客户端请求未发生变化

10.2.HTTP状态码分类

  • HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
    1

10.3.HTTP状态码列表

状态码状态码英文名称中文描述
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

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

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

相关文章

【Linux系列】在Pop!OS的启动器中添加自定义程序图标

文章目录 前言一、创建快捷方式二、快捷方式参数三、添加右键菜单和注册MIME 前言 无论是在Windows上&#xff0c;还是Linux&#xff0c;或者安卓这些我们常用的操作系统上&#xff0c;一些应用程序的快捷方式放在桌面或者启动器&#xff0c;只需要简单的点击就可以启动&#…

ABAP IDOC 2 XML

有个需求&#xff0c;外围系统希望我们给到一个IDOC 记录的样例&#xff0c;但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

【性能调优】local模式下flink处理离线任务能力分析

文章目录 一. flink的内存管理1.Jobmanager的内存模型2.TaskManager的内存模型2.1. 模型说明2.2. 通讯、数据传输方面2.3. 框架、任务堆外内存2.4. 托管内存 3.任务分析 二. 单个节点的带宽瓶颈1. 带宽相关理论2. 使用speedtest-cli 测试带宽3. 任务分析3. 其他工具使用介绍 本…

定制数据采集分析系统——为实现工业物联打下坚实基础

在这个工业4.0或者“工业互联网”的大背景下&#xff0c;工业物联网成为数字化转型中心舞台的一部分。数据是相关产品中的关键资产和生产资料&#xff0c;且在全球连接的产品(在整个生命周期中)的应用分析中是必不可少的功能。 工业物联网是将具有感知、监控能力的各类采集、控…

MAC相关

MAC地址&#xff0c;英文全称Medium Access Control&#xff0c;直译为介质访问控制&#xff0c;它通常被固化在每个以太网网卡&#xff08;NIC,Network Interface Card&#xff09;。MAC&#xff08;硬件&#xff09;地址长48位&#xff08;6字节&#xff09;&#xff0c;采用…

#LLMOps##AIGC# Dify_构建本地知识库问答应用-生成Al应用的创新引擎 用于构建助手API和GPT的开源开发平台

github&#xff1a; https://github.com/langgenius/dify/blob/main/README_CN.md 介绍文档&#xff1a;https://docs.dify.ai/getting-started/readme Dify 介绍 Dify 笔记 Dify 是什么&#xff1f; 开源的大语言模型&#xff08;LLM&#xff09;应用开发平台融合了后端即服…

c语言出现打印烫烫烫烫烫烫问题

系列文章目录 c语言出现打印烫烫烫烫烫烫问题 c语言出现打印烫烫烫烫烫烫问题 系列文章目录一、报错现象二、原因三、解决方法 一、报错现象 二、原因 字符数组初始化用这种方式初始化 %s是以字符串打印&#xff0c;获取是地址&#xff0c;%s会接受字符串结束标志[‘\0’]之前的…

阿里云 linux Centos7 安装 Miniconda3 + 创建Python环境

1.下载miniconda &#xff08;1&#xff09;法一&#xff1a;可以去下载清华源的miniconda镜像源&#xff0c;选择自己需要的版本&#xff0c;然后上传到Linux服务器上&#xff0c;linux上使用请选择linux版本&#xff0c;如下&#xff1a; &#xff08;2&#xff09;法二&…

日志项目1

文章目录 【C - 基于多设计模式下的同步&异步日志系统】项目介绍 前置技术1. 项目介绍2. 开发环境3. 核心技术4. 环境搭建5. 日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 6. 前置技术补充6.1 不定参函数6.1.1 不定参宏函数6…

24年地信专业各大院校,考研真题合集

2024年云南师范大学人文地理学考研真题 一、简答题 1. 人文地理学科的任务 2. 文化生态关系的类型与特点人口出生率低的影响因素现代农业的类型与特点 3. 发展中国家工业发展中存在的问题 二、分析题 1. 结合实例说明城市地域结构模型及主要动力 2. 结合实例论述区域协作组织对…

【送酒小程序系统源码】/花店送花系统/蛋糕店系统/奶茶店系统源码

前端uniapp后端thinkphp数据库mysql 多门店外卖餐饮点餐系统预约点餐 匹配附近店铺 堂食 外卖带走 菜品管理. 根据用户的位置匹配附近饭店 点餐后,可以在线等叫号 餐时输入手机号并支付后,可以支持外 支持多规格、备注等快捷功能,以吸多 多门店管理 数据概览 支持微…

克魔助手工具详解、数据包抓取分析、使用教程

目录 摘要 引言 克魔助手界面 克魔助手查看数据捕获列表 数据包解析窗口 数据包数据窗口 克魔助手过滤器表达式的规则 抓包过滤器实例 总结 参考资料 摘要 本文介绍了克魔助手工具的界面和功能&#xff0c;包括数据包的捕获和分析&#xff0c;以及抓包过滤器的使用方…

HarmonyOS—构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 构建第一个页面 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff0c;选择模板“Empty Ability”&am…

写点东西《什么是网络抓取?》

写点东西《什么是网络抓取&#xff1f;》 什么是网络抓取&#xff1f; 网络抓取合法吗&#xff1f; 什么是网络爬虫&#xff0c;它是如何工作的&#xff1f; 网络爬虫示例 网络抓取工具 结论 您是否曾经想同时比较多个网站上同一件商品的价格&#xff1f;或者自动提取您最喜欢的…

Java-NIO 开篇(1)

NIO简介 高性能的Java通信&#xff0c;离不开Java NIO组件&#xff0c;现在主流的技术框架或中间件服务器&#xff0c;都使用了Java NIO组件&#xff0c;譬如Tomcat、 Jetty、 Netty、Redis、RabbitMQ等的网络通信模块。在1.4版本之前&#xff0c; Java IO类库是阻塞式IO&…

从0开始python学习-49.pytest之日志封装和allure封装

目录 日志封装 1. 在pytest.ini中配置日志的格式 2. 生成日志对象--在请求封装中写 3. 把日志写入文件--在请求封装中写 allure封装 1. 在yaml用例中写入需要的模块、接口等内容 2. 在测试用例封装的函数中通过allure.dynamic的方法写入需要的数据 日志封装 1. 在pytest.…

uniapp写微信小程序实现电子签名

写电子签名一定要注意的是一切全部按照手机上的适配来&#xff0c;为啥这么说呢&#xff0c;因为你在微信开发者工具中调试的时候认为是好的&#xff0c;正常的非常nice,当你发布版本的时候你会发现问题出来了。我下边的写法你可以直接用很简单。就是要记住canvas的几个属性和用…

Android Studi安卓读写NDEF智能海报源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.1f60789ey1EsPH <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmln…

【NPL】自然语言处理(Natural Language Processing,NLP)的发展简述

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】序列文章&#xff0c;这一次的话题是《自然语言处理的发展》 文章将以博主的角度进行讲述&#xff0c;理解和水平有限&#xff0c;不足之处&#xff0c;望指正。 目录 背景发展线路研发关…