【思维导图】internet-Http报文格式
- 格式:xmin
- 大小:3.51 KB
- 文档页数:351
HTTP协议图示详解一、概念协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
HTTP协议,即超文本传输协议(Hypertext transfer protocol)。
是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。
它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
HTTP是一个无状态的协议。
在Internet中所有的传输都是通过TCP/IP进行的。
HTTP协议作为TCP/IP模型中应用层的协议也不例外。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS 或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
如下图所示:HTTP默认的端口号为80,HTTPS的端口号为443。
浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。
HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。
比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。
二、简史它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF (Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。
其中最著名的就是RFC 2616。
RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。
HTTP报⽂(⾸部字段)HTTP报⽂请求报⽂/响应报⽂结构: 报⽂⾸部 + (可选)报⽂主体(两者通过空⾏CR + LF来划分)使⽤⾸部字段是为了给浏览器和服务器提供报⽂主体⼤⼩、所使⽤的语⾔、认证信息等内容HTTP⾸部字段重复,这种情况在规范内尚未明确,根据浏览器内部处理逻辑的⽽不同,结果可能并不⼀致。
报⽂⾸部请求⾏/状态⾏请求⾏: 请求⽅法 + 请求URI(资源/CGI通⽤⽹关接⼝) + HTTP版本状态⾏: HTTP版本 + 状态码 + 原因短语⾸部字段(请求/响应⾸部字段 + 通⽤⾸部字段 + 实体⾸部字段)其他(在HTTP协议通信交互中使⽤到的⾸部字段,不限于RFC2616中定义的47种⾸部字段。
包括Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的⾸部字段)报⽂主体HTTP传输数据可按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。
通常,报⽂主体等于实体主体。
只有当传输中进⾏编码操作时,实体主体的内容发⽣变化,才导致它和报⽂主体产⽣差异。
报⽂主体和实体主体的差异报⽂(message)是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输实体(entity)作为请求或响应的有效何在数据(补充项)被传输,其内容由实体⾸部和实体主体组成内容编码内容编码指明应⽤在实体内容上的编码格式,并保持实体信息原样压缩。
内容编码后的实体由客户端接收并负责解码内容编码的⽅式gzip(GNU zip)由⽂件压缩程序 gzip(GNU zip)⽣成的编码格式(RFC1952),采⽤ Lempel-Ziv 算法(LZ77)及 32 位循环冗余校验(CyclicRedundancy Check,通称 CRC)。
nodejs中var zlib = require('zlib')vra gunzip = zlib.createGunzip()compress(UNIX系统的标准压缩)由 UNIX ⽂件压缩程序 compress ⽣成的编码格式,采⽤ Lempel-Ziv-Welch 算法(LZW)。
HTTP协议结构http协议请求报⽂和响应报⽂都是由以下4部分组成1.请求⾏2.请求头3.空⾏4.消息主体下图为http请求的报⽂结构下图为http响应报⽂结构请求⾏格式为:Method Request-URI HTTP-Version 结尾符结尾符⼀般⽤\r\n请求头通⽤报头既可以出现在请求报头,也可以出现在响应报头中Date:表⽰消息产⽣的⽇期和时间Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接Cache-Control:⽤于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独⽴的(⼀个消息的缓存指令不会影响另⼀个消息处理的缓存机制)请求报头请求报头通知服务器关于客户端求求的信息,典型的请求头有:Host:请求的主机名,允许多个域名同处⼀个IP地址,即虚拟主机User-Agent:发送请求的浏览器类型、操作系统等信息Accept:客户端可识别的内容类型列表,⽤于指定客户端接收那些类型的信息Accept-Encoding:客户端可识别的数据编码Accept-Language:表⽰浏览器所⽀持的语⾔类型Connection:允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表⽰保持连接。
Transfer-Encoding:告知接收端为了保证报⽂的可靠传输,对报⽂采⽤了什么编码⽅式。
响应报头⽤于服务器传递⾃⾝信息的响应,常见的响应报头:Location:⽤于重定向接受者到⼀个新的位置,常⽤在更换域名的时候Server:包含可服务器⽤来处理请求的系统信息,与User-Agent请求报头是相对应的实体报头实体报头⽤来定于被传送资源的信息,既可以⽤于请求也可⽤于响应。
请求和响应消息都可以传送⼀个实体,常见的实体报头为:Content-Type:发送给接收者的实体正⽂的媒体类型Content-Lenght:实体正⽂的长度Content-Language:描述资源所⽤的⾃然语⾔,没有设置则该选项则认为实体内容将提供给所有的语⾔阅读Content-Encoding:实体报头被⽤作媒体类型的修饰符,它的值指⽰了已经被应⽤到实体正⽂的附加内容的编码,因⽽要获得Content-Type 报头域中所引⽤的媒体类型,必须采⽤相应的解码机制。
以太⽹帧格式、IP报⽂格式、TCPUDP报⽂格式1、ISO开放系统有以下⼏层:7应⽤层6表⽰层5会话层4传输层3⽹络层2数据链路层1物理层2、TCP/IP ⽹络协议栈分为应⽤层(Application)、传输层(Transport)、⽹络层(Network)和链路层(Link)四层。
通信过程中,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation),如下图所⽰不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,最后将应⽤层数据交给应⽤程序处理。
其实在链路层之下还有物理层,指的是电信号的传递⽅式,⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤等都属于物理层的概念。
3、集线器(Hub)是⼯作在物理层的⽹络设备,⽤于双绞线的连接和信号中继(将已衰减的信号再次放⼤使之传得更远)。
交换机是⼯作在链路层的⽹络设备,可以在不同的链路层⽹络之间转发数据帧(⽐如⼗兆以太⽹和百兆以太⽹之间、以太⽹和令牌环⽹之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层⾸部重新封装之后再转发。
路由器是⼯作在第三层的⽹络设备,同时兼有交换机的功能,可以在不同的链路层接⼝之间转发数据包,因此路由器需要将进来的数据包拆掉⽹络层和链路层两层⾸部并重新封装。
4、⽹络层的IP 协议是构成Internet 的基础。
IP 协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应⽤程序中提供⽀持。
传输层可选择TCP 或UDP 协议。
TCP 是⼀种⾯向连接的、可靠的协议,有点像打电话,双⽅拿起电话互通⾝份之后就建⽴了连接,然后说话就⾏了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。
http协议格式HTTP(Hypertext Transfer Protocol)是构建互联网应用的基础协议之一,它定义了客户端和服务器之间进行通信的格式和规则。
HTTP协议的主要目标是实现一种简单而灵活的方式来传输超文本,以便可以访问和传输网页、图片、视频等资源。
HTTP协议的格式主要包括请求格式和响应格式。
下面分别介绍这两种格式。
一、请求格式HTTP请求由客户端发送给服务器,用于请求对特定资源的访问。
请求格式包括请求行、请求头部和请求主体。
1. 请求行:请求行的格式为:METHOD URL HTTP/版本号其中,METHOD表示请求方法,包括常见的GET、POST、PUT、DELETE等;URL代表请求的资源的路径;HTTP/版本号指定了使用的HTTP协议的版本。
2. 请求头部:请求头部包括多行,每行由键值对组成。
常见的头部有:- Host:指定请求的服务器主机名和端口号。
- User-Agent:客户端的浏览器信息。
- Accept:客户端可以接受的数据类型。
- Content-Type:请求主体的数据类型。
3. 请求主体:请求主体是可选的,用于在POST请求中向服务器传送数据。
二、响应格式服务器接收到客户端的请求后,返回给客户端一个响应。
响应格式包括状态行、响应头部和响应主体。
1. 状态行:状态行的格式为:HTTP/版本号状态码状态描述其中,状态码表示服务器处理请求的结果,常见的状态码有200(成功)、404(资源未找到)、500(服务器内部错误)等。
2. 响应头部:响应头部和请求头部的格式类似,由多行键值对组成。
常见的头部有:- Content-Type:响应主体的数据类型。
- Content-Length:响应主体的长度。
- Set-Cookie:设置响应的Cookie。
3. 响应主体:响应主体是服务器返回给客户端的数据。
三、HTTP协议的特点1. 简单灵活:HTTP协议采用简单的文本格式,易于理解和编写。
http协议报头详解HTTP协议结构http协议请求报⽂和响应报⽂都是由以下4部分组成1.请求⾏2.请求头3.空⾏4.消息主体下图为http请求的报⽂结构下图为http响应报⽂结构请求⾏格式为:Method Request-URI HTTP-Version 结尾符结尾符⼀般⽤\r\n请求头通⽤报头既可以出现在请求报头,也可以出现在响应报头中Date:表⽰消息产⽣的⽇期和时间Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接Cache-Control:⽤于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独⽴的(⼀个消息的缓存指令不会影响另⼀个消息处理的缓存机制)请求报头请求报头通知服务器关于客户端求求的信息,典型的请求头有:Host:请求的主机名,允许多个域名同处⼀个IP地址,即虚拟主机User-Agent:发送请求的浏览器类型、操作系统等信息Accept:客户端可识别的内容类型列表,⽤于指定客户端接收那些类型的信息Accept-Encoding:客户端可识别的数据编码Accept-Language:表⽰浏览器所⽀持的语⾔类型Connection:允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表⽰保持连接。
Transfer-Encoding:告知接收端为了保证报⽂的可靠传输,对报⽂采⽤了什么编码⽅式。
响应报头⽤于服务器传递⾃⾝信息的响应,常见的响应报头:Location:⽤于重定向接受者到⼀个新的位置,常⽤在更换域名的时候Server:包含可服务器⽤来处理请求的系统信息,与User-Agent请求报头是相对应的实体报头实体报头⽤来定于被传送资源的信息,既可以⽤于请求也可⽤于响应。
请求和响应消息都可以传送⼀个实体,常见的实体报头为:Content-Type:发送给接收者的实体正⽂的媒体类型Content-Lenght:实体正⽂的长度Content-Language:描述资源所⽤的⾃然语⾔,没有设置则该选项则认为实体内容将提供给所有的语⾔阅读Content-Encoding:实体报头被⽤作媒体类型的修饰符,它的值指⽰了已经被应⽤到实体正⽂的附加内容的编码,因⽽要获得Content-Type报头域中所引⽤的媒体类型,必须采⽤相应的解码机制。
http请求报⽂包含三个部分(请求⾏+请求头+请求体)http请求报⽂包含三个部分(请求⾏ + 请求头 + 请求体)⼀、请求⾏请求⾏包含三个内容: method + request-URI + http-version请求⾏例如:GET /icwork/? Search = product HTTP/1.11.1 请求⽅法method 包含有: post , get, head,delete, put, connect, options, patch, propfind, propatch, mkcol, copy, move, lock, unlock, trace, head,具体介绍如下:请求⽅法作⽤get通过请求URI获得资源post⽤于添加新的资源,⽤于表单提交put⽤于修改某个内容delete删除某个内容connect⽤于代理进⾏传输例如SSLoptions询问可以执⾏那些⽅法patch部分⽂档更该propfind查看属性proppatch设置属性mkcol创建集合copy拷贝move移动lock加锁unlock解锁trace⽤于远程诊断服务器head类似于get,⽤于检查对象是否存在⽤于得到元数据1.2 get⽅法和post⽅法get⽅法: 是在url中说明情请求的资源,⽐如https:///con?from=self?_t=1466609839126 其中?后的数据就是请求的数据,并且连接⽤&,get⽅法也可以提交表单数据,但是提交的数据在url中,其他⼈可以通过查看历史记录中的url来获取你提交的数据,这样很不安全post⽅法 传输数据不在url中,⽽在数据段中出现,并且请求头多了Content-Type 和 Content-Length,post提交表单数据的时候⽐get⽅法更安全1.3 post⽅法提交表单和get⽅法提交表单相⽐较1. get明⽂传输,信息附加在url上⾯,get明⽂传输,post更加安全2. get传输有⼤⼩限制,应该是3k,post需要制定传输类型3. get多⽤于获取数据,根据get变量的不同调⽤不同的数据,post多⽤于提交数据,提交⽤户输⼊的数据1.4 get⽅法和post⽅法的区别:1. Get是向服务器发索取数据的⼀种请求,⽽Post是向服务器提交数据的⼀种请求2. Get是获取信息,⽽不是修改信息,类似数据库查询功能⼀样,数据不会被修改3. Get请求的参数会跟在url后进⾏传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表⽰的ASCII,如果数据是英⽂字母/数字,原样发送,如果是空格,转换为+,如果是中⽂/其他字符,则直接把字符串⽤BASE64加密。
HTTP协议格式详解HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议。
它是Web通信的基础,通过在客户端和服务器之间传递请求和响应来实现数据交换。
本文将详细介绍HTTP协议的格式,包括请求消息和响应消息的结构以及各个字段的含义。
一、请求消息格式HTTP请求消息由三个部分组成:请求行、请求头和请求体。
1. 请求行请求行包含了请求的方法、URI和HTTP版本。
格式如下:```<方法> <URI> HTTP/<版本>```常见的HTTP方法有GET、POST、PUT、DELETE等,URI表示请求的资源路径,版本表示HTTP协议的版本号。
2. 请求头请求头包含了请求的各种信息,以键值对的形式表示。
常见的请求头字段有:- Host:表示请求的主机名。
- User-Agent:表示客户端的用户代理。
- Accept:表示客户端能够接受的响应内容类型。
- Content-Type:表示请求体的内容类型。
- Cookie:表示客户端的Cookie信息。
- Authorization:表示客户端的身份验证信息。
请求头字段可以根据具体需求进行添加和修改,以满足请求的要求。
3. 请求体请求体是可选的,用于传递请求的数据。
常见的请求体格式有:- application/x-www-form-urlencoded:用于提交表单数据。
- multipart/form-data:用于上传文件。
- application/json:用于提交JSON格式的数据。
二、响应消息格式HTTP响应消息也由三个部分组成:状态行、响应头和响应体。
1. 状态行状态行包含了响应的HTTP版本、状态码和状态描述。
格式如下:```HTTP/<版本> <状态码> <状态描述>```常见的状态码有200表示成功,404表示资源未找到,500表示服务器内部错误等。
1.协议简介和应用1.1协议介绍HTTP(Hypertext Transfer Protocol, 超文本传输协议)是目前最常用的应用层协议之一,这里只对协议做一个简单的介绍。
HTTP自1990 年以来就被全球信息网采用为基础通讯协议,它是一种应用层的通讯协议,特性是轻便、快速,特别适合如Web 这种分布式、合作式的超媒体信息系统。
HTTP 虽早自1990 年起就已被普遍使用,但过去许多年并无统一规范,此项不明确的规范后来通称为HTTP/0.9。
直到1996 年6 月一份仅供参考的文件才由Internet Society 的HTTP Working Group 出版,称为HTTP/1.0。
HTTP/1.0 传输格式就像大部分的网络通讯协议,HTTP 使用C/S模式。
但是,HTTP/1.0没有充分考虑到分层代理,高速缓存的作用以及对稳定连接和虚拟主机的需求。
并且随着不完善的进程应用的激增,HTTP/1.0迫切需要一个新的版本,以便使两个通信应用程序能够确定彼此的真实性能。
这里规定的协议叫做“HTTP/1.1”,这个协议与HTTP/1.0相比,要求更为严格,以确保各项功能得到可靠实现。
1.2协议常见的应用环境在我们日常生活中最常见的应用环境就是上网浏览网页,很多上班族到办公室的第一件事就是打开电脑,而开机后的第一件事就是打开IE、Firefox、Myie、GreenBrowser、Opera等浏览器时,做的第一件事就是浏览一下例如, 的新闻,而这种简单的应用操作,完成的交互过程就是一个典型的HTTP协议的应用过程。
1.2.1正常连接的应用环境基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
如图1HTTP_图1显而易见有如下4个交互的过程:1.2.1.1建立连接连接的建立是通过申请套接字(Socket)实现的。
客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。
TCP/IP协议族IP/TCPTelnet和R login、FTP以及SMTPIP/UDPDNS 、TFTP、BOOTP、SNMPICMP是IP协议的附属协议、IGMP是Internet组管理协议ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换I P层和网络接口层使用的地址。
1、以太帧类型以太帧有很多种类型。
不同类型的帧具有不同的格式和MTU值。
但在同种物理媒体上都可同时存在。
▪标签协议识别符(Tag Protocal Identifier, TPID): 一组16位元的域其数值被设定在0x8100以用来辨别某个IEEE 802.1Q的帧为已被标签的,而这个域所被标定位置与乙太形式/长度在未标签帧的域相同,这是为了用来区别未标签的帧。
▪优先权代码点(Priority Code Point, PCP): 以一组3位元的域当作IEEE 802.1p 优先权的参考,从0(最低)到7(最高),用来对资料流(音讯、影像、档案等等)作传输的优先级。
▪标准格式指示(Canonical Format Indicator, CFI): 1位元的域。
若是这个域的值为1,则MAC地指则为非标准格式;若为0,则为标准格式;在乙太交换器中他通常默认为0。
在乙太和令牌环中,CFI用来做为两者的相容。
若帧在乙太端中接收资料则CFI的值须设为1,且这个端口不能与未标签的其他端口桥接。
▪虚拟局域网识别符(VLAN Identifier, VID): 12位元的域,用来具体指出帧是属于哪个特定VLAN。
值为0时,表示帧不属于任何一个VLAN;此时,802.1Q标签代表优先权。
16位元的值0x000和0xFFF为保留值,其他的值都可用来做为共4094个VLAN的识别符。
在桥接器上,VLAN1在管理上做为保留值。
这个12位元的域可分为两个6位元的域以延伸目的(Destination)与源(Source)之48位元地址,18位元的三重标记(Triple-Tagging)可和原本的48位元相加成为66位元的地址。
HTTP协议格式分析HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,浏览器与Web服务器之间所遵循的协议就是HTTP,关于HTTP协议的详细内容请参考RFC2616。
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。
服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
HTTP协议消息包括Client向Server的请求消息和Server向Client的响应消息。
协议消息由起始行,头域和可选的消息体组成。
HTTP/1.1是Internet现行的标准协议,这里都以HTTP/1.1为基础介绍。
请求消息的第一行为下面的格式:Method Request-URI HTTP-Version\r\nMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、Delete、TRACE。
方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。
GET方法取回由Request-URI标识的信息。
HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。
POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单。
Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
响应消息的第一行为下面的格式:HTTP-Version Status-Code Reason-Phrase\r\nHTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。