Http协议(超文本传输协议Hyper Text transfer Protocol) 主要作用是从www服务器传输问题到本地浏览器的协议,不仅仅保证计算机正确快速的传输超文本文档,还确定传输文档中的那一部分,以及哪部分内容显示等。
HTTP协议采用的是请求相应模式,客户端向服务器发送一个请求,这里就会有个请求头,
包含:请求的方法、URL、协议文本、以及修饰符,客户信息等
通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含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相同。
请求消息
请求消息的第一行为下面的格式:
MethodSPRequest-URISPHTTP-VersionCRLFMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信
http架构
息。请求头域可能包含下列字段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。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息:
Host: download.*******.de
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/4.04[en](Win95;I;Nav)
Range: bytes=554554-
上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Referer头域
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
Range头域
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)。
User-Agent头域
User-Agent头域的内容包含发出请求的用户信息。
响应消息
响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
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.0200OK
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:bytes55******/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
HTTP-运作方式
HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成。
当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用.
实体:
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括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-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。
实现文件下载需设置的两个特殊的响应头:
1。 Content-Type :application/octet-stream(下载文件是excel则设置application/msexcel)
可以用:response.setContentType("application/msexcel;charset=UTF-8");
2.Content-Dispostion:
response.setHeader("Content-disposition", "attachment;filename=" + new String(fname.getBytes("GBK"), "ISO8859-1"));
分享到:
相关推荐
综上所述,《PowerBuilder 9.0 Web开发篇》不仅全面覆盖了PowerBuilder 9.0在Web开发方面的所有关键技术,还包括了大量实例和源代码,这些都是为了帮助读者加深理解,提高实践操作能力。书中内容深入浅出,理论结合...
3. **HTTP协议**:Web开发基于HTTP协议,理解请求方法(GET、POST等)、状态码、请求头和响应头等概念对于编写Web应用至关重要。 4. **路由与视图**:路由是将URL映射到特定处理函数的过程,视图则是处理这些请求并...
韩啸、王瑞敬、刘健南编著的《ASP.NET Web开发学习实录(附光盘)》重点围绕Web开发,结合精选教学视频,全程推演ASENET 3.5应用开发的整个过程,引导读者深刻理解和掌握以ASP.NET从事Web应用开发所需要的基本知识和...
《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》基于:Rails2,在此前版本的基础上做了大量修订。 作者简介 作者:(美国)鲁比(Sam Ruby) (美国)托马斯(Dave Thomas) (美国)汉森(David Heinemeier ...
【大华摄像头Web3.0二次开发WebPlugin详解】 大华摄像头Web3.0二次开发WebPlugin是一款专为开发者设计的工具,旨在帮助用户利用Web技术进行摄像头的高级功能定制和扩展。它允许开发者通过浏览器插件的方式,接入...
《深入体验Java_Web开发内幕—核心基础》是一本针对Java Web开发的深度解析书籍,旨在帮助读者全面理解和掌握Java Web开发的核心技术。这本书涵盖了从基础到高级的多个主题,旨在提供一个完整的Java Web开发学习路径...
Web服务是一种基于...总之,《Web服务开发学习实录》的光盘内容为读者提供了一个实践和探索Web服务开发的平台,结合源代码和视频教程,将理论知识与实际操作相结合,帮助读者深入理解Web服务的精髓,提升开发能力。
理解这些基础知识是进一步学习Web开发的前提。书中可能还会讲解Python的模块化编程,如如何使用import语句导入和使用外部模块,以及如何创建自己的模块。 接着,会深入到Web开发框架,比如流行的Django和Flask。...
这些是所有编程语言的基础,也是理解和使用C#进行Web开发的前提。 2. **.NET Framework**:了解.NET Framework的基本架构,包括CLR(Common Language Runtime)、类库、托管代码等,理解它们如何为C#提供运行时环境...
对于有志于在安防领域开发Web应用的开发者来说,这是一个不可或缺的资源。通过深入理解和熟练运用这个开发包,开发者能够创建出符合现代需求的智能监控系统,提升用户体验,同时发挥海康威视设备的全部潜力。
在Java Web开发领域,你需要理解以下几个核心知识点: 1. **Java基础**:首先,你需要掌握Java编程的基础,包括语法、类与对象、继承、接口、异常处理以及集合框架等。这是所有Java开发的基石。 2. **Servlet与JSP...
本示例"java web接口开发demo"可能是提供了一个简单的Java Web接口的实现,帮助开发者理解如何构建和使用这样的接口。 首先,让我们了解一下Servlet,它是Java Web应用的核心组件之一,用于接收HTTP请求并返回响应...
首先,我们要理解WebServices的基本概念。WebServices是一种基于标准(如SOAP、WSDL和UDDI)的应用程序接口,它们可以通过HTTP协议进行通信。这使得不同平台和语言的系统能够无缝交互,共享数据和服务。 Delphi提供...
在Web开发中,理解变量、数据类型、控制结构(如if语句、for循环、while循环)以及函数的使用是基础。 二、ASP.NET概述 ASP.NET是由微软开发的一个用于构建动态网站、Web应用程序和Web服务的平台。它提供了一套完整...
汉王手写板在Web开发中的应用主要涉及与硬件设备的交互、驱动程序的安装以及JavaScript或Web API的调用,以实现用户的手写输入功能。以下是对这些知识点的详细说明: 1. **汉王手写板驱动安装**:`HWSetUp.exe`是...
这本书旨在帮助学习者深入理解Web前端开发的核心概念和技术,通过解决实际问题来巩固理论知识。 一、HTML基础 HTML(超文本标记语言)是网页制作的基础,它定义了网页的结构。储久良第三版教材中的答案可能包括各种...
《Java Web 整合开发 完全自学手册》是一本深度探讨...通过本书提供的源代码,读者可以深入理解每个知识点的实际应用,加深对Java Web开发的理解,并提升实战能力。无论是初学者还是有经验的开发者,都能从中受益匪浅。
整个WebDynpro开发文档的排版、字体使用和图标的含义都遵循一定的规范,这有助于读者更好地理解和吸收文档内容。 通过这个官方文档,SAP的目标是帮助开发者学习和掌握如何通过ABAP语言开发WebDynpro应用程序,并在...