作者:知乎用户
链接:https://www.zhihu.com/question/42696895/answer/109035792
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最近研究了HTTP协议,所以在这里回答下这个问题,首先回答题主的问题,请求头有什么作用?我觉得请求头能反映给服务端以下信息:

1、请求类型
我们常见的请求类型有Get和Post两种,而这个信息在HTTP请求报文的第一行即请求行中就可以得到。

2、请求地址
请求地址告诉服务端当前请求来自哪里,例如"/"表示的是服务器根目录,对一个静态网站而言,如果存在index.html则它指向该网页;对一个动态网站而已,如果存在index.php则它指向该网页。

3、请求参数
客户端和服务器的通信最终是要落实到具体数据的传递上来的,所以通过请求报文我们能够获得客户端传递的参数并对其进行处理,通常Get类型参数在请求行、而Post类型参数在消息体中。

4、请求约束
如果说1、2、3是通信核心要素,那么接下来这些我们可以称其为细节要素。如题主所言,在客户端发起请求以后,到底服务端该以什么样的形式来返回给客户端?这部分内容定义在请求头部中,具体可以看下面的报文实例。

————————————————————
下面给出一段请求报文:

GET /?num1=23&num2=12 HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
Accept-Encoding: gzip, deflate
Host: localhost:4040
Connection: Keep-Alive
Cookie: _ga=GA1.1.1181222800.1463541781

在这段报文中,它可以分为三部分,第一部分,请求行即第一行,在这里我们获得请求类型、请求参数、请求地址三个信息。

第二部分,我们称为请求头部,这里定义了如Accept、AccepLanguage等字段,这是我们这里所说的请求约束。

第三部分,消息体,它是一个可选的内容,和第二部分间有一个空行,当采用Post类型请求时这里将记录客户端传递的参数。

我觉得这样应该可以解答题主的问题了,关于头部字段具体表示什么含义,这些可以通过搜索引擎自己来了解,因为参数非常多啦,最后请允许我安利我最近写的关于HTTP的博客~\(≧▽≦)/~

http://qinyuanpei.com/2016/06/11/make-a-http-server-with-csharp-03.html

总而言之,这是一个客户端和服务端进行沟通的问题,双方按照各自的要求符合规律地去做好事情是我们期望的结果,可如果双方有一方想要任性你能有什么办法啊……

http 请求头部解析的更多相关文章

  1. 重大漏洞!PHP multipart/form-data头部解析远程拒绝服务漏洞

    "有些人看不懂,简单比喻来说吧:目前刚出的任何安全防护都不会拦,网站类专属漏洞 畸形数据包,2KB随机数据包,2M网速打死各种网站,cdn通挂!"PHP multipart/for ...

  2. 从零开始一个http服务器(二)-请求request解析

    从零开始一个http服务器 (二) 代码地址 : https://github.com/flamedancer/cserver git checkout step2 解析http request 观察 ...

  3. WebService如何封装XML请求 以及解析接口返回的XML

    原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...

  4. PLAY2.6-SCALA(四) 请求体解析器

    一个http请求是一个请求头后面跟着一个请求体,头部信息比较短,可以安全的缓存在内存中,在Play中头部信息使用RequestHeader类进行建模.请求体的内容可能较大,使用流stream的形式进行 ...

  5. 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  6. 使用HttpClient来异步发送POST请求并解析GZIP回应

    .NET 4.5(C#): 使用HttpClient来异步发送POST请求并解析GZIP回应 在新的C# 5.0和.NET 4.5环境下,微软为C#加入了async/await,同时还加入新的Syst ...

  7. body-parser Node.js(Express) HTTP请求体解析中间件

    body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...

  8. SpringBoot系列教程web篇之Post请求参数解析姿势汇总

    作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为<190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总>之后的第二篇,对 ...

  9. SpringBoot系列教程web篇之Get请求参数解析姿势汇总

    一般在开发web应用的时候,如果提供http接口,最常见的http请求方式为GET/POST,我们知道这两种请求方式的一个显著区别是GET请求的参数在url中,而post请求可以不在url中:那么一个 ...

随机推荐

  1. 机器学习 之k-means和DBSCAN的区别

    目录 1.定义和区别(优缺点对比) 2.kmeans原理 3.DBSCAN原理 1.定义和区别(优缺点对比) 聚类分为:基于划分.层次.密度.图形和模型五大类: 均值聚类k-means是基于划分的聚类 ...

  2. 谈一谈Vector类

    一.关于Vector类的注意事项 1.从 Java 2 平台 v1.2 开始,vector类改进为实现 List 接口,成为 Java Collections Framework 的成员:所以vect ...

  3. 【CSS】【1】让DIV中的文字换行显示

    <div style="white-space:normal;word-break:break-all;word-wrap:break-word;">data</ ...

  4. 使用spring-cloud-starter-bus-amqp做微服务配置刷广播,config-client配置 未刷新的 问题

    在需要配置刷新的(类或方法)上 加上 @RefreshScope 扩展:spring cloud:config-server中@RefreshScope的"陷阱"

  5. py-faster R-CNN 用于训练自己的数据(1)

    官方给出的faster R-CNN的源码python版:https://github.com/rbgirshick/py-faster-rcnn 先来分析一下 整个文件,根目录下的文件 caffe-f ...

  6. DBCC - Undocumented commands

    These commands may affect system performance and/or force table-level locks.There is no guarantee th ...

  7. Units about ASM

    1.ASM Striping and Mirroring:ASM supports two levels of striping: fine striping and coarse striping. ...

  8. Qt 之 去除窗口部件被选中后的焦点虚线框

    转自: https://blog.csdn.net/goforwardtostep/article/details/53420529 https://blog.csdn.net/caoshangpa/ ...

  9. 常用的flex知识 ,比起float position 好用不少

      flex布局具有便捷.灵活的特点,熟练的运用flex布局能解决大部分布局问题,这里对一些常用布局场景做一些总结. web页面布局(topbar + main + footbar) 示例代码   要 ...

  10. JQuery操作input

    // 不可编辑 $("#id").attr("disabled","disabled"); $("#id").remov ...