简明HTTP协议

浙政钉H5应用上架实战:从环境配置到发布避坑指南 本文详细解析浙政钉H5应用上架全流程,从环境配置到发布避坑指南。重点介绍Vue 2.6 + Node 14.21.3的稳定开发环境搭建、项目结构规范及常见报错解决方案,帮助开发者高效完成浙政钉H5应用上架流程。 阅读详情

1 HTTP协议的概念和历史

1.1 什么是HTTP协议

HTTP协议是超文本传送协议(HyperText Transfer Protocol)的缩写,它是万维网(World Wide Web,www,也简称为Web)的基础。HTTP协议设计之初就是为了实现Web的想法。HTTP协议位于TCP/IP协议栈的应用层。

我们在浏览器的地址栏里输入的网站地址叫做URL(UniformResourceLocator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并呈现出客户端需要的网页。

HTTP协议使用的默认端口是80,同时也支持自定义端口。

1.2 HTTP协议的历史

HTTP协议到现在为止总共经历了3个版本的演化,第一个HTTP协议诞生于1989年3月。当时Berners-Lee向 CERN(Conseil Europeen pour la Recherche Nucleaire,欧洲核能研究所)提交了一篇名为《信息管理的一个提议》的文章。文章中提出了www网络的构想,不过仅仅在很多方面都只关注了概念,而没涉及到细节。

第一个HTTP协议的版本是HTTP 0.9,它的组成极其简单,因为它只允许客户端发送GET这一种请求,它不包含协议头,每个请求只有一句话,例如:

GET /index.html

由于没有协议头,造成了HTTP 0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。所以HTTP 0.9能够支持的应用实在太有限了。一次HTTP 0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何错误码。

HTTP 0.9的缺点是显著的,但至少实现了第一代的Web。

HTTP协议的第二个版本是HTTP 1.0,直到HTTP 1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应,同样是建立并关闭一次连接。其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。

并且HTTP 1.0最显著的变化之一是开始支持客户端通过POST方法向Web服务器提交数据。从此客户端与Web服务器之间不再只能单向地获取数据,而可以实现交互,因此CGI(Common Gate Interface,通用网关接口)开始流行起来,Web上开始出现留言板、论坛等丰富的应用。

HTTP 1.0还有个显著的变化是通过HTTP协议头可以支持各种媒体类型。从此Web上不再仅仅是纯文本的页面,比如图像通过<img>的HTML标记开始出现。

除了以上几个新特性,HTTP 1.0支持长连接(但默认还是使用短连接),缓存机制,以及身份认证。

虽说HTTP协议的设计是向前兼容的,但目前很多浏览器和Web服务器都强制要求HTTP协议版本至少是1.0。

HTTP协议的第三个版本是HTTP 1.1,它就是目前使用最广泛的协议版本。这个版本的HTTP协议已经稳定了,跟HTTP 1.0相比,它新增了很多引人注目的新特性,比如Host协议头,一个HTTP请求的头中可以包含一句例如:

Host: aoxu.com.cn

从此一个Web服务器可以支持挂载多个域名了,无需每个域名都使用独立IP,每个网站可以使用虚拟主机。

另一个HTTP 1.1的新特性是支持部分内容请求/响应,这意味着当客户端请求的数据量很大时,可以分多次发起请求,每次请求只要求获取整块数据的一部分。Web服务器也可以分多次响应,每次只返回整块数据的一部分。这使得流媒体得以实现。

从HTTP 1.1开始,客户端默认与Web 服务器建立长连接,这种连接适合Web上数据量较大的丰富应用,使得资源消耗更少。

QzHTTP就是一个支持HTTP 1.1协议的Web Server。

2.HTTP协议内容介绍

2.1 URI

HTTP协议通过URI(Uniform Resource Identifiers,统一资源定位符)来访问资源。根据RFC 1808的官方定义,一个完整URI的组成如下:

http://myname:mypass@www.aoxu.com.cn:80/mydir/myfile.html?myvar=myvalue#myfrag

 

URI字段

表 2.1

URI部分

意义

http

协议名称

myname

用户名(可选)

mypass

密码(可选)

www.aoxu.com.cn

主机网络地址

80

端口号(可选)

/mydir/myfile.html

资源路径

myvar=myvalue

查询字符串(可选)

myfrag

锚点(可选)

 

可见协议名称用“://”结束,用户名和密码以“:”分隔,以“@”结束,端口号与主机网络地址以“:”分隔,资源路径与查询字符串以“?”分隔,锚点以#开头。

并且,只有协议名称、主机网络地址和资源路径是必须包含在URI里的。

一个更常见的例子如下:

http://www.aoxu.com.cn/

在这里面,http是协议,www.aoxu.com.cn是主机网络地址,注意末尾的/就是资源路径,这是必须的。当我们平时使用Web浏览器访问时,只需要输入www.aoxu.com.cn就可以访问,这是由于Web浏览器替我们自动补齐了前面的http://和最后的/,Web浏览器发起请求时使用的URI还是完整的,Web浏览器并不强制用户输入格式规范的URI。

 

2.2 HTTP请求与响应

HTTP协议的交互主要由请求和响应组成,请求是指客户端发起向Web服务器请求资源的消息,而响应是Web服务器根据客户端的请求回送给客户端的资源消息。

发出的请求信息(Request Message)包括以下几部分:

l  请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images 目录下请求logo.gif 这个文件。

l  (请求)头,例如Accept-Language: en

l  空行

l  可选的消息体

请求行和标题必须以<CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。

请求方法(Request Method)

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

l  OPTIONS

返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

l  HEAD

向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

l  GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web 应用程序中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

l  POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

l  PUT

向指定资源位置上传其最新内容。

l  DELETE

删除指定资源。

l  TRACE

回显服务器收到的请求。

l  CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的,可选方法中还有一个重要的方法是POST。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

一个GET请求的示例如图2.3所示(访问重庆大学主页):

 

 

图2.3 HTTP请求

 

GET 代表方法名,后面的/代表资源路径,HTTP/1.1表示协议版本。下面都是协议头部分,常见的头字段如表2.2所示。

 

HTTP协议头字段

表2.2

头字段

定义

Accept

客户端可以处理的媒体类型(MIME-Type),按优先级排序;在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符

Accept-Language

客户端支持的自然语言列表

Accept-Encoding

客户端支持的编码列表

User-Agent

客户端环境类型

Host

服务器端的主机地址

Connection

连接类型,默认为Keep-Alive

HTTP协议是Web内容的容器。一个示例HTTP响应如图2.4所示:

 

 

图2.4 HTTP响应

 

每个响应由HTTP协议头和Web内容构成。Web服务器收到一个请求,就会立刻解释请求中所用到的方法,并开始处理应答。服务器的响应消息也包含头字段形式的协议头。响应的格式在RFC2616中定义如下:

Status-Line*

(( general-header)| response-header | entity-header)CRLF)

