HTTP 系列(三)—— HTTP报文

2023-05-16

什么是 HTTP 报文

HTTP 报文是简单的格式化数据块,通俗的说,它是用于数据传输的文本字符串。
每条报文都包含一条来自客户端的请求或者一条来自服务器的响应,它们都由三个部分组成:

  • 对报文进行描述的起始行
  • 包含属性的首部
  • 包含数据的主体

HTTP 报文可以分为两类:请求报文和响应报文。 请求报文会向服务器请求一个动作,响应报文会将请求的结果返回给客户端。无论是请求报文还是响应报文,它们都由上面提到的三个部分组成,不同的是起始行。

请求报文:
方法 请求 URL 协议版本号
首部
主体

响应报文:
协议版本号 响应状态码 原因短语
首部
主体

起始行

所有的 HTTP 报文都以起始行开始,请求报文的起始行说明了要做些什么,响应报文的起始行说明发生了什么。

请求行

请求报文的起始行又称为请求行,包含了一个方法、请求URL以及协议版本号。 这个方法描述了服务器应该执行的操作,请求URL 就是定位了一个资源,协议的版本号就是告知服务器,客户端使用的是哪种协议。
方法,可以理解为一个动作,要求服务器如果处理,常用的方法如下:

  • GET,从服务器上获取一个资源,这种方法不包含主体。
  • POST,向服务器发送需要处理的数据(常见的是发送表单数据),这种方法包含主体。
  • PUT,将请求的主体部分储存在服务器上,这种方法包含主体。
  • DELETE,从服务器上删除一个资源,这种方法不包含主体。

响应行

响应报文的起始行也称为响应行,包含了协议版本号,状态码,以及处理结果的原因短语。
状态码是一个由三位数组成的数字,用于告知客户端发生了什么,结果怎样。状态码大致可以分为五类:

  • 100 - 199 表示信息提示
  • 200 - 299 表示成功
  • 300 - 399 表示重定向
  • 400 - 499 表示客户端错误
  • 500 - 599 表示服务器错误

原因短语是响应行最后一个组件,它为状态码提供了文本形式的解释,也就是说,状态码和原因短语是成对出现的,每个状态码对应着不同的原因短语,比如状态码200就对应着 OK

首部

首部和方法配合工作,共同决定了客户端和服务器能做什么。 首部大致可以分为以下五类:

  • 通用首部,请求报文和响应报文都可以使用的首部。
  • 请求首部,请求报文特有的首部,他们为服务器提供了一些额外的信息。
  • 响应首部,响应报文特有的首部。
  • 实体首部,用于应对实体主体部分的首部。
  • 扩展首部,非标准首部,可以由开发者创建。

通用首部

通用首部,就是请求报文和响应报文都可以使用的首部,常见的通用首部如下:

  • Connection —— 允许客户端和服务器指定与请求/响应连接有关的选项
  • Date —— 说明报文是什么时候创建的
  • MIME-Version —— 说明发送端使用的 MIME 版本
  • Transfer-Encoding —— 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
  • Via —— 显示了报文经过的中间节点(代理、网关)

请求首部

请求首部,就是只有请求报文能够使用的首部字段。 常见的请求首部如下:

  • Host —— 给出了接收请求的服务器的主机名和端口号
  • User-Agent —— 发起请求的应用程序名称
  • Accept —— 告知服务器能够发送哪些媒体类型
  • Accept-Language —— 告知服务器能够发送哪些语言
  • Accept-Encoding —— 告知服务器能够发送哪些编码方式
  • Authorization —— 客户端提供给服务器的验证数据
  • Cookie —— 客户端使用该字段向服务器发送一个令牌
  • Cache-Control —— 用于随报文传送缓存指示

响应首部

响应首部,只有响应报文能够使用的首部。 常见的响应首部如下:

  • Set-Cookie —— 在客户端设置一个令牌,以便对客户端进行标识

实体首部

实体首部,请求和响应报文中都有可能包含实体部分,所以这两种类型的报文都有可能出现这些首部。 常见的实体首部如下:

  • Content-Encoding —— 对主体执行的任意编码方式
  • Content-Type —— 这个主体的对象类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 系列(三)—— HTTP报文 的相关文章

  • URL 哈希在重定向之间持续存在

    由于某种原因 当发送服务器端重定向 使用 Location 标头 时 非 IE 浏览器似乎会保留 URL 哈希 如果存在 例子 a simple redirect using Response Redirect http www yahoo
  • CXF 增加连接池大小而不更改 http.maxConnections

    最近我被要求将 CXF 配置为与我们旧的 XFire 服务相同的参数 这些参数之一是Keep Alive timeout 60 max 20 然而 我做了一些研究 看来 CXF 使用 JVMHttpURLConnection引擎盖下的对象
  • 如何在 Varnish 中禁用“传输编码:分块”编码?

    Using 清漆4 https www varnish cache org content varnish cache 400 我有一组后端以有效的方式响应Content Length标题和没有Transfer Encoding heade
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • POST 之后在 PHP 中设置 Location 标头时避免 HTTP 302 响应代码

    我需要放一个201 CreatedPOST 请求的响应代码和 Location 标头 但由于某种原因我仍然收到 302 响应 这就是我所拥有的 header HTTP 1 1 201 header Location The new reso
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • iPhone - 从网络服务器获取文件的上次修改日期

    我想检查网络服务器上文件的上次修改日期 任何帮助都会很棒 谢谢 NSURLRequest request NSURLRequest alloc initWithURL aURL NSHTTPURLResponse response NSUR
  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 如何使用 python http.server 运行 CGI“hello world”

    我使用的是 Windows 7 和 Python 3 4 3 我想在浏览器中运行这个简单的 helloworld py 文件 print Content Type text html print print print print h2 H
  • 有没有办法测量 Java (Servlet) I/O 流量?

    我尝试做的是使用以下代码实现 servlet 过滤器 int up request getContentLength if HttpServletRequest request getQueryString null up Math max
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • HttpGet 401 状态代码后跟 200 状态代码

    我使用 Apachage HttpComponent 访问 Web 服务时遇到奇怪的行为 我可以访问服务器日志 当我尝试连接到服务器并执行 httpGet 命令时 我可以在日志中首先看到 401 状态 http 未经授权 然后看到 200
  • DefaultHttpClient GET 和 POST 命令 Java Android

    好的 这是我的应用程序 一个 Android 应用程序 允许我从移动应用程序 而不是从网站 将 CokeZone 代码提交到 CokeZone co uk 所以我编写了这部分代码来执行登录后命令 然后检查我是否登录后 问题是 发送 post
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • Django 响应总是用 text/html 分块无法设置内容长度

    在我的Django应用程序的views py中 我在尝试设置以下HTTP标头字段后返回一个HttpResponse对象 Create a Response Object with the content to return response
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字

随机推荐