http协议详解

本文详细介绍了HTTP协议的基础知识,包括请求与响应的过程。重点解释了GET与POST两种请求方式的区别,以及服务器如何响应这些请求。
HTTP由两部分组成:请求和响应。当你在Web浏览器中输入一个URL时,浏览器
将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关
的信息。当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以
及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他
资源)为止。
· 2.1.1 HTTP请求
· HTTP请求的格式如下所示:
· <request-line>
· <headers>
· <blank line>
· [<request-body>]
· 在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、
要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服
务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称
之为主体(body)]。
· 在HTTP中,定义了大量的请求类型,不过Ajax开发人员关心的只有GET请求和
POST请求。只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一
个GET请求,以告诉服务器获取并返回什么资源。对于 www.wrox.com的GET请求如下
所示:
· GET / HTTP/1.1
· Host: www.wrox.com
· User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
· Gecko/20050225 Firefox/1.0.1
· Connection: Keep-Alive
· 请求行的第一部分说明了该请求是GET请求。该行的第二部分是一个斜杠(/),
用来说明请求的是该域名的根目录。该行的最后一部分说明使用的是HTTP 1.1版本(另
一个可选项是1.0)。那么请求发到哪里去呢?这就是第二行的内容。
· 第2行是请求的第一个首部,HOST。首部HOST将指出请求的目的地。结合HOST
和上一行中的斜杠(/),可以通知服务器请求的是 www.wrox.com/(HTTP 1.1才需要
使用首部HOST,而原来的1.0版本则不需要使用)。第三行中包含的是首部User-Agent,
服务器端和客户端脚本都能够访问它,它是浏览器类型检测逻辑的重要基础。该信息由
你使用的浏览器来定义(在本例中是Firefox 1.0.1),并且在每个请求中将自动发送。
最后一行是首部Connection,通常将浏览器操作设置为Keep-Alive(当然也可以设置
为其他值,但这已经超出了本书讨论的范围)。注意,在最后一个首部之后有一个空行。
即使不存在请求主体,这个空行也是必需的。
· 如果要获取一个诸如 http://www.wrox.com/bookswww.wrox.com 域内的页面,
那么该请求可能类似于:
· GET /books/ HTTP/1.1
· Host: www.wrox.com
· User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
· Gecko/20050225 Firefox/1.0.1
· Connection: Keep-Alive
· 注意只有第一行的内容发生了变化,它只包含URL中 www.wrox.com 后面的部分。
·要发送GET请求的参数,则必须将这些额外的信息附在URL本身的后面。其格式
类似于:
· URL ? name1=value1&name2=value2&..&nameN=valueN
· 该信息称之为查询字符串(query string),它将会复制在HTTP请求的请求行中,
如下所示:
· GET /books/?name=Professional%20Ajax HTTP/1.1
· Host: www.wrox.com
· User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
· Gecko/20050225 Firefox/1.0.1
· Connection: Keep-Alive
· 注意,为了将文本“Professional Ajax”作为URL的参数,需要编码处理其内容,
将空格替换成%20,这称为URL编码(URL encoding),常用于HTTP的许多地方(JavaScript
提供了内建的函数来处理URL编码和解码,这些将在本章中的后续部分中说明)。“名
称—值”(name—value)对用 & 隔开。绝大部分的服务器端技术能够自动对请求主体
进行解码,并为这些值的访问提供一些逻辑方式。当然,如何使用这些数据还是由服务
器决定的。
· 浏览器发送的首部,通常比本节中所讨论的要多得多。为了简单起见,这里的例
子尽可能简短。
· 另一方面,POST请求在请求主体中为服务器提供了一些附加的信息。通常,当填
写一个在线表单并提交它时,这些填入的数据将以POST请求的方式发送给服务器。
· 以下就是一个典型的POST请求:
· POST / HTTP/1.1
· Host: www.wrox.com
· User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
· Gecko/20050225 Firefox/1.0.1
· Content-Type: application/x-www-form-urlencoded
· Content-Length: 40
· Connection: Keep-Alive
· name=Professional%20Ajax&publisher=Wiley
· 从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处
的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User-Agent仍然存
在,在后面有两个新行。其中首部Content-Type说明了请求主体的内容是如何编码的。
浏览器始终以application/ x-www-form- urlencoded的格式编码来传送数据,这是针
对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部
Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,
这是以简单的“名称—值”对的形式给出的,其中name是Professional Ajax,
publisher是Wiley。你可以以同样的格式来组织URL的查询字符串参数。
· 正如前面所提到的,还有其他的HTTP请求类型,它们遵从的基本格式与GET请求
和POST请求相同。下一步我们来看看服务器将对HTTP请求发送什么响应。
· 2.1.2 HTTP响应
· 如下所示,HTTP响应的格式与请求的格式十分类似:
· <status-line>
· <headers>
· <blank line>
· [<response-body>]
· 正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。
状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个
HTTP响应的例子:
· HTTP/1.1 200 OK
· Date: Sat, 31 Dec 2005 23:59:59 GMT
· Content-Type: text/html;charset=ISO-8859-1
· Content-Length: 122
· <html>
· <head>
· <title>Wrox Homepage</title>
· </head>
· <body>
· <!-- body goes here -->
· </body>
· </html>
· 在本例中,状态行给出的HTTP状态代码是200,以及消息OK。状态行始终包含的
是状态码和相应的简短消息,以避免混乱。最常用的状态码有:
· ◆200 (OK): 找到了该资源,并且一切正常。
· ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览
器的缓存机制。
· ◆ 401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户
输入用户名和密码,以登录到服务器。
· ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的
用户名或密码。
· ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。
· 在状态行之后是一些首部。通常,服务器会返回一个名为Data的首部,用来说明
响应生成的日期和时间(服务器通常还会返回一些关于其自身的信息,尽管并非是必需
的)。接下来的两个首部大家应该熟悉,就是与POST请求中一样的Content-Type和
Content-Length。在本例中,首部Content-Type指定了MIME类型HTML(text/html),
其编码类型是ISO-8859-1(这是针对美国英语资源的编码标准)。响应主体所包含的就
是所请求资源的HTML源文件(尽管还可能包含纯文本或其他资源类型的二进制数据)。
浏览器将把这些数据显示给用户。
· 注意,这里并没有指明针对该响应的请求类型,不过这对于服务器并不重要。客
户端知道每种类型的请求将返回什么类型的数据,并决定如何使用这些数据
带开环升压转换器和逆变器的太阳能光伏系统 太阳能光伏系统驱动开环升压转换器和SPWM逆变器提供波形稳定、设计简单的交流电的模型 Simulink模型展示了一个完整的基于太阳能光伏的直流到交流电力转换系统,该系统由简单、透明、易于理解的模块构建而成。该系统从配置为提供真实直流输出电压的光伏阵列开始,然后由开环DC-DC升压转换器进行处理。升压转换器将光伏电压提高到适合为单相全桥逆变器供电的稳定直流链路电平。 逆变器使用正弦PWM(SPWM)开关来产生干净的交流输出波形,使该模型成为研究直流-交流转换基本操作的理想选择。该设计避免了闭环和MPPT的复杂性,使用户能够专注于光伏接口、升压转换和逆变器开关的核心概念。 此模型包含的主要功能: •太阳能光伏阵列在标准条件下产生~200V电压 •具有固定占空比操作的开环升压转换器 •直流链路电容器,用于平滑和稳定转换器输出 •单相全桥SPWM逆变器 •交流负载,用于观察实际输出行为 •显示光伏电压、升压输出、直流链路电压、逆变器交流波形和负载电流的组织良好的范围 •完全可编辑的结构,适合分析、实验和扩展 该模型旨在为太阳能直流-交流转换提供一个干净高效的仿真框架。布局简单明了,允许用户快速了解信号流,检查各个阶段,并根据需要修改参数。 系统架构有意保持模块化,因此可以轻松扩展,例如通过添加MPPT、动态负载行为、闭环升压控制或并网逆变器概念。该模型为进一步开发或整合到更大的可再生能源模拟中奠定了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值