CRLF

[ message-body ]

响应消息的第一行是状态行(Stauts-Line),由协议版本以及数字状态码和相关的文本短语组成,各部分间用空格符隔开,除了最后的回车或换行外,中间不允许有回车换行。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

状态码是试图理解和满足请求的三位数字的整数码, 原因短语(Reason-Phrase)是为了给出的关于状态码的文本描述。状态码用于控制条件,而原因短语(Reason-Phrase)是让用户便于阅读。客户端不需要检查和显示原因短语。

状态码的第一位数字定义响应类型。后两位数字没有任何分类角色。第一位数字有五种值,如表2.3所示。

 

HTTP响应状态码

表 2.3

状态码

定义

1xx 报告

接收到请求,继续进程

2xx 成功

步骤成功接收,被理解,并被接受

3xx 重定向

为了完成请求,必须采取进一步措施

4xx 客户端出错

请求包括错的顺序或不能完成

5xx 服务器出错

服务器无法完成显然有效的请求

 

下面列举了为HTTP/1.1定义的状态码值,和对应的原因短语(Reason-Phrase)的例子。

l  客户端错误

"100" : Continue  继续

"101" : witching Protocols  交换协议

l  成功

"200" : OK

"201" : Created 已创建

"202" : Accepted 接收

"203" : Non-Authoritative Information 非认证信息

"204" : No Content 无内容

"205" : Reset Content 重置内容

"206" : Partial Content 部分内容

l  重定向

"300" : Multiple Choices 多路选择

"301" : Moved Permanently  永久转移

"302" : Found 暂时转移

"303" : See Other 参见其它

"304" : Not Modified 未修改

"305" : Use Proxy 使用代理

"307" : Temporary Redirect

l  客户方错误

"400" : Bad Request 错误请求

"401" : Unauthorized 未认证

"402" : Payment Required 需要付费

"403" : Forbidden 禁止

"404" : Not Found 未找到

"405" : Method Not Allowed 方法不允许

