HTTP协议交代的清清楚楚

本文深入讲解HTTP协议,涵盖HTTP的基本概念、工作流程、请求与响应报文结构、状态码及首部字段等内容,同时对比了重定向与请求转发的区别。

一、HTTP简介

1.http协议介绍

  1. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
  2. HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
  3. HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图http/https
  4. HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
  5. HTTP默认的端口号为80,HTTPS的端口号为443。

2.http协议工作流程

一次HTTP操作称为一个事务,其工作过程大概如下:

  1. 用户在浏览器中键入需要访问网页的URL或者点击某个网页中链接;
  2. 浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址;
 
  1. 浏览器请求这个页面:http://hackr.ip/index.html

  2. 在这一步,需要域名系统DNS解析域名hackr.ip,得主机的IP地址 20X.189.105.112。

  3. 然后将上面结合本机自己的信息,封装成一个http请求数据包

  1. 在HTTP开始工作前,客户端首先会通过TCP/IP协议来和服务端建立链接(TCP三次握手)
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  4. 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

 

http协议和tcp协议

 

2.1 短连接

短连接的操作步骤是:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

短连接

 

2.2 长链接

长链接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

长链接操作步骤:建立连接——数据传输...(保持连接)...数据传输——关闭连接

长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间

长链接分为 without pipelining 和 with pipelining,下图中是without pipelining,客户端只在收到前一个请求的响应后,才发出新的请求。

长链接

 

2.3 管线化

下图是with pipelining,每次建立链接后无需等待请求回来就可以发送下一个请求

管线化

 

3. Http请求报文

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、请求体组成,下图给出了请求报文的一般格式。

HTTP请求

 

 
  1. 请求行:

  2. 方法:

  3. GET 获取资源

  4. POST 向服务器端发送数据,传输实体主体

  5. PUT 传输文件

  6. HEAD 获取报文首部

  7. DELETE 删除文件

  8. OPTIONS 询问支持的方法

  9. TRACE 追踪路径

  10. 协议/版本号

  11. URL

  12.  
  13. 请求头:

  14. 通用首部(General Header)

  15. 请求首部(Request Header)

  16. 响应首部(Response Header)

  17. 实体首部(Entity Header Fields)

  18.  
  19. 请求体

请求报文拆解:

http请求报文

 

3.1 get请求

 

get请求

 

3.2 post请求

 

post请求

 

4. Http响应报文

HTTP响应组成:响应行、响应头、响应体。

 

