`
nigelzeng
  • 浏览: 606762 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】HTTP头部详解

阅读更多

HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

 

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

 

通用头域(即通用头)

通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

 

Cache-Control头域

Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:Public指示响应可被任何缓存区缓存;Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效;no-cache指示请求或响应消息不能缓存;no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存;max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应;min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应;max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

 

Date头域

date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

 

Pragma头域

Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

Connection表示连接状态

请求:close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。

keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。

响应:close(连接已经关闭)。

keepalive(连接保持着,在等待本次连接的后续请求)。

Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300

请求消息(请求头)

 

请求消息的第一行为下面的格式:

Method Request-URI HTTP-Version

Method 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的,GET方法取回由Request-URI标识的信息, HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体;POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。Request-URI表示请求的URL。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1。

 

请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

 

 

典型的请求消息:

GET http://download.microtool.de:80/somedata.exe

Host: download.microtool.de

Accept:*/*

Pragma: no-cache

Cache-Control: no-cache

Referer: http://download.microtool.de/

User-Agent:Mozilla/4.04[en](Win95;I;Nav)

Range:bytes=554554-

上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回;Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。Accept-Charset: 浏览器申明自己接收的字符集。Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给WEB服务器。User-Agent头域的内容包含发出请求的用户信息。Referer 头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址; Range头域可以请求实体的一个或者多个子范围。例如

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)

 

响应消息(响应头)

响应消息的第一行为下面的格式:

HTTP-Version Status-Code Reason-Phrase

HTTP -Version表示支持的HTTP版本,例如为HTTP/1.1。Status- Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自 动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

1xx:信息响应类,表示接收到请求并且继续处理

2xx:处理成功响应类,表示动作被成功接收、理解和接受

3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

5xx:服务端错误,服务器不能正确执行一个正确的请求

响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头 域,一般将会作为实体头域处理。

 

典型的响应消息:

HTTP/1.0 200 OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:"a030f020ac7c01:1e9f"

Content-length:39725426

Content-range:bytes554554-40279979/40279980

上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

Location响应头用于重定向接收者到一个新URI地址。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序

实体消息(实体头和实体)

请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。

实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。

 

Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型,表示后面的文档属于什么MIME类型。Content-Length表示实际传送的字节数。Allow 实体头至服务器支持哪些请求方法(如GET、POST等)。Content-Range表示传送的范围,用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

例 如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求)。Content-Encoding 指文档的编码(Encode)方法。

实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定 义,它的长度由Content-Length或Content-Range定义。

 

附录:

HTTP头部详解

1、 Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。

2、 Accept-Charset: 浏览器申明自己接收的字符集

Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)

Accept-Language::浏览器申明自己接收的语言

语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。

3、 Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。

4、 Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。

5、 Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给WEB服务器。

6、 Cache-Control:请求:no-cache(不要缓存的实体,要求现在从WEB服务器去取)

max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)

max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值)

min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象)

响应:public(可以用 Cached 内容回应任何用户)

private(只能用缓存内容回应先前请求该内容的那个用户)

no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)

max-age:(本响应包含的对象的过期时间)

ALL: no-store(不允许缓存)

7、 Connection:请求:close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。

keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。

响应:close(连接已经关闭)。

keepalive(连接保持着,在等待本次连接的后续请求)。

Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300

8、 Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。例如:Content-Encoding:gzip

9、Content-Language:WEB 服务器告诉浏览器自己响应的对象的语言。

10、Content-Length: WEB 服务器告诉浏览器自己响应的对象的长度。例如:Content-Length: 26012

11、Content-Range: WEB 服务器表明该响应包含的部分对象为整个对象的哪个部分。例如:Content-Range: bytes 21010-47021/47022

12、Content-Type: WEB 服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml

13、 ETag:就是一个对象(比如URL)的标志值,就一个对象而言,比如一个 html 文件,如果被修改了,其 Etag 也会别修改,所以ETag 的作用跟 Last-Modified 的作用差不多,主要供 WEB 服务器判断一个对象是否改变了。比如前一次请求某个 html 文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得的 ETag 值发送给WEB 服务器,然后 WEB 服务器会把这个 ETag 跟该文件的当前 ETag 进行对比,然后就知道这个文件有没有改变了。

14、 Expired:WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部。例如:Expires:Sat, 23 May 2009 10:02:12 GMT

15、 Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。例如:Host:rss.sina.com.cn

16、 If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。

17、If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。

18、 If-Modified-Since:如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。例如:If-Modified-Since:Thu, 10 Apr 2008 09:14:42 GMT

19、If-Unmodified-Since:如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)。

20、 If-Range:浏览器告诉 WEB 服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我。浏览器通过发送请求对象的 ETag 或者 自己所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。总是跟 Range 头部一起使用。

21、 Last-Modified:WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMT

22、 Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。例如:Location:http://i0.sinaimg.cn/dy/deco/2008/0528/sinahome_0803_ws_005_text_0.gif

23、 Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。例如:Pragma:no-cache

24、 Proxy-Authenticate: 代理服务器响应浏览器,要求其提供代理身份验证信息。Proxy-Authorization:浏览器响应代理服务器的身份验证请求,提供自己的身份信息。

25、 Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546-

26、 Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL。例如:Referer:http://www.sina.com/

27、 Server: WEB 服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)

28、 User-Agent: 浏览器表明自己的身份(是哪种浏览器)。例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2、0、0、14

29、 Transfer-Encoding: WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。例如:Transfer-Encoding: chunked

30、 Vary: WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求。假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:Content-Encoding: gzip; Vary: Content-Encoding那么 Cache 服务器会分析后续请求消息的头部,检查其 Accept-Encoding,是否跟先前响应的 Vary 头部值一致,即是否使用相同的内容编码方法,这样就可以防止 Cache 服务器用自己 Cache 里面压缩后的实体响应给不具备解压能力的浏览器。例如:Vary:Accept-Encoding

31、 Via: 列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via 头部,并把自己的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。例如:Via:1.0 236.D0707195.sina.com.cn:80 (squid/2.6.STABLE13)

===============================================================================

HTTP 请求消息头部实例:

Host:rss.sina.com.cn

User-Agent:Mozilla/5、0 (Windows; U; Windows NT 5、1; zh-CN; rv:1、8、1、14) Gecko/20080404 Firefox/2、0、0、14

Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0、9,text/plain;q=0、8,image/png,*/*;q=0、5

Accept-Language:zh-cn,zh;q=0、5

Accept-Encoding:gzip,deflate

Accept-Charset:gb2312,utf-8;q=0、7,*;q=0、7

Keep-Alive:300

Connection:keep-alive

Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW <-- Cookie

If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT

Cache-Control:max-age=0

 

HTTP 响应消息头部实例:

Status:OK - 200 <-- 响应状态码,表示 web 服务器处理的结果。

Date:Sun, 01 Jun 2008 12:35:47 GMT

Server:Apache/2、0、61 (Unix)

Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT

Accept-Ranges:bytes

Content-Length:18616

Cache-Control:max-age=120

Expires:Sun, 01 Jun 2008 12:37:47 GMT

Content-Type:application/xml

Age:2

X-Cache:HIT from 236-41、D07071951、sina、com、cn <-- 反向代理服务器使用的 HTTP 头部

Via:1.0 236-41.D07071951.sina.com.cn:80 (squid/2.6.STABLE13)

Connection:close

 

 

 

本文转自:http://blog.chinaunix.net/uid-10540984-id-3130355.html

分享到:
评论

相关推荐

    TCP-IP详解卷1:协议 【轻量分章节阅读版】

    阅读《TCP/IP详解卷1:协议》可以深入了解这些协议的工作原理,包括它们的头部格式、报文交换过程、错误处理机制等。这有助于网络管理员、软件开发者和网络安全专家理解网络通信的本质,解决网络问题,设计和实现...

    Qt http server client 服务器客户端源代码

    【Qt HTTP 服务器客户端源代码详解】 在编程领域,Qt是一个强大的、跨平台的应用程序开发框架,它提供了丰富的API和工具,使得开发者可以方便地创建桌面、移动甚至嵌入式应用。而Qt中的HTTP服务器和客户端功能是其...

    网易云音乐加密缓存转MP3

    【标题】:“网易云音乐加密缓存转MP3”是一个基于C#开发的小型应用程序,其主要功能是解析和解密网易云音乐平台上的加密缓存文件,将其转换成常见的MP3格式,以便用户能够在不依赖网易云音乐客户端的情况下播放这些...

    http简易服务器 java 源码

    4. 重定向:在HTTP响应中,通过设置状态码(如301永久重定向,302临时重定向)和Location头部字段,服务器可以告知客户端需要访问的新的URL。 5. MIME类型:MIME(Multipurpose Internet Mail Extensions)类型是一...

    SpringMvc注解详解

    【SpringMvc注解详解】 SpringMvc 是 Spring 框架的一部分,主要负责处理 Web 请求。在 SpringMVC 中,注解扮演着至关重要的角色,它们简化了代码并减少了配置。以下是一些常用的 SpringMVC 注解及其详细解释: 1....

    1_第二章两种参考模型(1).docx

    【OSI参考模型详解】 OSI(Open System Interconnection,开放系统互连)参考模型是由国际标准化组织(ISO)提出的,旨在解决不同厂商设备间的互操作性问题。它将通信过程划分为7个层次,分别为: 1. 应用层:这是...

    BASE64简单代码

    在实际应用中,Hex编码常用于网络协议(如HTTP头部)和日志记录,因为它可以清晰地显示原始二进制数据,方便调试和分析。 总结起来,"BASE64简单代码"的压缩包可能包含了实现Base64、0x30和Hex编码解码功能的C++源...

    PHP Cookie的使用教程详解

    PHP中的Cookie是一种存储用户数据的方式,它通过HTTP头部信息在浏览器和服务器之间传递。本文将详细介绍如何在PHP中设置、接收、处理和删除Cookie。 1. **设置Cookie** 要设置Cookie,PHP提供了一个内置函数`...

    我的CGI框架,基于apache的

    - **NPH(No Parsing Header)**:NPH是一种特殊的CGI程序,它不依赖服务器解析HTTP头部,而是由CGI程序自己生成完整的HTTP响应头。这在实现重定向或其他需要自定义HTTP头的场景中非常有用。 【Apache基准测试工具...

    使用Domino表单构建Web页面

    【使用Domino表单构建Web页面】的知识点详解 1. **Domino表单与HTML页面的关系** - 表单是Notes应用的核心,它们定义了数据在输入和输出时的展示方式。同样,HTML页面通常用于在Web环境中提供数据展示和输入功能。...

    江苏计算机二级考试VFP(2005至2010)真题.pdf

    【知识点详解】 1. 计算机基础知识:试题中涉及了二进制、八进制和十六进制的转换,这是计算机科学的基础知识。十进制数100转换为二进制是1100100B,转换为八进制是144Q,转换为十六进制是64H。 2. 字形库:汉字的...

    FileConversionRestAPI:文件转换 REST api 是一个基于 REST 的 api,用于基本文件转换

    【文件转换 REST API 知识点详解】 在 IT 领域中,API(Application Programming Interface)是软件之间交互的桥梁,它定义了不同应用程序如何相互通信。REST(Representational State Transfer)是一种网络应用...

    非常有用的9个PHP代码片段.docx

    【知识点详解】 1. PHP文件合并函数:在提供的代码片段中,`combine_my_files` 函数用于合并多个JavaScript或CSS文件到一个文件中。这个功能有助于优化网站性能,减少HTTP请求,提高页面加载速度。它首先检查目标...

    基于ASP.NET的新闻发布系统

    【ASP.NET技术详解】 ASP.NET是由微软开发的一种服务器端Web应用程序框架,用于构建动态网站、web应用和web服务。它基于.NET Framework,提供了一种高效、安全且易于使用的环境来开发和部署网络应用。 在ASP.NET中...

    tomcat 7 8 两个版本

    【标题】:“Tomcat 7 与 Tomcat 8 两个版本详解” 【正文】: Apache Tomcat 是一个开源的Web应用服务器,主要用于部署Java Servlet和JavaServer Pages(JSP)应用程序。它作为轻量级的Java EE服务器,被广泛用于...

    TM-0175_企业网站网页源码欧美整站模板.zip

    【知识点详解】 1. **HTML**:基础的网页结构语言,定义了网页的头部、主体和尾部,以及各个元素的标签如标题、段落、链接等。 2. **CSS**:层叠样式表,用于美化HTML元素,包括颜色、字体、布局等。CSS3新增了...

    WebApplication1.rar

    【Web应用程序API详解】 在IT领域,Web API(Web Application Programming Interface)是一种广泛采用的技术,用于构建可交互的网络服务。这些服务允许不同系统之间通过HTTP协议进行数据交换,极大地促进了分布式...

Global site tag (gtag.js) - Google Analytics