当前位置: 首页 > 大学排名 > 大学介绍 > http

http

2016-09-22 12:55:27 成考报名 来源:http://www.chinazhaokao.com 浏览:

导读: http(共7篇)http请求处理流程(讲的很清楚) NET平台处理HTTP请求 NET平台处理HTTP请求的过程大致如下:1、IIS得到一个请求;,。2、查询脚本映射扩展,然后把请求映射到aspnet_isapi dll文件3、代码进入工作者进程(IIS5里是aspnet_wp exe;IIS6里是w3wp exe...

欢迎来到中国招生考试网http://www.chinazhaokao.com/成考报名栏目,本文为大家带来《http》,希望能帮助到你。

http(一)
http请求处理流程(讲的很清楚)

.NET平台处理HTTP请求

.NET平台处理HTTP请求的过程大致如下:

1、IIS得到一个请求;,。

2、查询脚本映射扩展,然后把请求映射到aspnet_isapi.dll文件

3、代码进入工作者进程(IIS5里是aspnet_wp.exe;IIS6里是w3wp.exe),工作者进程也叫辅助进程;

4、 .NET运行时被加载;

5、非托管代码调用IsapiRuntime.ProcessRequest()方法;

6、每一个请求调用一个IsapiWorkerRequest;

7、使用WorkerRequest调用HttpRuntime.ProcessRequest()方法;

8、通过传递进来的WorkerRequest创建一个HttpContext对象

9、通过把上下文对象作为参数传递给HttpApplication.GetApplicationInstance(),然后调用该方法,从应用程序池中获取一个HttpApplication实例;

10、调用HttpApplication.Init(),启动管道事件序列,钩住模块和处理器;

11、调用HttpApplicaton.ProcessRequest,开始处理请求;

12、触发管道事件;

13、调用HTTP处理器和ProcessRequest方法;

14、把返回的数据输出到管道,触发处理请求后的事件。

当客户端向Web服务器请求一个页面文件时,这个HTTP请求会被inetinfo.exe进程截获(WWW服务),它判断文件后缀,如果是*.aspx、*.asmx等,就把这个请求转交给aspnet_isapi.dll,而aspnet_isapi.dll则会通过一个Http PipeLine的管道,将这个HTTP请求发送给w3wq.exe进程,当这个HTTP请求进入w3wq.exe进程之后,Asp.Net framework就会通过HttpRuntime来处理这个HTTP请求,处理完毕后将结果返回给客户端。

当一个HTTP请求被送入到HttpRuntime之后,这个HTTP请求通过HTTP管道(HttpRuntime是HTTP管道的入口)被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的HTTP请求,同时HttpApplication实例会创建一个HttpContext对象来记录HTTP请求的上下文,而后这个HTTP请求会依次进入到如下几个容器中: HttpModule --> HttpHandler Factory --> HttpHandler当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了。

如果想在中途截获一个HttpRequest并做些自己的处理,就应该在HttpRuntime运行时内部来做到这一点,确切的说时在HttpModule这个容器中做到这个的。

过程详解:

从本质上讲,Asp.Net主要是由一系列的类组成,这些类的主要目的就是将Http请求转变为对客户端的响应。HttpRuntime类是Asp.Net的一个主要入口,它有一个ProcessRequest方法,这个方法以一个 HttpWorkerRequest 类作为参数。HttpRuntime类几乎包含着关于单个Http请求的所有信息:所请求的文件、

服务器端变量、QueryString、Http头信息等等。Asp.Net 使用这些信息来加载、运行正确的文件,并且将这个请求转换到输出流中,一般来说,就是HTML页面;二般来说,也可以是张图片^_^。

对于IIS来说,它依赖于一个叫做HTTP.SYS的内置驱动程序来监听来自外部的HTTP请求。在系统启动的时候,IIS首先在HTTP.SYS中注册自己的虚拟路径(实际上相当于告诉HTTP.SYS哪些URL是可以访问的,哪些是不可以访问的。举个简单的例子:为什么你访问的文件不存在时会出现404 错误呢?就是在这一步确定的)。

服务器处理一个.htm页面和一个.aspx页面肯定是不一样的,那IIS依据什么去处理呢?――根据文件的后缀名。能够处理各种后缀名的应用程序,通常被称为 ISAPI 应用程序(Internet Server Application Program Interface互联网服务器应用程序接口),它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。

所有的.aspx文件实际上都是由aspnet_isapi.dll这个程序来处理的,当IIS把对于.aspx页面的请求提交给了aspnet_isapi.dll以后,它就不再关心如何处理这个请求了。

除了映射文件与其对应的处理程序以外,ISAPI还需要做一些其他的工作:

1. 从HTTP.SYS中获取当前的Http请求信息,并且将这些信息保存到HttpWorkerRequest 类中。

2. 在相互隔离的应用程序域AppDomain中加载HttpRuntime。

3. 调用HttpRuntimeProcessRequest方法。

接下来就是程序员编写的代码(C#)所完成的工作了,然后,IIS接收返回的数据流,并重新返还给 HTTP.SYS,最后,HTTP.SYS 再将这些数据返回给客户端浏览器。

名词解释:

IIS: Internet Information Server是一种基于Windows平台的网页服务(World Wide Web server)组件,其中包括WWW服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、发布信息、文件传输、新闻服务和邮件发送等方面。 IIS的4个核心组件:

HTTP.sys:将 HTTP 请求传送到用户模式应用程序的内核模式设备驱动程序。 WWW服务管理和监视组件:配置“万维网发布服务”(WWW服务)并管理工作进程。 工作进程:处理提交到分配给它们的Web应用程序的请求。

Inetinfo.exe:主控配置数据库和非Web服务。

MSIL:Microsoft Intermediate Language,微软中间语言。MSIL是将.Net代码转化为机器语言的一个中间过程,它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。同一段MSIL代码可以被不同的编译器实时编译并运行在不同的结构上,因此MSIL本身与机器无关,可以在装有CLR的任一计算机上运行。 CLR:Common Language Runtime,公共语言运行时。简单的理解,就是一个翻译,把.NET平台的各种语言(C#、VB、JS等)翻译为机器可以执行的语言。.NET编译器将程序代码编译成MSIL(Microsoft Intermediate Language ,微软中间语言),然后再由CLR中的JIT(Just In Time,实时)编译器去编译成机器语言来执行。CLR在功能上就如同一块虚拟的CPU,它执行MSIL代码、操作数据。CLR和真实CPU的类似之处在于它们都不直接操作内存中的变量而是使用程序变量

的临时拷贝,CLR把这些程序变量存放在堆栈上。从内存拷贝某个变量到堆栈的行为称作装载(loading),而从堆栈拷回某个变量到内存的行为则被称作存储(storing)。

HttpRuntime:配置 ASP.NET HTTP 运行时设置,这些设置确定如何处理对 ASP.NET 应用程序的请求,HttpRuntime类几乎包含了单个HTTP请求的所有信息,HttpRuntime是HTTP管道的入口。HTTP请求到达时,ASP.NET 将运行时库加载到要处理请求的进程中,还为将在 Web 服务器上运行的每个 Web 应用程序创建一个应用程序域(AppDomain)。HttpRuntime的ProcessRequest 方法驱动所有后续的 ASP.NET WEB处理。

AppDomain:AppDomain对象表示应用程序域,即一个应用程序执行的独立环境,为执行托管代码提供隔离、卸载和安全边界。它是是微软基于.NET框架设计的概念,找不到其他技术体系中贴切的参照概念。辅助进程为每个当前正在运行的ASP.NET应用程序维护一个特定的AppDomain。一个进程中可以有多个AppDomain,但是一个AppDomain只能存在于某个进程中。线程执行可以涉及多个AppDomain,但某个特定时刻线程仅存在于一个AppDomain中,且线程可以进入其他的AppDomain。

哪些情境下要使用AppDomain:

1、需要隔离的程序集,譬如一些特别容易引起崩溃的代码可以考虑单独运行于一个特定的AppDomain。

2、不同安全级别的程序集,如果需要为自己的代码划分安全执行的边界,可以考虑将不同安全级别的代码单独创建于某个设定了不同安全信息的AppDomain。

3、从性能上考虑,有些程序集可能会消耗大量资源,尽管在托管环境下,基本上不存在资源消耗漏洞,但是总会存在特定时间访问密集造成消耗大量资源的情况,这时可以考虑创建单独的AppDomain,在资源消耗超过临界点后进行AppDomain的卸载,适应系统运行要求。ASP.NET中利用不同的AppDomain来提供支持就是为了防止一个应用程序的崩溃影响其他ASP.NET应用程序,在不重新启动系统不重新启动IIS不影响ASP.NET自身服务提供的情况下将一个AppDomain卸掉同时启动新的AppDomain,理想情况下可以实现web系统的长时间在线(这以往是昂贵的UNIX的特性,终于被MS借鉴了)。

4、不同版本的同一应用程序集的同时运行。这个在COM时代是一个大问题,现在通过AppDomain,实现了在一个进程中执行版本不同的两个程序集,可以做到良好的兼容性。

5、动态加载一些程序。

HttpApplication:定义了所有ASP.NET应用程序的通用的方法、属性和事件。是你实际可以看到的进入HTTP运行时(HttpRuntime)的第一个登录点,它对应到Global.asax文件里定义的基类。HttpApplication担当主容器,负责加载Web程序,当请求到来时触发事件以及在管道之间传输请求(事件消息的邮递者),然后通过传递HttpContext对象,把事件消息发送给调用的方法(在HttpModule和HttpHandler中)。每一个请求都将被路由到一个HttpApplication对象。HttpApplicationFactory类会为你的ASP.NET程序创建一个HttpApplication对象池,它负责加载程序和给每一个到来的请求分发HttpApplication的引用。这个HttpApplication对象池的大小可以通过machine.config里的ProcessModel节点中的MaxWorkerThreads选项配置,默认值是20(此处可能有误,根据Reflector反编译的代码,池的大小应该是100)。HttpApplication

对象池开始启动时通常只有一个HttpApplication对象。但是当同时有多个请求需要处理时,池中的对象将会随之增加。而HttpApplication对象池,也将会被监控,目的是保持池中对象的数目不超过设置的最大值。当请求的数量减小时,池中的数目就会跌回一个较小的值。HttpApplication对象运行在AppDomain里。 HttpApplication的主要职责是作为HTTP管道的事件控制器,所以它的接口主要包含的是事件。事件挂接是非常广泛的,包括以下这些:

【http】

l BeginRequest

l AuthenticateRequest

l AuthorizeRequest

l ResolveRequestCache

l AquireRequestState

l PreRequestHandlerExecute

l „Handler Execution„

l PostRequestHandlerExecute

l ReleaseRequestState

l UpdateRequestCache

l EndRequest

HttpModule:实现了System.Web.IhttpModule接口的.NET组件。这些组件通过在某些事件中注册,把自己插入ASP.NET请求处理管道中(HttpApplication事件链)。当这些事件(HttpApplication对象触发的事件)发生时,HttpModule就会去处理事件(一般是截获请求),所以HttpModule本质上就是过滤器(当一个HTTP请求到达HttpModule时,整个ASP.NET Framework并未对这个HTTP请求做过任何处理)。HttpModule有访问HttpContext对象的权限(但某些对象可能还不能使用),可以修改请求,输出响应的内容以及提供自定义的身份验证,另外还可以在特定的程序里,针对ASP.NET的每一个请求提供响应前处理和响应后处理。多个HttpModule可以钩住相同的事件,事件被处理的顺序是它们在web.config里配置的顺序。

ASP.NET中默认的HttpModule:

DefaultAuthenticationModule:确保上下文中存在Authentication 对象,无法继承此类。

FileAuthorizationModule:验证远程用户是否具有访问所请求文件的 NT 权限,无法继承此类。

FormsAuthenticationModule:启用ASP.NET应用程序以使用Forms身份验证,无法继承此类。

PassportAuthenticationModule:提供环绕PassportAuthentication服务的包装,无法继承此类。

SessionStateModule:为应用程序提供会话状态服务。

UrlAuthorizationModule:提供基于URL的授权服务以允许或拒绝对指定资源的访问,无法继承此类。

WindowsAuthenticationModule:启用ASP.NET应用程序以使用 Windows/IIS身份验证,无法继承此类。

HttpHandler:HttpHandler(HTTP处理器)是HTTP请求的处理中心,它可以完全使用HttpContext对象,真正地对客户端请求的页面进行编译和执行,并将处理后的信息附加在HTTP请求信息流中返回到HttpModule中。HttpHandler通过一个简单IHttpHandler接口实现(或者它的异步版本IHttpAsyncHandler),此接口仅仅只有一个方法ProcessRequest()和一个属性IsReusable。

http(二)
http协议的状态码 200、301、304、404、502一览

http协议的状态码

E-Marketing Union of friendship

1xx(临时响应)

表示临时响应并需要请求者继续执行操作的状态码。

2xx(成功)

表示成功处理了请求的状态码。

3xx(重定向)

要完成请求,需要进一步操作。通常,这些状态码用来重定向。Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。

4xx(请求错误)

这些状态码表示请求可能出错,妨碍了服务器的处理。

5xx(服务器错误)

这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

http(三)
HTTP报错列表

http网页报错列表

2010-02-10 14:10

HTTP/IIS错误类型

1XX 信息提示

用于表示临时的响应。客户端在收到常规响应之前,应准备接受一个或多个1XX响应。

100 :继续

101 :切换协议

2XX 成功

表示服务器成功地接受了客户端请求。

200 :确定。客户端请求已成功

201 :已创建

202 :已接受

203 :非权威性信息

204 :无内容

205 :重置内容

206 :部分内容

3XX 重定向

客户端浏览器必须采取更多操作来实现请求。(例如:浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求)

302 :对象已移动

304 :未修改

307 :临时重定向

4XX 客户端错误

发生错误,客户端似乎有问题。(例如:客户端请求不存在的页面,客户端未提供有效的身份验证信息)

400 :错误的请求

401 :访问被拒绝

IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:

401.1 :登陆失败

401.2 :服务器配置导致登陆失败

401.3 :由于ACL对资源的限制而未获得授权

401.4 :筛选器授权失败

401.5 :ISAPI/CGI应用程序授权失败

401.7 :访问被Web服务器上的URL授权策略拒绝(IIS6.0专用)

403 :禁止访问

IIS定义了许多不同的错误原因:

403.1 :执行访问被禁止

403.2 :读访问被禁止

403.3 :写访问被禁止

403.4 :要求SSL

403.5 :要求SSL 128

403.6 :IP地址被拒绝

403.7 :要求客户端证书

403.8 :站点访问被拒绝

403.9 :用户数过多

403.10 :配置无效

403.11 :密码更改

403.12 :拒绝访问映射表

403.13 :客户端证书被吊销

403.14 :拒绝目录列表

403.15 :超出客户端访问许可

403.16 :客户端证书不受信任或无效

403.17 :客户端证书已过期或尚未生效

403.18 :在当前的应用程序池中不能执行所请求的URL(IIS6.0专用) 403.19 :不能未这个应用程序池中的客户端执行CGI(IIS6.0专用) 403.20 :Passport登陆失败(IIS6.0专用)

404 未找到

404.0 :没有找到文件或目录

404.1 :无法在所请求的断开上访问Web站点

404.2 :Web服务扩展锁定策略阻止本请求

404.3 :MIME映射策略阻止本请求

405 用来访问本页的HTTP谓词不被允许

406 客户端浏览器不接受所请求页面的MIME类型

407 要求进行代理身份验证

412 前提条件失败

413 请求实体太大

414 请求URL太大

415 不支持的媒体类型

416 所请求的范围无法满足

417 执行失败

423 锁定的错误

5XX 服务器错误

服务器由于遇到错误而不能完成该请求

500 内部服务器错误

500.12 :应用程序正忙于在Web服务器上重新启动

500.13 :Web服务器太忙

500.15 :不允许直接请求Global.asa

500.16 :UNC授权凭据不正确(IIS6.0专用)

500.18 :URL授权存储不能打开(IIS6.0专用)

500.100 :内部ASP错误

501 页眉值制定了未实现的配置

502 Web服务器用作网关或代理服务器时收到了无效响应

502.1 :CGI应用程序超时

502.2 :CGI应用程序出错

503 服务不可用(IIS6.0专用)

504 网关超时

505 HTTP版本不受支持

WIN2003 SERVER IIS6.0 ASP 错误解析

事件 ID 描述

0100 内存不足。无法分配所需的内存。【http】

0101 意外错误。函数返回 |。

0102 要求字符串输入。函数需要字符串输入。

0103 要求数字输入。函数需要数字输入。

0104 不允许操作。

【http】

0105 索引超出范围。数组索引超出范围。

0106 类型不匹配。遇到未处理的数据类型。

0107 数据大小太大。请求中发送的数据大小超出允许的限制。

0108 创建对象失败。创建对象 '%s' 时出错。

0109 成员未找到。

0110 未知的名称。

0111 未知的界面。

0112 参数丢失。

0113 脚本超时。超过了脚本运行的最长时间。可以通过为

Server.ScriptTimeout 属性指定一个新值或在 IIS 管理工具中修改值来更改此限制。

0114 对象不可用于自由线程。应用程序对象仅接受自由线程对象;而对象 '%s' 不可用于自由线程。

0115 意外错误。外部对象中发生一个可捕捉的错误 (%X)。脚本无法继续运行。 0116 脚本分隔符结束标记丢失。脚本块缺少脚本结束标记 (%>)。

0117 脚本结束标记丢失。脚本块缺少脚本结束标记 () 或标记结束符号 (>)。 0118 对象的结束标记丢失。对象块缺少对象结束标记 () 或标记结束符号 (>)。 0119 Classid 或 Progid 属性丢失。对象实例 '|' 在对象标记中需要有效的 Classid 或 Progid。

0120 Runat 属性无效。脚本标记或对象标记的 Runat 属性只能有 'Server' 值。

0121 对象标记中的范围无效。对象实例 '|' 的作用范围不能是 Application 或 Session。要创建有 Session 或 Application 作用范围的对象实例,请将在 Global.asa 文件中加入 Object 标记。

0122 对象标记中的范围无效。对象实例 '|' 必须有 Application 或 Session 作用范围。这将应用于所有在 Global.asa 文件内创建的对象。

0123 缺少 Id 属性。缺少 Object 标记所需的 Id 属性。

0124 Language 属性丢失。缺少 Object 标记所需的 Language 属性。 0125 属性结束标记丢失。'|' 属性的值没有结束分隔符。

0126 未找到 Include 文件。未找到 Include 文件 '|'。

0127 HTML 注释的结束标记丢失。HTML 注释或在服务器端的包含文件缺少结束标记 (-->)。

0128 File 或 Virtual 属性丢失。Include 文件名必须用 File 或 Virtual 属性指定。

0129 未知的脚本语言。服务器上找不到脚本语言 '|'。【http】

0130 File 属性无效。File 属性 '|' 不能以斜杠或反斜杠开始。

0131 不允许的父路径。Include 文件 '|' 不能包含 '..' 来表示父目录。 0132 编译错误。无法处理 Active Server Page '|'。

0133 ClassID 属性无效。对象标记有一个无效的 ClassID '|'。

0134 ProgID 属性无效。对象有一个无效的 ProgID '|'。

0135 循环包含。文件 '|' 包含它本身(可能是非直接地包含)。请检查包含文件中的其他 Include 语句。

0136 对象实例名无效。对象实例 '|' 试图使用一个保留名称。这个名称被 Active Server Pages 的内部对象使用。

0137 全局脚本无效。脚本块必须是允许的 Global.asa 过程之一。Global.asa 文件中不允许在 内使用脚本指令。允许的过程名称是 Application_OnStart、Application_OnEnd、Session_OnStart 或 Session_OnEnd。

0138 脚本块嵌套。脚本块不可放在另一个脚本块内。

0139 嵌套对象。对象标记不能放在另一个对象标记内。

0140 页命令次序有误。@ 命令必须是 Active Server Page 中的第一个命令。 0141 页命令重复。@ 命令只可以在 Active Server Page 中使用一次。 0142 线程令牌错误。无法打开线程令牌。

0143 应用程序名无效。未找到有效的应用程序名称。

0144 初始化错误。初始化时页级别的对象列表失败。

0145 新应用程序失败。无法添加新的应用程序。

0146 新会话失败。无法添加新的会话。

0147 500 服务器错误。

0148 服务器太忙。

0149 正在重新启动应用程序。重启动应用程序期间无法处理请求。

0150 应用程序目录错误。无法打开应用程序目录。

0151 更改通知错误。无法创建更改通知事件。

0152 安全错误。处理用户安全凭据时发生错误。

0153 线程错误。新线程请求已失败。

0154 HTTP 头写入错误。HTTP 头无法写入客户端浏览器。

0155 页内容写入错误。页内容无法写入客户端浏览器。

0156 头错误。HTTP 头已经写入到客户端浏览器。任何 HTTP 头必须在写入页内容之前修改。

0157 启用缓冲。缓冲启用后不能关闭。

0158 URL 丢失。URL 是必需的。

0159 缓冲已关闭。缓冲必须启用。

0160 日志记录错误。将条目写入日志失败。

0161 数据类型错误。将 Variant 转换为 String 变量失败。

0162 不能修改 Cookie。不能修改 Cookie 'ASPSessionID'。它是一个保留的 Cookie 名。

0163 逗号用法无效。日志条目内不可使用逗号。请选择另一个分隔符。 0164 TimeOut 值无效。指定的 TimeOut 值无效。

0165 SessionID 错误。无法创建 SessionID 字符串。

0166 对象未初始化。试图访问未初始化的对象。

0167 会话初始化错误。初始化 Session 对象时发生错误。

0168 禁止的对象使用。Session 对象中不能保存内部对象。

0169 缺少对象信息。Session 对象中不能保存信息不全的对象。需要对象的线程模型信息。

0170 删除会话错误。无法正确删除 Session。

0171 路径丢失。必须为 MapPath 方法指定 Path 参数。

0172 路径无效。MapPath 方法的路径必须是虚拟路径。使用了一个实际的路径。 0173 路径字符无效。MapPath 方法的 Path 参数中指定了一个无效字符。

0174 多个路径字符无效。MapPath 方法的 Path 参数中指定了无效的 '/' 或 '\\'。

0175 不允许的路径字符。MapPath 方法的 Path 参数中不允许使用 '..' 字符。 0176 未找到路径。MapPath 方法的 Path 参数与已知路径不符。

0177 Server.createObject 失败。%s

0178 Server.createObject 访问错误。检查权限时调用 Server.createObject 失败。对此对象的访问被拒绝。

0179 应用程序初始化错误。初始化 Application 对象时发生错误。

0180 禁止的对象使用。Application 对象中不能保存内部对象。

0181 线程模型无效。使用单元线程模型的对象不能存储在 Application 对象中。

0182 对象信息丢失。Application 对象中不能保存信息不全的对象。需要此对象的线程模型信息。

0183 空 Cookie 项。不能保存空项 Cookie。

http(四)
HTTP状态码常用的有哪些?

HTTP状态码常用的有哪些?

编辑:胡绪宜

一、200状态码:

成功2××: 成功处理了请求的状态码。

1、200 :服务器已成功处理了请求并提供了请求的网页。

2、204: 服务器成功处理了请求,但没有返回任何内容。

二、300状态码:

【http】

重定向3×× :每次请求中使用重定向不要超过 5 次。 1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。 2、302: 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。 3、304: 如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。 三、400状态码:

客户端错误4×× :表示请求可能出错,妨碍了服务器的处理。

1、400: 服务器不理解请求的语法。

2、403: 服务器拒绝请求。

3、404: 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。

4、410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 页面代码。如果资源已永久删除,应当使用 301 指定资源的新位置。 四、500状态码:

服务器错误5×× :表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

1、500 :服务器遇到错误,无法完成请求。

2、503: 服务器目前无法使用(由于超载或停机维护)。

上面介绍的http状态码是比较常见的几种状态码,还有一些不常见的并没有写出来。了解了http状态码在SEO中就比较好分析网站。希望能够帮助到大家。

http(五)
HttpClient示例

HttpClient示例

一、HttpClient简介

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.3.

二、HttpClient特性

基于标准,纯净的java语言.实现了Http1.0和Http1.1

以可扩展的面向对象的结构实现了Http全部的方法 (GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE).

支持HTTPS协议.

通过Http代理建立透明的连接.

利用CONNECT 方法通过Http代理建立隧道的https连接.

Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案. 插件式的自定义认证方案.

便携可靠的套接字工厂使它更容易的使用第三方解决方案.

连接管理器支持多线程应用.支持设置最大连接数,同时支持设置每个主机的最大连接数.发现并关闭过期的连接.

Automatic Cookie handling for reading Set-Cookie: headers from the server and sending them back out in a Cookie: header when appropriate.【http】

插件式的自定义Cookie策略.

Request output streams to avoid buffering any content body by streaming directly to the socket to the server.

Response input streams to efficiently read the response body by streaming directly from the socket to the server.

在http1.0和http1.1中利用KeepAlive保持持久连接.

直接获取服务器发送的response code和 headers.

设置连接超时的能力.

实验性的支持http1.1 response caching.

源代码基于Apache License 可免费获取. 三、详细讲解

这里为了更好的理解,新建了一个java se的工程,如下图所示

HttpClientTest类

package com.yulore.httpproxy;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.security.KeyManagementException;

import java.security.KeyStore;

import java.security.KeyStoreException;

import java.security.NoSuchAlgorithmException;

import java.security.UnrecoverableKeyException;

import java.security.cert.CertificateException;

import java.util.ArrayList;

import java.util.List;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.ParseException;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.conn.scheme.Scheme;

import org.apache.http.conn.ssl.SSLSocketFactory;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import org.junit.Test;

public class HttpClientTest {

@Test

public void jUnitTest(){

get();

}

/**

* HttpClient连接SSL

*/

private void ssl() {

DefaultHttpClient httpclient = new DefaultHttpClient();

try {

KeyStore trustStore = KeyStore.getInstance(KeyStore

.getDefaultType());

FileInputStream instream = new FileInputStream(new File( "d:\\tomcat.keystore"));

try {

// 加载keyStore d:\\tomcat.keystore

trustStore.load(instream, "123456".toCharArray());

} catch (CertificateException e) {

e.printStackTrace();

} finally {

try {

instream.close();

} catch (Exception ignore) {

}

}

// 穿件Socket工厂,将trustStore注入

SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); // 创建Scheme

Scheme sch = new Scheme("https", 8443, socketFactory);

// 注册Scheme

httpclient.getConnectionManager().getSchemeRegistry().register(sch); // 创建http请求(get方式)

HttpGet httpget = new HttpGet(

"https://localhost:8443/myDemo/Ajax/serivceJ.action"); System.out.println("executing request" + httpget.getRequestLine()); HttpResponse response = httpclient.execute(httpget);

HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");

System.out.println(response.getStatusLine());

if (entity != null) {

System.out.println("Response content length: "

+ entity.getContentLength());

String ss = EntityUtils.toString(entity);

System.out.println(ss);

EntityUtils.consume(entity);

}

} catch (ParseException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

} catch (UnrecoverableKeyException e) {

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyStoreException e) {

e.printStackTrace();

} finally {

httpclient.getConnectionManager().shutdown();

}

}

/**

* post方式提交表单(模拟用户登录请求)

*/

private void postForm() {

// 创建默认的httpClient实例.

HttpClient httpclient = new DefaultHttpClient();

// 创建httppost

HttpPost httppost = new HttpPost(

"// 创建参数队列

List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("username", "admin")); formparams.add(new BasicNameValuePair("password", "123456")); UrlEncodedFormEntity uefEntity;

try {

uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); httppost.setEntity(uefEntity);

System.out.println("executing request " + httppost.getURI()); HttpResponse response;

response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

if (entity != null) {

System.out.println("--------------------------------------"); System.out.println("Response content: "

+ EntityUtils.toString(entity, "UTF-8")); System.out.println("--------------------------------------"); }

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

// 关闭连接,释放资源

httpclient.getConnectionManager().shutdown();

}

}

/**

* 发送 post请求访问本地应用并根据传递参数不同返回不同结果 */

private void post() {

// 创建默认的httpClient实例.

HttpClient httpclient = new DefaultHttpClient();

// 创建httppost

HttpPost httppost = new HttpPost(

"// 创建参数队列

List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("type", "house")); UrlEncodedFormEntity uefEntity;

try {

uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); httppost.setEntity(uefEntity);

System.out.println("executing request " + httppost.getURI()); HttpResponse response;

response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

if (entity != null) {

System.out.println("--------------------------------------"); System.out.println("Response content: "

+ EntityUtils.toString(entity, "UTF-8")); System.out.println("--------------------------------------"); }

} catch (ClientProtocolException e) {

http(六)
http://220.160.54.46/UEPORTLET/jsp/scores/gkcj/scores_enter.jsp福建高考成绩查询 ...

2014福建高考成绩查询入口在福建省教育考试院提供的通道进行成绩查询。
2014福建高考成绩查询入口:http://220.160.54.46/UEPORTLET/jsp/scor%20es/gkcj/scores_enter.jsp

点击图片进入2014福建高考成绩查询入口


http(七)
http://www.hneao.cn/ks/湖南省高考志愿填报入口(2016)

  2016年湖南省高考志愿填报系统预计在6月底开通,各位考生可登录湖南省教育考试院官网(http://www.hneao.edu.cn/)了解2016湖南高考各批次志愿填报具体时间安排,以下是中国招生考试网为大家整理的2016湖南高考志愿填报系统入口:http://www.hneao.cn/ks/,希望能够帮助到大家!  另外,会针对2016年湖南高考整理策划了高考试题及答案、成绩查询及分数线公布专题,请大家点击进入查看。
2016湖南高考网(试题|答案|成绩|分数线)
  中国招生考试网温馨提示:请大家提前做好高考志愿的填报工作,以便可以顺利的进入自己理想的大学!
(HOT~)2016湖南省高考志愿填报系统入口
【中国招生考试网·2016高考重点专题】 
>>>2016年全国高考真题答案专题
>>>2016年全国高考语文作文专题
>>>2016年全国高考成绩查询入口专题
>>>2016年全国高考分数线汇总专题
>>>2016年全国高考录取查询专题
>>>2016年全国高考状元汇总专题

以上就是中国招生考试网http://www.chinazhaokao.com/带给大家不一样的精彩成考报名。想要了解更多《http》的朋友可以持续关注中国招生考试网,我们将会为你奉上最全最新鲜的成考报名内容哦! 中国招生考试网,因你而精彩。

相关热词搜索:http协议 httpclient

最新推荐成考报名

更多
1、“http”由中国招生考试网网友提供,版权所有,转载请注明出处。
2、欢迎参与中国招生考试网投稿,获积分奖励,兑换精美礼品。
3、"http" 地址:http://www.chinazhaokao.com/daxuejieshao/645263.html,复制分享给你身边的朋友!
4、文章来源互联网,如有侵权,请及时联系我们,我们将在24小时内处理!