http响应

 

 
  1. 响应行

  2. (HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

  3. 响应头

  4. Date:生成响应的日期和时间;

  5. Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1

  6. 响应体

响应报文拆解:

http响应报文

 

5. Http状态码

类别原因
1XXInformational(信息性状态码)
2XXSuccess(成功状态码)
3XXRedirection(重定向)
4XXClient Error(客户端错误状态码)
5XXServer Error(服务器错误状态吗)

5.1 2XX 成功

 
  1. 200(OK 客户端发过来的数据被正常处理

  2. 204(Not Content 正常响应,没有实体

  3. 206(Partial Content 范围请求,返回部分数据,响应报文中由Content-Range指定实体内容

5.2 3XX 重定向

 
  1. 301(Moved Permanently) 永久重定向

  2. 302(Found) 临时重定向,规范要求,方法名不变,但是都会改变

  3. 303(See Other) 和302类似,但必须用GET方法

  4. 304(Not Modified) 状态未改变, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)

  5. 307(Temporary Redirect) 临时重定向,不该改变请求方法

5.3 4XX 客户端错误

 
  1. 400(Bad Request) 请求报文语法错误

  2. 401 (unauthorized) 需要认证

  3. 403(Forbidden) 服务器拒绝访问对应的资源

  4. 404(Not Found) 服务器上无法找到资源

5.4 5XX 服务器端错误

 
  1. 500(Internal Server Error)服务器故障

  2. 503(Service Unavailable) 服务器处于超负载或正在停机维护

6. 首部

6.1 通用首部字段

首部字段名说明
Cache-Control控制缓存行为
Connection链接的管理
Date报文日期
Pragma报文指令
Trailer报文尾部的首部
Trasfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器信息
Warning错误通知

6.2 请求首部字段

首部字段名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的编码
Accept-Langulage优先的语言
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在的服务器
If-Match比较实体标记
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间(和If-Modified-Since相反)
Max-Forwards最大传输跳数
Proxy-Authorization代理服务器需要客户端认证
Range实体字节范围请求
Referer请求中的URI的原始获取方
TE传输编码的优先级
User-AgentHTTP客户端程序的信息

6.3 响应首部字段

首部字段名说明
Accept-Ranges是否接受字节范围
Age资源的创建时间
ETag资源的匹配信息
Location客户端重定向至指定的URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After再次发送请求的时机
Server服务器的信息
Vary代理服务器缓存的管理信息
www-Authenticate服务器对客户端的认证

6.4 实体首部字段

首部字段名说明
Allow资源可支持的HTTP方法
Content-Encoding实体的编码方式
Content-Language实体的自然语言
Content-Length实体的内容大小(字节为单位)
Content-Location替代对应资源的URI
Content-MD5实体的报文摘要
Content-Range实体的位置范围
Content-Type实体主体的媒体类型
Expires实体过期时间
Last-Modified资源的最后修改时间

7、HTTP中的重定向和请求转发的区别

 

本质区别

解释一  

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request, 
第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
 


请求转发是服务器内部把对一个request/response的处理权,移交给另外一个 
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

解释三

 

假设你去办理某个执照, 

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。 

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

 

参考:

  1. HTTP简介
  2. HTTP协议详解
  3. HTTP
  4. HTTP工作过程
<think>嗯,用户这次的问题聚焦在负电压的基本原理和电源供电中的作用上,结合了站内引用资料和之前关于-48V供电的讨论。看来用户对通信电源标准背后的物理概念产生了兴趣,需要从基础电学原理切入。 用户可能是个电子工程初学者或通信行业从业者,因为ta同时关注理论定义(负电压的本质)和工程应用(电源系统设计)。从ta特意强调“参考站内引用”来看,希望回答能紧扣资料,避免泛泛而谈。不过引用[5]关于STM32的内容似乎与当前问题关联度不高,可以忽略。 负电压的核心在于参考点选择,这点引用[1][3]解释得很清楚:电压是相对的测量值。就像测量山的高度以海平面为基准,低于海平面就是负海拔。电路中把GND设为0V参考点,低于GND的电压自然为负。这个类比应该能帮助用户理解。 工程应用方面需要突出两个层面:一是通信系统防腐蚀的特殊需求(引用[4]的电话线案例),二是电路设计需求。尤其是运放电路部分,引用[2][4]都提到双电源供电对信号完整性的重要性——老式运放需要负电压才能处理接近0V的信号,这在精密测量中很关键。不过随着轨到轨运放普及,这点可能不再是主要因素。 安全因素要呼应之前-48V的回答:负电压系统通过正极接地减少电化学腐蚀,同时-48V本身属于安全电压范围。这点在引用[4]的“自毁电路”部分也有侧面印证,说明常规芯片对负压缺乏保护,反过来证明-48V的负压设计经过了特殊安全考量。 最后生成的问题要引导用户深入:负电压生成技术(电荷泵/DCDC转换)和具体应用场景(除通信外的工业设备)都是自然延伸的方向。特别加入防腐蚀设计的提问,因为这是其他领域少见的独特应用。</think>以下是关于负电压基本原理及其在电源供电中作用的详细解答,结合电学原理和工程实践逐步展开: --- ### 一、负电压的基本原理 1. **电压的相对性** 电压的本质是电势差,其正负取决于参考点(通常以"地"(GND)为0V基准)。 - 当某点电势**低于**参考点时,电压值为负($V_{\text{点}} < V_{\text{GND}} \Rightarrow V_{\text{点}} < 0$)[^1][^3]。 - **示例**:若GND为0V,A点电势为-5V,则A点对GND的电压为$-5\text{V}$(如图)。 $$V_{\text{A-GND}} = -5\text{V}$$ 2. **电子流动方向** 电子带负电荷,自然从**低电势(负压)** 流向**高电势(正压)**。负电压系统中,电流方向与电子流相反(从正极流向负极)[^1][^4]。 3. **生成方法** - **电荷泵**:通过电容充放电翻转电压极性(如ICL7660芯片),但输出电流较小[^2][^4]。 - **DC/DC转换器**: - 将正压芯片的输出端接地(GND),原GND端即变为负压(如图)。 - 例如TPS5430芯片输入+24V时,若输出端接GND,则原GND端输出$-12\text{V}$[^2]。 $$V_{\text{out}} = -1.221 \times (R_1 + R_2)/R_2$$ --- ### 二、电源供电中使用负电压的原因 #### 1. 防电化学腐蚀(通信系统核心需求) - **电话线/通信电缆**:采用$-48\text{V}$供电,正极接地(GND)。 - 金属导线在正电压下易发生**阳极氧化**(如铜线生成$ \text{Cu}^{2+} $溶解)。 - 负电压使导线成为**阴极**,抑制氧化反应,延长寿命[^1][^4]。 - *反例*:若用$+48\text{V}$供电,导线腐蚀速度加快10倍以上[^4]。 #### 2. 信号完整性需求 - **RS232通信**: - 逻辑"1"用$-3\text{V} \sim -15\text{V}$,逻辑"0"用$+3\text{V} \sim +15\text{V}$[^4]。 - 负压提供更大噪声容限,避免低电压误判(如MAX232芯片内置电荷泵生成负压)。 - **运放供电**: - 非轨到轨运放(如OP07)需负电压处理接近0V的信号: - 输入范围:$ V_{\text{EE}} + 1\text{V} < V_{\text{in}} < V_{\text{CC}} - 1\text{V} $ - 输出范围:$ V_{\text{EE}} + 2\text{V} < V_{\text{out}} < V_{\text{CC}} - 2\text{V} $ - 提供负压(如$-5\text{V}$)可扩展信号动态范围至$0\text{V}$附近[^2][^4]。 #### 3. 安全与系统设计 - **安全电压阈值**:$-48\text{V}$略高于人体安全电压($36\text{V}$),但通过正极接地降低触电风险[^1]。 - **统一标准**:通信设备(5G基站/交换机)沿用$-48\text{V}$标准,简化电源备份系统设计(如铅酸电池直接匹配)[^1][^2]。 --- ### 三、负电压的工程实现 | **方法** | **原理** | **输出能力** | **应用场景** | |----------------|-----------------------------------|-------------|---------------------| | 电荷泵 | 电容极性翻转 | 小电流(<100mA) | RS232电平转换[^4] | | DC/DC转换器 | 改变参考点(输出端接地) | 大电流(>1A) | 通信设备主电源[^2] | | 线性稳压器 | 低压差负压输出(如LM7905) | 中等电流 | 模拟电路辅助供电 | > 图:DC/DC生成负压原理 > ```plaintext > 输入+24V → TPS5430 → 输出端接GND > │ > 原GND端 → 输出-12V > ``` --- ### 总结 负电压的本质是**电势相对参考点的负向偏移**,其核心价值在于: 1. **防腐蚀**:$-48\text{V}$供电保护通信线路金属导体[^1][^4]; 2. **信号扩展**:为运放提供负电源轨,处理接近0V的信号[^2][^4]; 3. **噪声抑制**:差分信号系统(如RS232)提升抗干扰能力[^4]。 这些特性使其成为通信、工业控制等领域的刚需设计。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值