下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例

HTTP 基本架构

下面我们用一张简单的流程图来展示 HTTP 协议基本架构,以便大家先有个基本的了解

80dccfc23920e0954fdf30605314fcc9.png
Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识别的响应的服务,常见的有 apache、nginx、IIS 等等 web 服务器

浓缩就是精华,看下最简洁的 HTTP 交互图:

534453b28efd922d18bf1e3676ab10f4.png

HTTP 报文结构

请求报文:HTTP 请求报文由请求行、请求头、空行和请求内容 4 个部分构成。如下图所示:

cdf10d2895989e05f7279a2fa79fd4b1.png

下面对上图进行简单的分析:请求行:由请求方法字段、URL 字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。请求头:请求头由 key/value 对组成,每行为一对,key 和 value 之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。

典型的请求头有:

  • User-Agent:生成请求的浏览器类型
  • Accept:客户端可识别的响应内容类型列表;星号* 用于按范围将类型分组。*/*表示可接受全部类型,type/*表示可接受 type 类型的所有子类型。
  • Accept-Language: 客户端可接受的自然语言
  • Accept-Encoding: 客户端可接受的编码压缩格式
  • Accept-Charset: 可接受的字符集
  • Host: 请求的主机名,允许多个域名绑定同一 IP 地址
  • connection:连接方式(close 或 keeplive)
  • Cookie: 存储在客户端的扩展字段

空行:最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。

请求内容:请求内容主要用于 POST 请求,与 POST 请求方法配套的请求头一般有 Content-Type(标识请求内容的类型)和 Content-Length(标识请求内容的长度)

  • 响应报文:HTTP 响应报文由状态行、响应头、空行和响应内容 4 个部分构成。如下图所示:
40ffa9104045377823296ae35d4b53cf.png

下面对响应报文格式进行简要的分析说明:状态行:由 HTTP 协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。状态码:由 3 位数字组成,第一位标识响应的类型,常用的 5 大类状态码如下:

  • 1xx:表示服务器已接收了客户端的请求,客户端可以继续发送请求
  • 2xx:表示服务器已成功接收到请求并进行处理
  • 3xx:表示服务器要求客户端重定向
  • 4xx:表示客户端的请求有==非法内容==
  • 5xx:标识服务器未能正常处理客户端的请求而出现意外错误

常见状态码说明:

  • 200 OK: 表示客户端请求成功
  • 400 Bad Request: 表示客户端请求有语法错误,不能被服务器端解析
  • 401 Unauthonzed: 表示请求未经授权,该状态码必须与WWW-Authenticate 报文头一起使用
  • 404 Not Found:请求的资源不存在,例如输入了错误的 url
  • 500 Internal Server Error: 表示服务器发生了不可预期的错误,导致无法完成客户端的请求
  • 503 Service Unavailable:表示服务器当前不能处理客户端的请求,在一段时间后服务器可能恢复正常响应头

一般情况下,响应头会包含以下,甚至更多的信息。

  • Location:服务器返回给客户端,用于重定向到新的位置
  • Server: 包含服务器用来处理请求的软件信息及版本信息Vary:标识不可缓存的请求头列表
  • Connection: 连接方式。

对于==请求端==来讲:close 是告诉服务端,断开连接,不用等待后续的求请了。keeplive 则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。对于==响应端==来讲:close 表示连接已经关闭。keeplive 则表示连接保持中,可以继续处理后续请求。Keep-Alive 表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间(秒),例如 300 秒,应该这样写 Keep-Alive: 300

空行:最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。响应内容:服务端返回给请求端的文本信息。

HTTP 报文示例

在这里我们在 Firefox 下用 firebug 随意抓取一个 HTTP 包和上文的报文结构做下一一对应关系图,以便大家了解实际的包和标准报文结构的对应关系。

9b22c3cc123b529ab6322126bd35b728.png

总结
对于 HTTP 协议的交互过程这里就不再进行说明了,大家可以搜索下相关的资料进行学习,上述的内容请务必熟练掌握、深刻了解。更详细的内容推荐大家学习 RFC 2616(http 协议 1.1 版本,有中文版本)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件名为空linux,文件系统:隐匿在Linux背后的机制

原标题:文件系统:隐匿在Linux背后的机制在 Linux 中,最直观、最可见的部分就是 文件系统(file system) 。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于…

xshell怎么让程序后台运行_使程序在Linux下后台运行

我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断…

docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)

为什么要使用 Docker来部署 Elasticsearch 和 Kibana 呢,传统使用软件在操作系统上安装和配置的方法过于繁琐,并且受一些跨平台的约束,例如Mac、Windows、Linux等,所以无论安装什么软件,通过 Docker 进行部署是最为简单…

linux 多域名访问数据库,Linux下虚拟域名的实现

目前Linux操作系统十分火爆,所以很多朋友希望了解一下Linux下虚拟域名的实现过程。下面就基于目前比较流行的RedHat来讨论一下。一、DNS服务器的设置我们知道互联网网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来…

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带,而它的作用不仅仅是用来粘东西。别看它是这么小小一块,可是作用却很多。平时我们穿的衣服,裤子难免会粘上些毛。在我们紧急出门的时候,突然发现衣服粘有毛,这时候我们的透明胶就派上用场了。用透明…

sscanf取固定长度的int_sscanf函数用法详解-阿里云开发者社区

函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源…

安卓盒子刷rec linux启动,ADB命令刷入recovery刷机

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼特点:需要手机获取Root权限,需掌握相关cmd命令和ADB命令;虽然命令不同, 但跟fastboot模式刷入方式类似 提示:①新手机未获取Root权限的在CMD命令行输入su后到手机上点击程…

python partial_Python--并行计算框架(pathos)

​应用python进行数据挖掘或计算时,往往需要遍历多种参数进行数据建模,而单次的建模或计算有时候非常耗时,这时候可以利用python的并行计算功能,加快计算速度。python能够应用并行计算的模块有多个multiprocessing、pathos等。其中…

linux mono apache2,如何利用Mono创建Apache+mono环境(2)

我决定用一种比较主流的linux系统来构建,运行Mono。一方面是因为我比较熟悉它,而另一方面的原因是我们内部的FTP服务器上已经有了一个DVD的iso格式的安装文件.没有一个下载点能下载完美的东西(注:我这里有疑问).你能猜到我选择的是什么吗? SuSE 9.2 Professional.我…

c# out关键字 vb_c# 关键字:ref 和 out

.NET Ref和Out关键字对于值类型。如果不使用ref /out则传递的只是这些值的COPY,使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作对于引用类型:如果不使用ref /out,因为传递的是…

endnote怎么改成中文版_毕业论文面对大量的参考文献标注,应该怎么办?(便捷整理的技巧和方法)...

毕业论文不同于一般的小论文,特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页,而硕士论文动辄五六十页,有的甚至七八十页,因此有些东西如果要人工的去修改,将是一件非常痛苦的事情,比如目录自动…

linux 多个cpu使用率,统计多台linux的CPU使用率

依赖于 paramiko 模块,python2 ,测试环境是在 rhel5,初学python,请大家指教;#!/usr/bin/python# -*- coding:utf8 -*-import paramikoimport refrom time import sleeplinux_info([ssoweb12,192.168.5.32],[ssoweb17,192.168.5.37…

typescript的类型描述_TypeScript类型声明书写详解

本文总结一下TypeScript类型声明的书写,很多时候写TypeScript不是问题,写类型就特别纠结,我总结下,我在使用TypeScript中遇到的问题。如果你遇到类型声明不会写的时候,多看看lodash的声明,因为lodash对数据…

怎么创建数据表的实体类和业务类_微服务项目第13天:商品分类业务的实现

今天是刘小爱自学Java的第143天。感谢你的观看,谢谢你。学习计划安排如下:商品分类业务的初步实现。数据模型的分析:数据表字段的设计,Java中对应的实体类,前端页面vue组件。业务模型的分析:请求路径是什么…

power iso linux启动盘,Power ISO Maker/ISO燃烧到磁盘工具 V3.0版

电源国际标准化组织是一个专业的工具,使国际标准化组织文件,并将其燃烧到磁盘。它可以快速地创建一个ISO文件从您的计算机,和ISO文件刻录到CD / DVD光盘。该软件还可以将你的光盘/光盘刻录到一个标准的文件,并烧毁它。你可以使用的…

js整体缩小网页_妙用JavaScript实现网页的任意缩放

现在网页上的字体是越来越小&#xff0c;别说是视力欠佳者就是好眼睛看久了也疼的难受&#xff0c;于是编写了下面这段小脚本&#xff0c;建议网页制作人能够加到网页代码的< head>中&#xff0c;以方便弱视人群放大浏览(仅适用于IE浏览器)&#xff01;代码如下&#xff…

scripts文件夹_常用Scripts整理

常用scripts整理--2020.05.13平时在进行数据处理时&#xff0c;经常会用到一些脚本文件&#xff0c;可以提高效率&#xff0c;我把自己常用到的进行整理总结&#xff0c;希望可以有所帮助1.批量修改图片名字#codingutf-8code by zzg 2020-04-07import os import re import sy…

linux vi如何输入井号,为什么我可以使用井号(#)来破坏vim用户功能命名规则

vimscript帮助文件在定义用户函数时说明&#xff1a;The function name must start with an uppercase letter, to avoidconfusion with builtin functions.这是强制执行的,除了我通过查看其他代码发现的以下情况."This should not work."But it does as long as the…

揭开netty神秘面纱_Netty 源码(ChannelHandler 死磕)

疯狂创客圈 经典图书 &#xff1a; 《Netty Zookeeper Redis 高并发实战》 面试必备 面试必备 面试必备疯狂创客圈 经典图书 &#xff1a; 《SpringCloud、Nginx高并发核心编程》 大厂必备 大厂必备 大厂必备无编程不创客&#xff0c;疯狂创客圈&#xff0c;一大…

c语言链表集合求并集用字母表示,c语言实现的链表集合的并集与交集

c语言,链表,集合求并集,交集#include#includetypedefintDatatype;//定义链表的节点typedefstructLNode{Datatype data;LNode *next;}LNode,*LinkList;boolInitLink(LinkList&L) //初始化链表{L (LinkList)malloc(sizeof(LNode));if(LNULL){return false;}L->nextNULL;re…