Http协议解析

概述

百度解释:Http协议(超文本传输协议)是一种通信协议,它允许将超文本标记语言即HTML文件从WEB服务器上传送到客户端的浏览器。它详细规定了浏览器和万维网(WWW= World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档。Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLSSSL协议层之上,这个时候,就成了我们常说的HTTPSHttp主要应用于网页与服务器之间的通信,其他的通信只要遵循Htpp协议,也可以应用。例如 QQ、迅雷等软件。

HTTP协议特点

1、 支持客户/服务器模式。支持基本认证和安全认证。

2、  简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3、  灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4、  无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。为了解决这个问题,Web程序引入了Cookie机制来维护状态。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

  从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1、 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2、  建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3、  服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4、  客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

Http消息结构

Http消息结构可以分为Request(请求)与Response(回应)两大部分.
Request 消息结构

Request消息结构分为三部分,Request Line(请求行)、Request Header(请求头)、以及Body(请求正文)。


Request Header(请求头)常见属性讲解:

1、  IF-Modified-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

2、 If-None-Match: If-None-Match ETag 一起工作,工作原理是在HTTPResponse中添加 ETag 信息。当用户再次请求该资源时,将在HTTPRequest 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和 Etag.  使用这样的机制将提高网站的性能。

3、 Cache-Control指定请求和响应遵循的缓存机制。缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程)。
Cache-Control :Public
可以被任何缓存所缓存
Cache-Control :Private 内容只缓存到私有缓存中
Cache-Control :no-cache 所有内容都不会被缓存
Cache-Control :no-store
用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
Cache-Control :max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
Cache-Control :min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
Cache-Control :max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

4、 Accept浏览器端可以接受的MIME类型。例如:Accept: text/html代表浏览器可以接受服务器返回的类型为 text/html 也就是我们常说的Html文档,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误。通配符 * 代表任意类型,例如 Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

5、 Accept-Encoding浏览器申明自己可接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzipdeflate;Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少510倍的下载时间。例如: Accept-Encoding: gzip, deflate。如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受。

6、 Accept-Language:浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5gb2312gbk等等。

7、 Accept-Charset 浏览器可接受的字符集。如果在请求消息中没有设置这个域,缺省表示任何字符集都可以接受。

8、 User-Agent告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本。

9、 Referer包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

10Connection
Connection: keep-alive:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Connection: close
代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。

11Host(发送请求时,该头域是必需的)主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

12Cookie最重要的请求头之一, cookie的值发送给HTTP服务器。

13Content-Length表示请求消息正文的长度。

14Authorization授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

15UA-PixelsUA-ColorUA-OSUA-CPU由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

16From请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

17Range可以请求实体的一个或者多个子范围。

 

 

Request请求方法定义了9种请求方法(动作)来表明Request-URI指定的资源的不同操作方式

1、 OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

2、 HEAD: 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。

3、 GET :主要用于向指定的URL(URI)请求资源(资源文件或是数据均可), 可以带参数也可以不带参数, 带参数时,参数是明文传递,你可以在浏览器的地址栏中看到参数名及参数值,GET安全性不高,所以常用于安全性要求低的场合。

4、 POST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

5、 PUT: 向指定资源位置上传其最新内容。

6、 DELETE: 请求服务器删除Request-URI所标识的资源。

7、 TRACE: 回显服务器收到的请求,主要用于测试或诊断。

8、 CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

9、 PATCH:  用来将局部修改应用于某一资源。

Response消息结构

Response消息结构类似Request的消息结构,也分为三部分,Response Line(状态行)、Respose Header(消息头)、以及Body(响应正文)。

Response Header(消息头)常见属性讲解:

1、  Allow服务器支持哪些请求方法(如GETPOST等)。

2、  Date:表示消息发送的时间,时间的描述格式由rfc822定义

3、  Expires指明应该在什么时候认为文档已经过期,从而不再缓存它,重新从服务器获取,会更新缓存。过期之前使用本地缓存。HTTP1.1的客户端和缓存会将非法的日期格式(包括0)看作已经过期。

4、  P3P用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题。

5、  Set-Cookie非常重要的header, 用于把cookie发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie

6、  ETagIf-None-Match 配合使用。

7、  Last-Modified用于指示资源的最后修改日期和时间。

8、  Content-TypeWEB服务器告诉浏览器自己响应的对象的类型和字符集。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此 HttpServletResponse 提供了一个专用的方法setContentType。可在web.xml文件中配置扩展名和MIME类型的对应关系。

