A. wireshark可以过滤http地址么
一、IP过滤:包括来源IP或者目标IP等于某个IP
比如:ip.src addr==192.168.0.208 or ip.src addr eq 192.168.0.208 显示来源IP
ip.dst addr==192.168.0.208 or ip.dst addr eq 192.168.0.208 显示目标IP
二、端口过滤:
比如:tcp.port eq 80 // 不管端口是来源的还是目标的都显示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80
过滤端口范围
tcp.port >= 1 and tcp.port <= 80
三、协议过滤:tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
等等
排除ssl包,如!ssl 或者 not ssl
四、包长度过滤:
比如:
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后
五、http模式过滤:
例子:
http.request.method == “GET”
http.request.method == “POST”
http.request.uri == “/img/logo-e.gif”
http contains “GET”
http contains “HTTP/1.”
// GET包
http.request.method == “GET” && http contains “Host: ”
http.request.method == “GET” && http contains “User-Agent: ”
// POST包
http.request.method == “POST” && http contains “Host: ”
http.request.method == “POST” && http contains “User-Agent: ”
// 响应包
http contains “HTTP/1.1 200 OK” && http contains “Content-Type: ”
http contains “HTTP/1.0 200 OK” && http contains “Content-Type: ”
一定包含如下
Content-Type:
六、连接符 and / or
B. wireshark 怎样过滤http协议内容
在wireshark软件的那个filter框框里面输入http,就能只过滤HTTP协议的内容了。
C. 如何通过HTTP状态码查看搜索引擎蜘蛛如何爬行我的网站的
看IIS日志或者apache日志,发现有spider什么的,就知道蜘蛛来过了。蜘蛛来了爬了几页,日志里面都会很清楚的反应出来。包括是否收录,是否没有找到页面等。
D. 怎么屏蔽蜘蛛爬取
在网站的根目录里面,放入robots.txt文件,这样就可以屏蔽蜘蛛的爬取,不过在文件里面要放入你不想让蜘蛛爬取的地方。详细的内容你打开这个网址可以看到 http://help..com/question?prod_en=search&class=499
E. 百度蜘蛛访问日志全HEAD开头,是什么意思
我回答下吧 网络会定期的访问你的网页 但又不想下载你网页的全部内容 所以用HEAD的方法 HEAD 一般情况下会在服务器上产生与GET相同的处理(除非代码中对HEAD的情况做了处理),只不过返回给客户端的是header信息,而没有正文。通过这种HEAD请求,可以利用极少量的带宽来获得某网页的头部信息。通过头信息中的HTTP状态码(200等), 网络可以了解这个网页的大体状态,比如是否存在,是否转向,是否可用等;通过Content-Length, Last-Modified 中的任一项与之前的访问记录做对比,网络可以进一步判断这个网页是否需要更新。一般都返回200 0 0所以你不要担心以上内容是经过研究的
F. dotnet 实现对http访问的请求及应答,最好能自定义端口号,不用webservice
HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态有哪些?以及在C#中你如何使用?如果你不能清楚地回答其中的大部分问题,那么这篇文章就是为你准备的!大纲如下:
1、HTTP概述
1.1、HTTP协议的客户端与服务器的交互
1.2、HTTP消息
1.3、HTTP请求的方法
1.4、HTTP响应的代码
2、抓包分析
3、POST与GET的差异
4、以一个实例说明C#中如何使用POST、GET等操作
4.1、HttpWebRequest
4.2、HttpWebResponse
4.3、编写WinForm程序打开博客园首页(附源码)
1、HTTP概述
为了唤醒你对HTTP协议的记忆或使你能够对HTTP协议有所了解,首先简单一下HTTP协议。超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP的发展是万维网协会(WorldWideWebConsortium)和Internet工作小组(InternetEngineeringTaskForce)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC2616。RFC2616定义了HTTP协议中一个现今被广泛使用的版本——HTTP1.1。
1.1、HTTP协议的客户端与服务器的交互
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)调用户代理(useragent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(originserver)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1200OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(UniformResourceIdentifiers,或者,更准确一些,URI)来标识。
客户端与服务器端的结构与交互过程可以表示为下面2张图:
图1、Web客户端-服务器端结构(其中web服务器的超文本链接,即通过网站上的一个链接跳转到了其他服务器上)
图2、Web客户端与服务器端的交互
1.2、HTTP消息
客户端与服务器之间的交互用到了两种类型的消息:请求(Request)和响应(Response)。
HTTP请求的格式为:图3、HTTP请求的格式
HTTP响应的格式为:图4、HTTP响应的格式
从上面可以看出HTTP的请求和响应消息的首部均包含可变数量的字段,用一个空行(blankline)将所有首部字段(header)与消息主体(body)分隔开来。一个首部字段由字段名和随后的冒号、一个空格和字段值组成,字段名不区分大小写。
报文头可分为三类:一类应用于请求,一类应用于响应,还有一类描述主体。有一些报文头(例如:Date)既可用于请求又可用于响应。描述主体的报文头可以出现在POST请求和所有响应报文中。HTTP的首部字段如下图所示:图5、HTTP首部字段
1.3、HTTP请求的方法
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在WebApplication中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(MethodNotAllowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(NotImplemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
安全方法
开发者应当意识到他们的软件代表了用户在因特网上进行交互,并且应当告知用户,他们正在进行的操作可能对他们自身或者其他人有未曾预料的重要影响。
特别地,对于GET和HEAD方法而言,除了进行获取资源信息外,这些请求不应当再有任何其他意义。也就是说,这些方法应当被认为是“安全的”,即所谓安全的意味着该操作用于获取信息而非修改信息。客户端应当使用其他“非安全”方法,例如POST、PUT及DELETE来以特殊的方式(通常是按钮而不是超链接)使得客户能够意识到可能要负的责任(例如一个按钮带来的资金交易)或者被告知正在请求的操作可能是不安全的(例如某个文件将被上传或删除)。
但是,不能想当然地认为服务器不会在处理某个GET请求时不会产生任何副作用。事实上,很多动态资源会把这作为其特性。这里重要的区别在于用户并没有请求这一副作用,因此不应由用户为这些副作用承担责任。
幂等方法
假如在不考虑诸如错误或者过期等问题的情况下,若干次请求的副作用与单次请求相同或者根本没有副作用,那么这些请求方法就能够被视作“幂等”的。GET,HEAD,PUT和DELETE方法都有这样的幂等属性,同样由于根据协议,OPTIONS,TRACE都不应有副作用,因此也理所当然也是幂等的。
假如某个由若干个请求做成的请求串行产生的结果在重复执行这个请求串行或者其中任何一个或多个请求后仍没有发生变化,则这个请求串行便是“幂等”的。但是,可能出现若干个请求做成的请求串行是“非幂等”的,即使这个请求串行中所有执行的请求方法都是幂等的。例如,这个请求串行的结果依赖于某个会在下次执行这个串行的过程中被修改的变量。
1.4、HTTP响应的代码
服务器程序响应的第一行叫状态行。状态行以HTTP版本号开始,后面跟着3位数字表示响应代码,最后是易读的响应短语。根据第一位可以把响应分成5类:图6、HTTP响应代码
2、抓包分析
现在我们对HTTP基本上算是了解了,下面我用wireshark抓取打开博客园首页时,我的电脑与博客园服务器的交互过程的HTTP数据包。做好准备工作,关闭一些可能干扰我们抓取打开博客园的相关程序。如下图,我们在浏览器中输入www.cnblogs.com并确定时,首先抓到如下包:图7、打开博客园抓取的包
从图中可以看出,我们在浏览器中输入www.cnblogs.com并确定时是向服务器发送了一个HTTP请求消息:GET/HTTP/1.1。根据1.2中介绍的HTTP消息的格式,我们知道GET对应request、/对应request-line、HTTP/1.1对应版本号。除了请求行之外,发送了一些首部字段,如:Accept、Accept-Language、User-Agent、Accept-Encoding、Host、Connection等。而且可以看出他们的格式就是:首部字段名:字段值,注意冒号后面有个空格。
接下来我们看一下GET/HTTP/1.1请求的响应消息是怎样的:
图8、GET/HTTP/1.1请求的响应消息
响应消息的状态行是:HTTP/1.1200OK,其中HTTP/1.1对应版本号、200对应response-code、OK对应response-phrase。除了状态行,还返回了一些首部字段,如:Cache-Control、Content-Type、Content-Encoding、Expires、Last-Modified、Vary、Server等等。(通过上图我们可以看出,博客用的是IIS7.0)
上面抓的是GET的数据包,现在我来看一个POST的数据包——打开博客园首页过程中获取左边的分类信息就是通过POST请求返回的。图9、POST数据包
我们可以看到,POST/ws/PublicUserService.asmx/GetLoginInfoHTTP/1.1。除了把GET换成了POST之外,其它信息差不多。下面我们放大看下发送的首部字段:
图10、POST/ws/PublicUserService.asmx/GetLoginInfoHTTP/1.1的首部字段
NOTE:本节涉及的一些首部字段我就不在这里解释了。我想,到了这里大家对HTTP的认识应该更深入了一步。
3、POST与GET的差异
1.3中介绍了8种方法,其中GET与POST最基本和常用了。表单提交中get和post方式的区别归纳如下几点:
GET是从服务器上获取数据,POST是向服务器传送数据。
GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTPPOST机制,将表单内各个字段与其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。
GET安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。POST的所有操作对用户来说都是不可见的。
在FORM提交的时候,如果不指定Method,则默认为GET请求(.net默认是POST),Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+”号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISOLatin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有2048字节,而POST则没有此限制。POST传递的参数在doc里,也就http协议所传递的文本,接受时再解析参数部分。获得参数。一般用POST比较好。POST提交数据是隐式的,GET是通过在url里面传递的,用来传递一些不需要保密的数据,GET是通过在URL里传递参数,POST不是。
说明:关于“POST与GET的差异”查考了网上前辈的资料,由于找不出源头,到处都是转帖,这里就不贴出相关网址了,或Google下就知道了。
4、以一个实例说明C#中如何使用POST、GET等操作
在介绍实例之前,我们要先介绍一下HttpWebRequest和HttpWebResponse,在C#中就是用这两个类实现客户端向服务器端发送HTTP消息、客户端接受服务器端的HTTP响应。
4.1、HttpWebRequest
在设计实现实例之前我们首先要介绍一下HttpWebRequest这个类——提供WebRequest类的HTTP特定的实现,HttpWebRequest类对WebRequest中定义的属性和方法提供支持,也对使用户能够直接与使用HTTP的服务器交互的附加属性和方法提供支持。
不要使用HttpWebRequest构造函数。使用System.Net.WebRequest.Create方法初始化新的HttpWebRequest对象。如果统一资源标识符(URI)的方案是http://或https://,则Create返回HttpWebRequest对象。
HTTP消息的首部字段(headers),在HttpWebRequest中表示为公开的属性。下表列出了由属性或方法设置或由系统设置的HTTP标头。如果本地计算机配置指定使用代理,或者如果请求指定代理,则使用代理发送请求。如果未指定代理,则请求发送到服务器。
HttpWebRequest类主要包括如下方法,用于与HTTP服务器交互:
Abort:取消对Internet资源的请求。
AddRange:向请求添加范围标头。
BeginGetRequestStream:开始对用来写入数据的Stream对象的异步请求。
BeginGetResponse:开始对Internet资源的异步请求。
Create:初始化新的WebRequest。(从WebRequest继承。)
CreateDefault:为指定的URI方案初始化新的WebRequest实例。(从WebRequest继承。)
CreateObjRef:创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(从MarshalByRefObject继承。)
EndGetRequestStream:结束对用于写入数据的Stream对象的异步请求。
EndGetResponse:结束对Internet资源的异步请求。
GetRequestStream:获取用于写入请求数据的Stream对象。
GetResponse:返回来自Internet资源的响应。
GetSystemWebProxy:返回当前模拟用户的InternetExplorer设置中配置的代理。(从WebRequest继承。)
InitializeLifetimeService:获取控制此实例的生存期策略的生存期服务对象。(从MarshalByRefObject继承。)
RegisterPrefix:为指定的URI注册WebRequest子代。(从WebRequest继承。)
4.2、HttpWebResponse
在设计实现实例之前我们还要介绍一下HttpWebRequest这个类——提供WebResponse类的HTTP特定的实现。此类包含对WebResponse类中的属性和方法的HTTP特定用法的支持。HttpWebResponse类用于生成发送HTTP请求和接收HTTP响应的HTTP独立客户端应用程序。
注意
不要混淆HttpWebResponse和HttpResponse类;后者用于asp.NET应用程序,而且它的方法和属性是通过ASP.NET的内部Response对象公开的。
决不要直接创建HttpWebResponse类的实例。而应当使用通过调用HttpWebRequest.GetResponse所返回的实例。您必须调用Stream.Close方法或HttpWebResponse.Close方法来关闭响应并将连接释放出来供重用。不必同时调用Stream.Close和HttpWebResponse.Close,但这样做不会导致错误。
从Internet资源返回的公共标头信息公开为该类的属性。有关完整的列表,请参见下表。可以从Headers属性以名称/值对的形式读取其他标头。下表显示可以通过HttpWebResponse类的属性使用的公共HTTP标头。
通过调用GetResponseStream方法,以Stream的形式返回来自Internet资源的响应的内容。
HttpWebRequest类主要包括如下方法与HTTP服务器交互:(与HttpWebRequest类相比,方法较少)
CreateObjRef:创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(从MarshalByRefObject继承。)
GetLifetimeService:检索控制此实例的生存期策略的当前生存期服务对象。(从MarshalByRefObject继承。)
GetResponseHeader:获取与响应一起返回的标头的内容。
GetResponseStream:获取流,该流用于读取来自服务器的响应的体。
InitializeLifetimeService:获取控制此实例的生存期策略的生存期服务对象。(从MarshalByRefObject继承。)
4.3、编写WinForm程序打开博客园首页(附源码)
通过前面两小节的介绍,我们对HttpWebRequest类和HttpWebRequest类有所了解,现在我们就应用它们来编写一个小程序来实践。程序界面大概如下:
功能也比较简单,就是通过点击“在WebBrowser中显示”按钮就在下方的WebBrowser控件中显示博客园首页,通过点击查看“html源码”按钮就弹出一个对话框显示博客园首页的html源码。
首先我们介绍如何实现——通过点击查看“html源码”按钮就弹出一个对话框显示博客园首页的html源码。核心代码如下:
privatestringGetCnBlogs()
{
stringhtml=String.Empty;
HttpWebRequestcnbogs=(HttpWebRequest)System.Net.WebRequest.Create(txtURL.Text.ToString());
cnbogs.Accept="image/jpeg,application/x-ms-application,image/gif,application/xaml+xml,image/pjpeg,application/x-ms-xbap,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,application/QVOD,application/QVOD,*/*";
cnbogs.UserAgent="Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MALN;CIBA;InfoPath.2;.NET4.0C;.NET4.0E;MEdiaCenterPC6.0;TabletPC2.0;AskTB5.6)";
cnbogs.Method="GET";
HttpWebResponsecnblogsRespone=(HttpWebResponse)cnbogs.GetResponse();
if(cnblogsRespone!=null&&cnblogsRespone.StatusCode==HttpStatusCode.OK)
{
using(StreamReadersr=newStreamReader(cnblogsRespone.GetResponseStream()))
{
html=sr.ReadToEnd();
}
}
returnhtml;
}
privatevoidbtnGetHtml_Click(objectsender,EventArgse)
{
MessageBox.Show(GetCnBlogs());
}
通过点击查看“html源码”按钮就弹出一个对话框显示博客园首页的html源码
其实这个过程更我们通过在浏览器中输入博客园网站打开效果是一样的,只不过在这里我们是通过HttpWebRequest类和HttpWebRequest类的对象来实现的。
然而,通过点击“在WebBrowser中显示”按钮就在下方的WebBrowser控件中显示博客园首页的功能类似,只不过是在WebBrowser控件中显示且我这里把一些常用的HTTP相关的操作封装到一个命名空间Helper中,便于以后使用,本质跟上面的是一样的。点击下载整个项目的源码。
我这个源码还是比较简陋,只是简单地实现了使用HttpWebRequest类和HttpWebRequest类与HTTP服务器交互,更完善的功能期待你去完成。补充说明:关于url的长度限制问题,IE的url最长可以传2083字符(半角),而GET最多只能到2048字符。但是RFC2616,HypertextTransferProtocol--HTTP/1.1,并没有对url的最大长度做限制。
本文来自网学(http://myecs.cn),转载请注明出处:http://myecs.cn/lunwen-resource/Net-biancheng/C-zhongruheshiyong-POSTGET-deng-fushili-download/
G. 求屏蔽奇虎360爬行蜘蛛的方法
丢人啊 帮你网络了下。。 这方面实在不擅长。。
正如你所知道的,你不能总是依康蜘蛛引擎在访问或者索引你的网站时能够十分有效的运作。完全依靠他们自己的端口,蜘蛛会产生许多重复内容,把一些重要页面当成垃圾,索引本不应该展示给用户的链接入口,还会有其他的问题。有一些工具可以让我们能够充分控制蜘蛛在网站内部的活动,如meta robots标签,robots.txt、canonical标签等。今天,我讲一下机器人控制技术使用的局限。为了让蜘蛛不抓取某一个页面,站长们有时会使用多个机器人控制技术, 来禁止搜索引擎访问某个网页。不幸的是,这些技术能有时互相抵触:从另一方面说这样的限制会把某些死链给隐藏掉了。那么,当一个页面的robots文件中被禁止访问,或者被使用noindex tag 和 canonical tag时会发生什么?快速复习在我们进入主题之前,让我们看一下那些主流的robots的一些限制技巧吧:元机器人标签元机器人标签(meta Robots Tag)为搜索引擎机器人建立页面等级说明。元机器人标签应放在HTML文件的头部。规范标签(canonical tag)规范标签(canonical tag)是一个位于网页HTML头部的页面等级的元标签。它告诉搜索引擎哪一个URL的显示是规范的。它的目的是不让搜索引擎抓取重复内容,同时将重复页面的权重集中在规范的那一个页面上。X机器人标签自2007年以来,谷歌和其他搜索引擎已经支持把X-Robots-Tag作为一种方法来告诉蜘蛛爬行和索引的优先顺序,X-Robots-Tag位于HTTP头部,曾用于通知蜘蛛爬行和索引文件尔用。该标签对控制那些非HTML文件的索引是很有用的,如PDF文件。机器人标签robots.txt允许一些搜索引擎进入网站内部,但是它并不能保证具体某个页面会不会被抓取和索引。除非出于SEO的原因,否则只有当确实有必要或者在站点上有需要屏蔽的robots时robots.txt才确实值得使用。我总是推荐使用元数据标签“noindex”来代替它。避免冲突同时利用两种方法来限制robot入口是不明智的:· meta Robots noindex (元机器人标签“noindex”)· Canonical Tag (when pointing to a different URL) (标准标签)· Robots.txt Disallow· X-Robots-Tag(x机器人标签)尽管你很想去保持页面的搜索结果,但是一个办法总是比两个好。让我们来看看当在一个单一的URL中有很多robots路径控制技术时会发生什么。meta Robots noindex 和 Canonical标签如果你的目标是一个URL的权重传递给另一个URL,尔你却没有其他的更好办法的时候,那就只能用Canonical标签。不要用元机器人标签的“noindex”来给自己添麻烦。如果你使用两个robot的方法,搜索引擎可能根本看不到你的Canonical标签。权重传递的效用将会被忽略,因为机器人的noindex标签会使它看不到Canonical标签!meta Robots noindex & X-Robots-Tag noindex这些标签是多余的。这两个标签放置在同一个页面我只能看到的是给SEO造成的不良影响。如果你能在元机器人 noindex 中改变头文件,你就不应该使用x机器人标签吧。Robots.txt Disallow &meta Robots noindex这是我看过的最常见的冲突:我之所以青睐meta Robots“noindex”的原因是因为它可以有效的阻止一个页面被索引,同时它还还是可以传递权重到连接这个页面的更深层次的页面。这是一个双赢的方法。robots.txt文件不允许完全限制搜索引擎查看页面上的信息(以及其中有价值的内部链接),特别是不能限制url被索引。有什么好处?我曾经单独写过一篇关于这个主题的文章。如果两个标签都使用,robots.txt保证会使meta Robots noindex 不被蜘蛛看到。你会受到robots.txt中disallow的影响并且错过了所有的meta Robots noindex 带来的所有好处。文章出处为 上海丽姿鸥,网站优化专家,转载请保留出处!不胜感激!
H. 怎么才能让蜘蛛不抓取整个网站
Robots.txt 是存放在站点根目录下的一个纯文本文件。虽然它的设置很简单,但是作用却很强大。它可以指定搜索引擎蜘蛛只抓取指定的内容,或者是禁止搜索引擎蜘蛛抓取网站的部分或全部内容。
使用方法:
Robots.txt 文件应该放在网站根目录下,并且该文件是可以通过互联网进行访问的。
例如:如果您的网站地址是 http://www..com/那么,该文件必须能够通过 http://www..com/robots.txt 打开并看到里面的内容。
格式:
User-agent:
用于描述搜索引擎蜘蛛的名字,在" Robots.txt "文件中,如果有多条User-agent记录说明有多个搜索引擎蜘蛛会受到该协议的限制,对该文件来说,至少要有一条User-agent记录。如果该项的值设为*,则该协议对任何搜索引擎蜘蛛均有效,在" Robots.txt "文件中,"User-agent:*"这样的记录只能有一条。
Disallow:
用于描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以是部分的,任何以Disallow开头的URL均不会被Robot访问到。
举例:
例一:"Disallow:/help"是指/help.html 和/help/index.html都不允许搜索引擎蜘蛛抓取。
例二:"Disallow:/help/"是指允许搜索引擎蜘蛛抓取/help.html,而不能抓取/help/index.html。
例三:Disallow记录为空说明该网站的所有页面都允许被搜索引擎抓取,在"/robots.txt"文件中,至少要有一条Disallow记录。如果"/robots.txt"是一个空文件,则对于所有的搜索引擎蜘蛛,该网站都是开放的可以被抓取的。
#:Robots.txt 协议中的注释符。
综合例子 :
例一:通过"/robots.txt"禁止所有搜索引擎蜘蛛抓取"/bin/cgi/"目录,以及 "/tmp/"目录和 /foo.html 文件,设置方法如下:
User-agent: *
Disallow: /bin/cgi/
Disallow: /tmp/
Disallow: /foo.html
例二:通过"/robots.txt"只允许某个搜索引擎抓取,而禁止其他的搜索引擎抓取。如:只允许名为"slurp"的搜索引擎蜘蛛抓取,而拒绝其他的搜索引擎蜘蛛抓取 "/cgi/" 目录下的内容,设置方法如下:
User-agent: *
Disallow: /cgi/
User-agent: slurp
Disallow:
例三:禁止任何搜索引擎抓取我的网站,设置方法如下:
User-agent: *
Disallow: /
例四:只禁止某个搜索引擎抓取我的网站如:只禁止名为“slurp”的搜索引擎蜘蛛抓取,设置方法如下:
User-agent: slurp
Disallow: /
I. 请教关于HTTP响应头的设置
有的网站会在服务器运行一段时间后down掉,有很多原因可能造成这种现象:比如tomcat堆和非堆内存设置不足,程序没能释放内存空间造成内存溢出,或者某些进程一直运行没能释放,造成cup资源大量消耗。但除了程序本身的原因,还有可能是客服端访问造成(当然这个客户端也包含如蜘蛛软件等搜索引擎),如果服务器和客户端建立的是长链接(可以用”netstat -a”命令查看网络访问信息),这就需要对http响应头的connection做一定的设置。
在http1.1中request和reponse header中都有可能出现一个connection头字段,此header的含义是当client和server通信时对于长链接如何进行处理。在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。
不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。
HTTP Connection的close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的TCP连接。
如何在程序中设置:可以在过滤器中加入:response.setHeader(“connection”, “close”);
以下内容来自: HTTP Keep-Alive详解
HTTP Keep Alive
HTTP Keep-Alive 很大程序上被误解了,下面介绍一下它在HTTP/1.0和HTTP/1.1版本下是如何工作的,以及其在JAVA中的运行原理。
HTTP是一个请求<->响应模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息。在老的HTTP版本中,每个请求都将被创建一个新的客户端->服务器的连接,在这个连接上发送请求,然后接收请求。这样的模式有一个很大的优点就是,它很简单,很容易理解和编程实现;它也有一个很大的缺点就是,它效率很低,因此Keep-Alive被提出用来解决效率低的问题。
HTTP/1.0
在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP请求头中添加一个字段 Connection: Keep-Alive,当服务器收到附带有Connection: Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接
HTTP/1.1
在HTTP/1.1版本中,官方规定的Keep-Alive使用标准和在HTTP/1.0版本中有些不同,默认情况下所在HTTP1.1中所有连接都被保持,除非在请求头或响应头中指明要关闭:Connection: Close ,这也就是为什么Connection: Keep-Alive字段再没有意义的原因。另外,还添加了一个新的字段Keep-Alive:,因为这个字段并没有详细描述用来做什么,可忽略它
Not reliable(不可靠)
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。另外,Keep-Alive也不能保证客户端和服务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持连接特性,否则会有意想不到的后果
Keep-Alive和POST
在HTTP1.1细则中规定了在一个POST消息体后面不能有任何字符,还指出了对于某一个特定的浏览器可能并不遵循这个标准(比如在POST消息体的后面放置一个CRLF符)。而据我所知,大部分浏览器在POST消息体后都会自动跟一个CRLF符再发送,如何解决这个问题呢?根据上面的说明在POST请求头中禁止使用Keep-Alive,或者由服务器自动忽略这个CRLF,大部分服务器都会自动忽略,但是在未经测试之前是不可能知道一个服务器是否会这样做。
以下内容来自: http://liugong.blog.163.com/blog/static/178272375201141344312315/
HTTP无状态协议和Connection:Keep-Alive容易犯的误区
名词解释:
HTTP无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系
如果你要实现一个购物车,需要借助于Cookie或Session或服务器端API(如NSAPI and ISAPI)记录这些信息,请求服务器结算页面时同时将这些信息提交到服务器
当你登录到一个网站时,你的登录状态也是由Cookie或Session来“记忆”的,因为服务器并不知道你是否登录
优点:服务器不用为每个客户端连接分配内存来记忆大量状态,也不用在客户端失去连接时去清理内存,以更高效地去处理WEB业务
缺点:客户端的每次请求都需要携带相应参数,服务器需要处理这些参数
Keep-Alive:参考另外一篇文章HTTP Keep-Alive 详解
容易犯的误区:
1、HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
2、从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
3、Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
以下内容来自:http://www.l99.com/EditText_view.action?textId=446020&src=
Keep-Alive简介及在Tomcat中配置
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上 的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive功能对资源利用的影响尤其突出。 此功能为HTTP 1.1预设的功能,HTTP 1.0加上Keep-Alive header也可以提供HTTP的持续作用功能。
Keep-Alive: timeout=5, max=100
timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接
就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。
Tomcat中的相关设置,在server.xml 中的Connector 元素中。
keepAliveTimeout:
此时间过后连接就close了,单位是milliseconds
maxKeepAliveRequests:
最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间).
maxKeepAliveRequests=”1″就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。
<Connector executor=”tomcatThreadPool”
port=”80″ protocol=”HTTP/1.1″
connectionTimeout=”60000″
keepAliveTimeout=”15000″
maxKeepAliveRequests=”1″
redirectPort=”443″
maxHttpHeaderSize=”8192″ URIEncoding=”UTF-8″ enableLookups=”false” acceptCount=”100″ disableUploadTimeout=”true”/>