"406" : Not Acceptable 不接受

"407" : Proxy Authentication Required 需要代理认证

"408" : Request Time-out 请求超时

"409" : Conflict 冲突

"410" : Gone 失败

"411" : Length Required 需要长度

"412" : Precondition Failed 条件失败

"413" : Request Entity Too Large 请求实体太大

"414" : Request-URI Too Large 请求URI太长

"415" : Unsupported Media Type 不支持媒体类型

"416" : Requested range not satisfiable

"417" : Expectation Failed

l  服务器错误

"500" : Internal Server Error 服务器内部错误

"501" : Not Implemented 未实现

"502" : Bad Gateway 网关失败

"503" : Service Unavailable

"504" : Gateway Time-out 网关超时

"505" : HTTP Version not supported  HTTP版本不支持

HTTP状态码是可扩展的。HTTP应用程序不需要理解所有已注册状态码的含义,尽管那样的理解显而易见是很合算的。但是,应用程序必须了解由第一位数字指定的状态码的类型,任何未被识别的响应应被看作是该类型的x00状态,有一个例外就是未被识别的响应不能缓存。例如,如果客户端收到一个未被识别的状态码431,则可以安全的假定请求有错,并且它会对待此响应就像它接收了一个状态码是400的响应。在这种情况下,用户代理(user agent)应当把实体和响应一起提交给用户,因为实体很可能包括人可读的关于解释不正常状态的信息。报文最后是实体信息,即客户请求得到的HTTP服务器上的资源内容。

研一脑电小白日记 之 EEGLAB预处理实战指南 本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。 阅读详情

相关推荐

python 识别滑块验证码

博客来源于: https://www.cnblogs.com/wyh0923/p/16528354.html # -*- coding: utf-8 -*- # https://gov.pkulaw.cn/ 1. import io 2. import json 3. from pathlib import Path 4. from PIL import Image 5. import bas...

2102

http 415 unsupported media type 多种原因解决方案

http 415 unsupported media type 报错解决方案

weixin_45956631的博客 2万+

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4143

HTTP 415错误状态码

HTTP 415错误状态码是指"Unsupported Media Type"(不支持的媒体类型)。这通常发生在客户端向服务器发送请求时,请求中包含的媒体类型(例如Content-Type头部)不被服务器支持或识别的情况下。

qq_44327851的博客 3万+

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1510

LVGL9.2移植至正点原子阿波罗STM32F429开发板

LVGL(Light and Versatile Graphics Library)是一个开源的图形库,旨在为嵌入式系统提供高效、灵活的图形用户界面(GUI)解决方案。它具有小巧的内存占用和高性能的渲染能力,支持多种硬件平台,包括单片机、DSP 和 ARM 处理器等。LVGL 支持丰富的控件(如按钮、标签、图标、滚动条等),并提供强大的主题、样式和动画功能,使得开发者能够轻松设计出美观且响应迅速的界面。

m0_51149752的博客 3173

HTTP/1.1 415 Unsupported Media Type

httpPost.addHeader("encoding", "UTF-8"); httpPost.addHeader("content-type", "application/json; charset=utf-8");

qq_31443653的博客 3796

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

关于HTTP请求返回415(Unsupported Media Type) 不支持的类型异常-定位问题

关于HTTP请求返回415(Unsupported Media Type) 不支持的类型异常-定位问题

m0_59278919的博客 3万+

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR

本例是几个简单的板载DDR颗粒的结构,本例中使用General SI Simulation模式仿真DDR信号,结构拓扑如下,Addcmd,clk,cke都是T拓扑。Sigrity SPEED2000 General SI Simulation模式可以对信号进行仿真分析,仿真将电源视为理想电源,以下图为例进行说明。DQS的接收端模型设置为DQS_34_ODT60_1333。模式如何进行信号仿真分析操作指导-DDR。附带驱动和接收端的IBIS模型。

weixin_54787054的博客 510

在iPad上使用Python进行编程

如果你拥有一台iPad,并且想在上面编写和运行Python代码,你会发现iPad提供了一些适用的工具和应用程序来满足你的需求。安装一个Python解释器应用程序,编写和运行Python代码,使用第三方库和模块,以及存储和共享代码,这些步骤将帮助你在iPad上进行Python编程。要在iPad上运行Python代码,首先需要安装一个Python解释器。这些应用程序提供了一个交互式的开发环境,允许你编写、编辑和运行Python代码。一旦你安装了Python解释器应用程序,你可以开始编写Python代码了。