9、  Content-Range用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。

10.  Content-Length:指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通byteArrayStream.writeTo(response.getOutputStream()发送内容。

11.  Content-EncodingWEB服务器表明自己使用了什么压缩方法(gzipdeflate)压缩响应中的对象。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。JavaGZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的NetscapeWindows上的IE 4IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

12.  Content-LanguageWEB服务器告诉浏览器自己响应的对象所用的自然语言。

13.  Server指明HTTP服务器用来处理请求的软件信息。

14.  X-Powered-By表示网站是用什么技术开发的。

15.  Location用于重定向一个新的位置,包含新的URL地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponsesendRedirect方法,该方法同时设置状态代码为302Location响应报头域常用在更换域名的时候。

16.  Refresh表示浏览器应该在多少时间之后刷新文档,以秒计。

URL解析

 URL(Uniform Resource Locator) 地址用于描述一个网络上的资源基本格式如下:

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme :指定低层使用的协议(例如:httphttpsftp)

HostHTTP服务器的IP地址或者域名。

port# :端口号。

path :访问资源的路径。

query-string:发送给http服务器的数据参数。

Anchor:锚。

例:http://127.0.0.1:8080/pub/pub_party_merchant.html?merchantName=Test#stuff

scheme  http

Host127.0.0.1

Port8080

Path/pub/pub_party_merchant.html

Query-string : merchantName=Test

Anchorstuff

状态码解析

在Response Line中包含了服务器返回给客户端的状态,以告诉客户端服务器是否产生了预期的Response。

HTTP/1.1中定义了5类状态码,状态码由三位数字组成,第一个数字定义了响应的类别:

1XX  提示信息 - 表示请求已被成功接收,继续处理。

2XX  成功 - 表示请求已被成功接收,理解,接受。

3XX  重定向 - 要完成请求必须进行更进一步的处理。

4XX  客户端错误请求有语法错误或请求无法实现。

5XX  服务器端错误 -   服务器未能实现合法的请求。

常见状态码说明:

200 OK:表明该请求被成功地完成,所请求的资源发送回客户端。

302 Found:重定向,新的URL会在response 中的Location中返回,浏览器将会自动使用新的URL发出新的Request

304 Not Modified:代表上次的文档已经被缓存了,还可以继续使用。

400 Bad Request:客户端请求与语法错误,不能被服务器所理解。

403 Forbidden :服务器收到请求,但是拒绝提供服务。

404 Not Found:请求资源不存在(输错了URL)。

500 Internal Server Error服务器发生了不可预期的错误。

503 Server Unavailable服务器当前不能处理客户端的请求,一段时间后可能恢复正常。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP(Hypertext Transfer Protocol)是一种用于在网络中传输超文本的协议。HTTP协议解析是指对传输的HTTP数据进行分析和处理的过程。 HTTP协议是基于客户端-服务器模型的,客户端发送请求消息给服务器,服务器会返回相应的响应消息。在解析HTTP协议时,主要涉及下面几个方面: 1. 解析请求:客户端发送的请求消息包含请求行、请求和请求体三个部分。解析请求就是从收到的数据中解析出这些部分的内容,并进行相应的处理。其中,请求行包含了请求的方法(如GET、POST等)、URL和HTTP版本等信息;请求包含了附加的请求信息,如浏览器类型、文档类型等;而请求体则是可选的,一般用于传递POST请求的参数。 2. 解析响应:服务器返回的响应消息也包含响应行、响应响应体三个部分。解析响应就是从收到的数据中解析出这些部分的内容,并进行相应的处理。响应行包含了HTTP状态码(如200表示成功、404表示找不到等)和HTTP版本;响应包含了附加的响应信息,如服务器类型、返回的数据类型等;响应体则是实际返回的数据。 3. 处理状态码:HTTP协议定义了各种状态码,用于表示请求的处理结果。在解析HTTP协议时,需要根据接收到的状态码进行相应的处理,如根据200判断请求成功,根据404判断页面不存在等。 4. 保持连接:HTTP协议支持保持连接,在解析HTTP协议时,需要根据请求是否包含Connection字段来判断是否需要保持连接。如果需要保持连接,可以继续使用原来的TCP连接发送下一个请求。 总之,HTTP协议解析是通过解析请求和响应消息,处理状态码和保持连接等方式对HTTP协议的传输数据进行处理和分析的过程。这样就能够正确地读取和理解HTTP传输的数据,实现客户端与服务器的通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值