- 浏览: 468434 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
一次HTTP操作称为一个事务,其工作过程可分为四步:
首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,
服务器关闭连接
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,
户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。如图所示
POST请求的过程如下图
返回结果的HTML内容如下;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
Untitled Page
</title></head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkwNjc4NTIwMWRkDGag6NJJGrAtj3MFa3ENPBczR0I=" />
</div>
<div>
<input name="TextBox1" type="text" id="TextBox1" />
<input type="submit" name="Button1" value="提交" id="Button1" />
<img src="Images/Office8.jpg" style="height: 77px; width: 99px" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwLejd/XCQLs0bLrBgKM54rGBgBsD7zy4yO4Ru56RvBO4g6F05JG" />
</div></form>
</body>
</html>
通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
HTTP Keep-Alive
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。
KeepAliveTime 值控制 TCP/IP 尝试验证空闲连接是否完好的频率。如果这段时间内没有活动,则会发送保持活动信号。如果网络工作正常,而且接收方是活动的,它就会响应。如果需要对丢失接收方敏感,换句话说,需要更快地发现丢失了接收方,请考虑减小这个值。如果长期不活动的空闲连接出现次数较多,而丢失接收方的情况出现较少,您可能会要提高该值以减少开销。缺省情况下,如果空闲连接 7200000 毫秒(2 小时)内没有活动,Windows 就发送保持活动的消息。通常,1800000 毫秒是首选值,从而一半的已关闭连接会在 30 分钟内被检测到。 KeepAliveInterval 值定义了如果未从接收方收到保持活动消息的响应,TCP/IP 重复发送保持活动信号的频率。当连续发送保持活动信号、但未收到响应的次数超出 TcpMaxDataRetransmissions 的值时,会放弃该连接。如果期望较长的响应时间,您可能需要提高该值以减少开销。如果需要减少花在验证接收方是否已丢失上的时间,请考虑减小该值或 TcpMaxDataRetransmissions 值。缺省情况下,在未收到响应而重新发送保持活动的消息之前,Windows 会等待 1000 毫秒(1 秒)。 KeepAliveTime 根据你的需要设置就行,比如10分钟,注意要转换成MS。 XXX代表这个间隔值得大小。
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表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信
息。请求头域可能包含下列字段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头域
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。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
错误代码解释
"100" : Continue
"101" : witching Protocols
"200" : OK
"201" : Created
"202" : Accepted
"203" : Non-Authoritative Information
"204" : No Content
"205" : Reset Content
"206" : Partial Content
"300" : Multiple Choices
"301" : Moved Permanently
"302" : Found
"303" : See Other
"304" : Not Modified
"305" : Use Proxy
"307" : Temporary Redirect
HTTP 400 - 请求无效
HTTP 401.1 - 未授权:登录失败
HTTP 401.2 - 未授权:服务器配置问题导致登录失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
HTTP 403 - 禁止访问
HTTP 403 - 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 - 禁止访问:禁止读访问
HTTP 403.3 - 禁止访问:禁止写访问
HTTP 403.4 - 禁止访问:要求 SSL
HTTP 403.5 - 禁止访问:要求 SSL 128
HTTP 403.6 - 禁止访问:IP 地址被拒绝
HTTP 403.7 - 禁止访问:要求客户证书
HTTP 403.8 - 禁止访问:禁止站点访问
HTTP 403.9 - 禁止访问:连接的用户过多
HTTP 403.10 - 禁止访问:配置无效
HTTP 403.11 - 禁止访问:密码更改
HTTP 403.12 - 禁止访问:映射器拒绝访问
HTTP 403.13 - 禁止访问:客户证书已被吊销
HTTP 403.15 - 禁止访问:客户访问许可过多
HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
HTTP 404.1 - 无法找到 Web 站点
HTTP 404 - 无法找到文件
HTTP 405 - 资源被禁止
HTTP 406 - 无法接受
HTTP 407 - 要求代理身份验证
HTTP 410 - 永远不可用
HTTP 412 - 先决条件失败
HTTP 414 - 请求 - URI 太长
HTTP 500 - 内部服务器错误
HTTP 500.100 - 内部服务器错误 - ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不允许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
有关错误提示的路径及信息可以在如图看到
所以客户机如果要成功访问WEB服务器,必须经过以下过程步骤
v当客户机访问网站时,服务器验证步骤
§客户机IP地址是否授权
§用户帐户和密码是否正确
§主目录是否设置了“读取”权限
§网站文件的NTFS权限
只有以上检查都通过,才可以访问网站内容
打开IIS可以看到一个网站的HTTP头部,以下是一个moss的HTTP头信息
HTTP POST和GET的区别
1、HTTP 只有POST和GET 两种命令模式;
2、 POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的;
3、POST与GET在HTTP 中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP 请求的内容里传送;
4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;
5、 GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M,而根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节;
6、SOAP是依赖于HTTP POST模式实现的;
1)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的
查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集
同时,它很不安全
2)post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将
Content-type设置为:application/x-www-form-urlencoded。
post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。
但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
3.表单提交中get和post方式的区别归纳如下几点:
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)对于表单的提交方式,在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式提交的数据只能用Request.Form来获取。
(3)一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。
GET与POST方法有以下区别:
(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
(4) 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说,GET 请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。
|
发表评论
-
中高级技术人员面试
2012-08-06 14:23 1359struts,spring,hiberate知识点。实际上对于 ... -
关联、聚合、组合的关系
2011-08-19 15:18 1356你和你的心脏之间是co ... -
深入JVM锁机制2-Lock
2011-08-19 11:04 1247分类: JVM 2011-07-28 18:15 92人 ... -
深入JVM锁机制1-synchronized
2011-08-19 11:01 1693分类: JVM 2011-07-28 ... -
CAS ABA问题
2011-08-19 10:55 4666首先要知道什么叫CAS(compare and swap):在 ... -
NIO学习系列:缓冲区内部实现机制
2011-08-17 13:55 993接上一篇NIO学习系列:核心概念及基本读写 ,本 ... -
String、StringBuffer与StringBuilder之间区别
2011-08-15 21:44 1051最近学习到StringBuffer,心中有好些疑问,搜 ... -
Java内存溢出
2011-07-13 11:25 1869内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的 ... -
Java nio 2.0 AIO
2011-07-12 21:26 13205按照《Unix网络编程》 ... -
使用Java NIO编写高性能的服务器
2011-07-12 21:16 1149从JDK 1.4开始,Java的标 ... -
如何中断一个正在运行的线程
2011-07-12 18:03 1731... -
准备问题
2011-07-12 12:06 934你觉得有什么优势 特长 捡干货说你对面试的公司有多了解 怎么看 ... -
NIO学习系列:核心概念及基本读写
2011-07-12 10:20 1125NIO学习系列:缓冲区内部实现机制 http://zh ... -
CAP原理和BASE思想
2011-07-12 10:16 1334分布式领域CAP理论,Co ... -
线程高级---读写锁
2011-07-12 10:15 2109读写锁问题也是比较常见的问题,这是因为现实中充斥着这类问题,而 ... -
Java 中的悲观锁和乐观锁的实现
2011-07-12 10:07 1595锁(locking) 业务逻辑的实现过程中,往往需要保证数 ... -
详细介绍Spring事务管理
2011-07-12 09:47 8508在学习spring事务管理时, ... -
URL与URI区别
2011-07-12 09:46 1212今天在看STRUTS配置的时候,发 ... -
spring原理
2011-07-11 15:57 1012spring原理 spr ... -
Synchronized和java.util.concurrent.locks.Lock的区别
2011-07-11 15:24 5184主要相同点:Lock能完成Synchronized所实现的 ...
相关推荐
在实验报告的内容部分,具体讨论了NFS和HTTP协议的报文分析过程以及遇到的问题。NFS报文分析中提到了NFS是基于RPC(远程过程调用)协议,而RPC又是建立在TCP协议之上的。说明了NFS服务的配置、目录的创建、NFS共享的...
针对这一背景,宋璐璐在其研究论文《基于HTTP协议报文分析的计算机网络取证研究》中提出了建立一种基于HTTP协议报文分析的计算机网络取证系统。该系统的目标是有效监管网络用户操作,保护信息安全,并通过分析电子...
报文分析软件是一种用于解析和理解通信协议报文的专业工具,它在IT行业中扮演着至关重要的角色,尤其是在网络通信、物联网(IoT)、自动化控制等领域。这些软件可以帮助工程师们深入理解数据在网络中的传输方式,排查...
HTTP2是HTTP协议的最新版本,它在性能和效率上相比HTTP1.x有了显著提升。主要改进包括多路复用、二进制分帧、头部压缩(HPACK)以及优先级控制等特性。 多路复用是HTTP2的核心特征之一,它允许多个HTTP请求和响应在...
《网络协议报文格式大全》是由华为公司出品的,旨在为IT从业者提供全面、详尽的网络协议报文格式解析的资源。这份资料以图文并茂的方式,深入浅出地阐述了各种网络通信协议的基本结构和报文格式,是理解和分析网络...
HTTP协议报文格式.doc; HTTP网页访问应用分析.doc; SWIFT报文.pdf; 基于Java的SNMP协议报文的Socket通讯原理及其实现.pdf; 把几个找到的资料都放在一块,这样就方便了!
本次实验是针对“协议报文分析”的课程实践,主要目的是通过使用抓包工具,深入了解网络协议的工作原理。实验包含了三个主要部分,分别涉及数据包的捕获与过滤、各层协议分析以及面向连接的TCP三次握手过程的详细...
通过对HTTP请求报文和响应报文的详细分析,我们可以理解HTTP协议的基本结构和工作原理。 **HTTP协议基础** HTTP(超文本传输协议)是应用层协议,用于客户端和服务器之间的通信。它基于TCP/IP协议栈,以请求/响应...
本资料集是华为公司推出的一份详尽的网络协议报文格式大全,旨在帮助读者深入理解网络协议的运行机制和报文结构,提升网络故障排查和优化的能力。这份资料涵盖了从链路层到应用层的多个层次,包括MPLS、网络层、传输...
1. **捕获并分析HTTP协议报文**:通过工具(本实验中使用的是Ethereal)捕获HTTP协议的交互报文,并对其进行分析,了解HTTP协议的报文结构及其工作流程。 2. **理解HTTP协议的工作机制**:通过对捕获的报文进行分析...
《网络协议报文格式大全...这些网络协议报文格式的理解对于网络编程、网络故障排查、网络安全分析等领域至关重要。了解和掌握这些基础知识,能够帮助我们更好地理解网络通信的本质,从而优化网络应用的性能和安全性。
网络协议是计算机网络中数据通信的基础,它们定义了不同设备之间如何交换信息。...总之,掌握网络协议报文格式对于深入理解和分析网络通信过程至关重要,这份华为出品的资料无疑是一个宝贵的教育资源。
再使用Ethereal抓取HTTP报文,学习HTTP协议请求和响应的类型,并结合课本知识对HTTP协议进行深入剖析。 在检测和分析ICMP数据报文的过程中,使用Ethereal软件捕获ICMP报文,并根据TCP/IP体系结构进行分层分析。例如...
通过学习《网络协议报文格式大全》,你可以深入理解网络通信的底层机制,这对于网络编程、网络故障排查、网络安全分析等方面都有极大的帮助。了解报文格式有助于优化网络应用性能,提升网络效率,同时也能增强你对...
在IT网络领域,报文...总的来说,这个实验提供了一个深入理解网络协议工作原理的实践平台,通过Wireshark的使用,不仅可以解析不同层次的协议报文,还能洞察网络通信背后的逻辑,这对于网络管理和安全分析至关重要。
《华为出品 史上最强网络协议报文格式大全中文图文说明》是一份极其重要的资源,它深入浅出地解析了网络通信中的各种协议报文格式,对于IT从业者,特别是网络工程师、开发者以及网络安全分析人员来说,是必备的学习...
wireshark各类数据包,AH ARP BGP CDP CHAP DNS DTP EAP HTTP ICMP IP IPV6 ISIS LCP LDP TCP UDP TELNET VLAN VTP WCCP CRRP等各类协议抓包数据。
1. **HTTP协议** **HTTP简介** HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,主要用于从Web服务器传输超文本到本地浏览器。HTTP 1.1是目前普遍使用的版本,定义在RFC 2616中。HTTP基于客户端/...
2. **HTTP/HTTPS和SOAP协议**:ONVIF主要基于HTTP/HTTPS传输,采用SOAP(Simple Object Access Protocol)作为消息交换格式。SOAP消息封装了XML数据,包含服务请求和响应,如获取设备信息、配置参数或视频流等。 3....