2301_79366435的博客 4625

HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)

前段时间在使用@RequestBody注解的时候遇到了一个以前没遇到过的错误,HTTP 415  Unsupported media type? 这个是个什么鬼,@ResponseBody可以正常工作而一使用@RequestBody来进行交互就会报这个错误。一直请求不到Controller,我开始总以为是路径或者json格式不对的问题,上网查资料大多也说的是这个问题。可是我已经写了 data :

13万+

详解RT-DETR网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

本文给大家带来是利用RT-DETR模训练自己的数据集,RT-DETR是一种新提出的目标检测模型,它利用的自注意力机制来处理图像数据。不同于YOLO通过连续的卷积层直接对图像区域进行分析,RT-DETR采用Transformer架构中的自注意力机制,这允许模型更有效地理解图像中不同部分之间的关系。这种方法使得RT-DETR在处理图像中的复杂场景和多对象环境时,能够展现出更高的准确性和效率。此外,RT-DETR在保持高精度的同时,也针对实时处理进行了优化,使其适合需要快速响应的应用场景。

Snu77的博客 6万+

HTTP协议简明介绍

HTTP协议简明介绍     超文本传送协议(hypertext transfer protocol,HTTP)是万维网(world wide web,www,也简称为web) 的基础,本节主要对http协议进行介绍,并分别给出http多线程服务器和客户程序的实例,而不 介绍有关WEB和浏览器方面的知识。  HTTP是一个属于应用层的面向对象的协议,适用于分布式超媒体信息系统。它于

xiaoaide01的专栏 676

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Netty与TCP、HTTP、WebSocket协议简明摘要

1.同步阻塞I/O(BIO) NIO 伪异步I/O 异步I/O(AIO) NIO(非阻塞I/O):1个IO线程处理多个客户端连接,非阻塞,同步 同步阻塞IO:一个IO线程处理一个客户端连接,阻塞,同步 伪异步IO:M个线程处理N个客户端连接(其中M≥N),阻塞,同步 异步IO:不需要启动额外的IO线程,被动回调,非阻塞,异步 2.TCP粘包问题TCP基于流的方式进行数据传输,由于底层的TCP无法理解

Auspicious Cloud's View 5285

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HTTP协议基础 简明易懂版

导读:   ----   ·内容   -介绍HTTP协议的有关内容,包括:HTTP URL,HTTP请求,HTTP响应和HTTP消息。   ·目的   -绝大多数的WEB开发,都是构建在HTTP协议之上的WEB应用,理解和掌握HTTP协议,将有助与我们更好的学习和掌握SERVLET和JSP技术。   -------------   HTTP简介   ·HTTP(Hy

BBTX-Blog 878

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

5分钟让你搞懂Http和Https协议的区别是什么?

总的来说,HTTPS是在HTTP的基础上添加了安全性层,通过加密和身份验证来保护数据传输的安全性。在处理涉及用户隐私和敏感信息的场景中,强烈建议使用HTTPS,以提供更高级别的安全性和信任

OKCRoss的博客 1134

http学习笔记(四) HTTP状态码

该文章主要介绍服务端返回的状态码说明。 状态码类别 一共有5种类别,数字中的第一位指定了响应类别,后两位无分类 2XX成功 2XX结果列表如下: 状态码 原因短语 说明 200 OK 从客户端发来的请求在服务器端被正常处理了 204 No Content 服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分 ...

dulei17816的博客 256

十分钟搞懂什么是CGI

十分钟搞懂什么是CGI 原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解。不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧。 CGI真的很简单 在此之前,你或许听说过很多说CGI‘晦涩难懂’的言论。如果你会写最基本的输入输出,那么你就可以写出一...

weixin_33948416的博客 201

什么是python爬虫?怎么入门?(附学习资源)

什么是爬虫? 网络爬虫,其实叫作网络数据采集更容易理解。 就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。 归纳为四大步: 根据url获取HTML数据 解析HTML,获取目标信息 存储数据 重复第一步 这会涉及到数据库、网络服务器、HTTP协议、HTML、数据科学、网络安全、图像处理等非常多的内容。但对于初学者而言,并不需要掌握这么多。 想要入门Python 爬虫首先需要解决四个问题 熟悉python编程 了解HTML 了解网络爬虫的基本原理 学习使用pyth

大模型教程的博客 223
上一篇: 《小强升值记》读后感
下一篇: 小强升职记中四象限
netbug2009
博客等级 码龄17年 21粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值