Http协议详解(深入理解)

HTTP协议是互联网上应用最广泛的网络协议,用于客户端和服务器间传输超文本。本文详细介绍了HTTP的作用、特点、版本、组成、请求和响应报文、Content-Type、协议扩展以及其无状态特性。通过理解HTTP的工作原理,包括请求方法(GET、POST等)和响应状态码,有助于优化Web应用的性能和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

引入

http协议的作用及特点

协议功能

http协议的版本

Http协议的组成

HTTP请求报文

HTTP请求报文头属性

HTTP响应报文

Content-Type详解

Http 协议中的扩展

Http 协议的特点


引入

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

http协议的作用及特点

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
 

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。HTTP使用TCP而不是UDP的原因在于(打开)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。

通过HTTP或者HTTPS协议请求的资源由统一资源标示符(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。

1.基于请求/响应模型的协议。请求和响应必须成对,先有请求后有响应

2.http协议默认端口:80

3.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

4.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

5.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

6.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

协议功能


HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

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

http协议的版本


HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开

HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开

Http协议的组成


Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时, 你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请  求后会组织响应数据封装成一个Http响应返回给浏览器。即没有请求就没有响应。

 

http请求包括:请求行、请求头、请求体

http响应包括:响应行、响应头、响应体

HTTP请求报文

HTTP请求报文由3部分组成(请求行+请求头+请求体):

 

请求行:

例如:POST /chapter17/user.html HTTP/1.1

格式:请求方式 资源路径 协议/版本

请求行必须在http请求格式的第一行。

get请求:

将请求参数追加在url后面,不安全

url长度限制get请求方式数据的大小

没有请求体

一般的HTTP请求大多都是GET。

post请求:

请求参数在请求体处,较安全。

请求数据大小没有显示

只有表单设置为method=“post”才是post请求,其他都是get请求

常见get请求:地址栏直接访问、<a href="">、<img src="">等

HEAD请求:

HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。

DELETE请求:

删除某一个资源。

OPTIONS请求:

用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

PUT请求:

把一个资源存放在指定的位置上。

本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。

TRACE请求:

回显服务器收到的请求,主要用于测试或诊断。

CONNECT请求:

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

在 REST 架构风格中,有严格规定对于不同的请求类型要设置合适的请求方法。

也是避免出 现因为乱用导致混乱的问题。这里提到了 REST 架构,现在很多同学都在写 REST,有没有人 能够明白为什么要定义 REST 这个架构风格?

  •  随着服务化架构的普及,http 协议的使用频率越来越高
  • 很多人在错误的使用 http 协议定义接口,比如各种各样的命名,什么 getUserInfoById, deleteById 之类的、有状态和无状态请求混用。
  •  对于 http 协议本身提供的规则并没有很好的利用

所以,为了更好的解决这些问题,干脆就定义一套规则,这套规则并没有引入新的东西,无 非就是对 http 协议本身的使用做了一些约束,比如说

  •  REST 是面向资源,每一个 URI 代表一个资源
  •  强调无状态化,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他 请求中使用
  •  强调 URL 暴露资源时,不要在 URI 中出现动词
  •  合理的利用 http 状态码、请求方法。

因此大家在参照这种标准去使用 REST 风格时,要明白你遵循的是什么以及要解决什么问题。

请求头:

例如:Host: 39.108.107.149:8080

请求头从第二行开始,到第一个空格结束。请求头和请求体之间存在一个空格(如下)

POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 11
 
name=城市

请求头通常以键值对{key:value}方式传递数据。

<
超 文本传输协议HTTP)是一种为分布式,合作式,超媒体信息系统。它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也 可以应用于诸如名称服务器和分布对象管理系统之类的系统,这可以通过扩展它的请求方法,错误代码和报头[47]来实现。HTTP的一个特点是数据表现形式 是可输入的和可协商性的,这就允许系统能被建立而独立于数据传输。 目录 1 引论 1.1 目的 1.2 要求 1.3 术语 1.4 总体操作 2 符号习惯和一般语法 2.1 扩充的BNF(扩充的 巴科斯-诺尔范式) 2.2基本规则 (basic rule) 3 协议参数 3.1 HTTP版本 3.2 统一资源标识符(URI) 3.2.1一般语法 3.2.2 http URL 3.2.3 URI 比较 3.3 日期/时间格式(Date/Time Formats) 3.3.1完整日期 (Full Date) 3.3.2 Delta Seconds 3.4 字符集 3.4.1丢失的字符集(Missing Charset) 3.5 内容编码(Content Codings) 3.6 传输编码 (Transfer Codings) 3.6.1块传输编码(Chunked Transfer Coding) 3.7 媒体类型(Media Type) 3.7.1规范化和文本缺省 (Canonicalization and Text Defaults) 3.7.2多部分类型(Multipart type) 3.8 产品标记 (product Tokens) 3.9 质量值(Quality Values) 3.10 语言标签 (Language Tags) 3.11 实体标签 (Entity Tags) 3.12 范围单位(Range Units) 4 HTTP消息 4.1 消息类型(Message Types) 4.2 消息头 (Message Headers) 4.3 消息主体 (Message Body) 4.4 消息的长度(Message Length) 4.5 常用头域(General Header Fields) 5 请求(Request) 5.1 请求行 (Request-Line) 5.1.1方法 (Method) 5.1.2请求URL(Request-URI) 5.2请求资源 (The Resource Identified by a Request) 5.3请求报头域 (Request Header Fields) 6 响应 (Response) 6.1 状态行 (Status-Line) 6.1.1状态码与原因短语 (Status Code and Reason Phrase) 7 实体(Entity) 7.1 实体报文域(Entity Header Fields) 7.2 实体主体(Entity Body) 7.2.1类型(Type) 7.2.2实体主体长度(Entity Length) 8 连接 8.1 持续连接(Persistent Connection)。 8.1.1目的 8.1.2总体操作 8.1.2.1 协商(Negotiation) 8.1.2.2 流水线(pilelining) 8.1.3代理服务器 (Proxy Servers) 8.1.4实际的考虑 (Practical Considerations) 8.2 消息传送要求(Message Transmission Requirements) 8.2.1持续连接与流量控制 (Persistent Connections and Flow Control) 8.2.2监视连接中出错状态的消息 8.2.3 100状态码的用途 8.2.4服务器过早关闭连接时客户端的行为 9 方法定义(Method Definitions) 9.1 安全和等幂(Idempotent)方法 9.1.1安全方法(Safe Methods) 9.1.2等幂方法(Idempotent Mehtods) 9.2 OPTIONS(选项) 9.3 GET 9.4 HEAD 9.5 POST 9.6 PUT 9.7 DELETE(删除) 9.8 TRACE 9.9 CONNECT(连接) 10.状态码定义 10.1 通知的 1xx 10.1.1 100 继续 (Continue) 10.1.2 101切换协议 (Switching Protocols) 10.2 成功 2xx 10.2.1 200 OK 10.2.2 201 已创建(Created) 10.2.3 202 接受(Accepted) 10.2.4 203 非权威信息(Non-Authoritative information) 10.2.5 204 无内容 (No Content) 10.2.6 205 重置内容(Reset Content) 10.2.7 206 部分内容(Partial Content) 10.3 重新定向 3xx. 10.3.1 300 多个选择.(Multiple Choices) 10.3.2 301 永久移动 (Moved Permanently) 10.3.3 302 发现(Found) 10.3.4 303 见其他(See Other) 10.3.5 304 没有被改变(Not Modified) 10.3.6 305 使用代理服务器 (User Proxy) 10.3.7 306没有使用的(unused) 10.3.8 307临时重发(Temporary Redirect) 10.4 客户错误 4xx 10.4.1 400 坏请求(Bad Request) 10.4.2 401 未授权的 (Unauthorized) 10.4.3 402 必需的支付 (Payment Required) 10.4.4 403 禁用 (Forbidden) 10.4.5 404 没有找到(Not Found) 10.4.6 405 不被允许的方法(Method Not Allowed) 10.4.7 406 不接受的 (Not Acceptable) 10.4.8 407 代理服务器授权所需(Proxy Authentication Required) 10.4.9 408 请求超时(Request Timeout) 10.4.10 409 冲突 (Confilict) 10.4.11 410 不存在(gone) 10.4.12 411 必需的长度 (Length Required) 10.4.13 412 先决条件失败 (Precondition Failed) 10.4.14 413 请求实体太大 10.4.15 414 请求URI太长(Request-URI Too Long) 10.4.16 415 不被支持的媒体类型(Unsupported Media Type) 10.4.17 416 请求范围不满足 (Requested Range Not Satisfiable) 10.4.18 417 期望失败 10.5 服务器错误 5xx (Server Error) 10.5.1 500 服务器内部错误 (Internal Server Error) 10.5.2 501 不能实现 (Not Implemented) 10.5.3 502 坏网关 (Bad Gateway) 10.5.4 503 难以获得的服务.(Service Unavailable) 10.5.5 504 网关超时(Gateway Timeout) 10.5.6 505 HTTP版本不支持 (HTTP version Not Supported) 11.入口验证(Access Authentication) 12.内容协商 (Content Negotiation) 12.1 服务器驱动协商(Server-driven Negotiation) 12.2 代理驱动协商 (Agent-driven Negotiation) 12.3 透明协商(Transparent Negotiation) 13 HTTP中的缓存 13.1.1缓存正确性(Cache Correctness) 13.1.2警告信息(Warnings) 13.1.3缓存控制机制 (Cache-control Mechanism) 13.1.4显示的用户代理警告(Explicit User Agent Warnings) 13.1.5规则和警告的例外情况 13.1.6由客户控制的行为(Client-controlled Behavior) 13.2 过期模型 (Expiration Model) 13.2.1 服务器指定模型(Server-Specified Expiratiion) 13.2.2 启发式过期 13.2.3 年龄(Age)计算 13.2.4 过期计算(Expiration Calculations) 13.2.5澄清过期值(Disambiguation Expiration Values) 13.2.6澄清多个响应(Disambiguating Multiple Response) 13.3 验证模型(Validation Model) 13.3.1最后修改日期 (Last-Modified Dates) 13.3.2 实体标签缓存验证器(Entity Tag Cache Validators) 13.3.3 强,弱验证器 (Weak and Strong Validators) 13.3.4 关于何时使用实体标签和最后修改时间的规则 13.3.5非验证条件(Non-validating Conditionls) 13.4 响应的可缓存性(Response Cacheability) 13.5 从缓存里构造响应 13.5.1End-to-end和Hop-by-hop头域 13.5.2不可更改的头域 (Non-modifiable Headers) 13.5.3联合头域(Combining Headers) 13.5.4联合字节范围(Combing Byte Ranges) 13.6 缓存已经协商过的响应(Caching Negotiated Responses) 13.7 共享和非共享缓存 (Shared and Non-Shared Caches) 13.8 错误和不完全的响应缓存行为 13.9 GET 和 HEAD 的副作用(Side Effects of GET and HEAD) 13.10 在更新或删除后的无效性 13.11 强制写通过( Write-Through Mandatory) 13.12 缓存替换 (Cache Replacement) 13.13 历史列表 (History Lists) 14 头域定义 14.1 Accept 14.2 Accept-Charset 14.3 Accept-Encoding 14.4 Accept-Language 14.5 Accept-Range 14.6 Age 14.7 Allow 14.8 Authorization (授权) 14.9 Cache-Control 14.9.1什么是可缓存的 14.9.2什么能被缓存保存 14.9.3对基本过期机制的改进 14.9.4缓存重验证和加载控制(Cache Revalidation and Reload Controls) 14.9.5 No-Transform缓存控制指令 14.9.6缓存控制扩展(Cache control Extendions) 14.10 Connection 14.11 Content-Encoding 14.12 Content-Language 14.13 Content-Length 14.14 Content-Location 14.15 Content-MD5 14.16 Content-Range 14.17 Content-Type 14.18 Date 14.18.1没有时钟的源服务器运作 14.19 ETag 14.20 Expect 14.21 Expires 14.22 From 14.23 Host 14.24 If-Match 14.25 If-Modified-Since 14.26 If-None-Match 14.27 If-Range 14.28 If-Unmodified-Since 14.29 Last-Modified 14.30 Location 14.31 Max-Forwards 14.32 Pragma 14.33 Proxy-Authenticate 14.34 Proxy-Authorization 14.35 Range 14.35.1字节范围 (Byte Ranges) 14.35.2范围请求(Range Retrieval Requests) 14.36 Referer 14.37 Retry-After 14.38 Server 14.39 TE 14.40 Trailer 14.41 Transfer-Encoding 14.42 Upgrade 14.43 User-Agent 14.44 Vary 14.45 Via 14.46 Warning 14.47 WWW-Authenticate 15.安全考虑 (Security Consideration) 15.1 个人信息 (Personal Information) 15.1.1服务器日志信息的滥用 (Abuse of Server Log Information) 15.1.2敏感信息的传输 (Transfer of Sensitive Inforamtion) 15.1.3 URI中敏感信息的编码(Encoding Sensitive Information in URI’s) 15.1.4连接到Accept头域的隐私问题 15.2 基于文件和路径名称的攻击 15.3 DNS欺骗 15.4 Location头域和欺骗 15.5 Content-Disposition的问题 15.6 授权证书和空闲客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值