理解HTTP消息头 1

但凡搞WEB开发的人都离不开HTTP(超文本传输协议),而要了解HTTP,除了HTML本身以外,还有一部分不可忽视的就是HTTP消息头。
做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必须的。每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的HTML代码就是HTTP的消息体,那么消息头又在哪呢?IE浏览器不让我们看到这部分,但我们可以通过截取数据包等方法看到它。
下面就来看一个简单的例子:
首先制作一个非常简单的网页,它的内容只有一行:
<html><body>hello world</body></html>
把它放到WEB服务器上,比如IIS,然后用IE浏览器请求这个页面( http://localhost:8080/simple.htm),当我们请求这个页面时,浏览器实际做了以下四项工作:
1 解析我们输入的地址,从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost
端口:8080
对象路径:/simple.htm
2 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3 使用TCP协议连接到主机的指定端口(localhost, 8080),并发送已封装好的数据包
4 等待服务器返回数据,并解析返回数据,最后显示出来
由截取到的数据包我们不难发现浏览器生成的HTTP数据包的内容如下:
GET /simple.htm HTTP/1.1<CR>
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<CR>
Accept-Language: zh-cn<CR>
Accept-Encoding: gzip, deflate<CR>
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR>
Host: localhost:8080<CR>
Connection: Keep-Alive<CR>
<CR>
为了显示清楚我把所有的回车的地方都加上了“<CR>”,注意最后还有一个空行加一个回车,这个空行正是HTTP规定的消息头和消息体的分界线,第一个空行以下的内容就是消息体,这个请求数据包是没有消息体的。
消息的第一行“GET”表示我们所使用的HTTP动作,其他可能的还有“POST”等,GET的消息没有消息体,而POST消息是有消息体的,消息体的内容就是要POST的数据。后面/simple.htm就是我们要请求的对象,之后HTTP1.1表示使用的是HTTP1.1协议。
第二行表示我们所用的浏览器能接受的Content-type,三四两行则是语言和编码信息,第五行显示出本机的相关系信息,包括浏览器类型、操作系统信息等,很多网站可以显示出你所使用的浏览器和操作系统版本,就是因为可以从这里获取到这些信息。
第六行表示我们所请求的主机和端口,第七行表示使用Keep-Alive方式,即数据传递完并不立即关闭连接。
服务器接收到这样的数据包以后会根据其内容做相应的处理,例如查找有没有“/simple.htm”这个对象,如果有,根据服务器的设置来决定如何处理,如果是HTM,则不需要什么复杂的处理,直接返回其内容即可。但在直接返回之前,还需要加上HTTP消息头。
服务器发回的完整HTTP消息如下:
HTTP/1.1 200 OK<CR>
Server: Microsoft-IIS/5.1<CR>
X-Powered-By: ASP.NET<CR>
Date: Fri, 03 Mar 2006 06:34:03 GMT<CR>
Content-Type: text/html<CR>
Accept-Ranges: bytes<CR>
Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR>
ETag: "5ca4f75b8c3ec61:9ee"<CR>
Content-Length: 37<CR>
<CR>
<html><body>hello world</body></html>
同样,我用“<CR>”来表示回车。可以看到,这个消息也是用空行切分成消息头和消息体两部分,消息体的部分正是我们前面写好的HTML代码。
消息头第一行“HTTP/1.1”也是表示所使用的协议,后面的“200 OK”是HTTP返回代码,200就表示操作成功,还有其他常见的如404表示对象未找到,500表示服务器错误,403表示不能浏览目录等等。
第二行表示这个服务器使用的WEB服务器软件,这里是IIS 5.1。第三行是ASP.Net的一个附加提示,没什么实际用处。第四行是处理此请求的时间。第五行就是所返回的消息的content-type,浏览器会根据它来决定如何处理消息体里面的内容,例如这里是text/html,那么浏览器就会启用HTML解析器来处理它,如果是image/jpeg,那么就会使用JPEG的解码器来处理。
消息头最后一行“Content-Length”表示消息体的长度,从空行以后的内容算起,以字节为单位,浏览器接收到它所指定的字节数的内容以后就会认为这个消息已经被完整接收了。
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题。knife4j 是一款基于 Swagger 的 API 文档管理工具,其默认勾选消息的功能可以让用户在请求 API 时方便地添加 HTTP 消息,以便传递一些附加信息。用户可以在 knife4j 的设置中开启或关闭这个功能。 ### 回答2: knife4j 是一款基于 Swagger 的 API 文档生成工具。它默认勾选消息是为了提高 API 文档的可读性和易用性。 HTTP 消息HTTP 请求和响应中的一部分,它包含了一些元数据,用于标识和描述请求或响应的内容。这些消息对于理解 API 的使用方式和请求要求非常重要。 在生成的 API 文档中,默认勾选消息有以下几个好处: 1. 提示用户必填的消息:在使用 API 时,某些消息是必填的,不填写可能导致请求失败或返回错误的结果。默认勾选消息可以让用户在填写请求参数时注意到必填的消息,避免出现问题。 2. 显示常用的消息信息:某些消息是常见的,用户经常需要填写相同的值。默认勾选消息可以展示这些常用消息的名称和示例值,方便用户参考和填写。 3. 提供详细的消息说明:默认勾选消息可以展示每个消息的说明,包括其作用、取值范围等信息,帮助用户了解每个消息的含义和使用方式。 总而言之,knife4j 默认勾选消息是为了在生成的 API 文档中提供清晰、详细的消息信息,帮助用户正确地使用 API,并减少因为消息问题导致的请求失败或错误结果。这样可以提高 API 的可读性和易用性,方便开发人员快速、准确地使用 API。 ### 回答3: knife4j是一款基于Swagger的API接口文档生成工具,它可以通过扫描项目中的API接口,自动生成相应的接口文档,并且提供了友好的界面来查看和调试接口。 在knife4j中,默认勾选消息是为了方便在调试接口时快速设置接口所需的消息信息。在实际的开发中,有些接口在请求时可能需要在消息中传递一些特定的信息,比如身份验证信息、授权信息以及其他自定义的消息字段。为了方便用户设置这些消息信息,knife4j在生成的接口文档页面上默认勾选了消息选项。 当我们在使用knife4j查看接口文档时,可以通过手动勾选或取消勾选消息选项来决定是否要为当前请求设置消息信息。如果勾选了消息选项,就可以在页面上看到一个表格,里面列出了常见的消息字段,用户可以根据实际情况来填写自己需要的消息信息。这样,在进行接口调试时,就可以快速设置所需的消息,方便地模拟不同的请求场景。 总之,knife4j默认勾选消息是为了提供一种方便用户设置消息信息的方式,帮助开发者更好地调试接口,同时也可以有效地减少手动编写消息代码的繁琐工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值