<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>寂静的深海 &#187; HTTP</title>
	<atom:link href="http://www.deepseath.com/?feed=rss2&#038;tag=http" rel="self" type="application/rss+xml" />
	<link>http://www.deepseath.com</link>
	<description></description>
	<lastBuildDate>Mon, 29 Jan 2024 09:55:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PHP发送header头404信息</title>
		<link>http://www.deepseath.com/?p=1018</link>
		<comments>http://www.deepseath.com/?p=1018#comments</comments>
		<pubDate>Sat, 12 Nov 2011 12:53:02 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[实验室]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=1018</guid>
		<description><![CDATA[其实很简单，直接上代码再解释。 if ( stripos(php_sapi_name(),'cgi') === 0 ) { @header('Status: 404 Not Found',true); } else { @header( (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1').' 404 Not Found'); } echo &#60;&#60;&#60;EOD &#60;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"&#62; &#60;html&#62;&#60;head&#62; &#60;title&#62;404 Not Found&#60;/title&#62; &#60;/head&#62;&#60;body&#62; &#60;h1&#62;Not Found&#60;/h1&#62; &#60;p&#62;The requested URL was not found on this server.&#60;/p&#62; &#60;/body&#62;&#60;/html&#62; EOD; exit; 其实正常情况下只需要header(&#8216;HTTP/1.1 404 Not [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=1018</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows2003计划任务实现服务器自动重启</title>
		<link>http://www.deepseath.com/?p=989</link>
		<comments>http://www.deepseath.com/?p=989#comments</comments>
		<pubDate>Thu, 29 Sep 2011 02:36:28 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Win2003]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[计划任务]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=989</guid>
		<description><![CDATA[最近服务器刚刚更换了一块新硬盘，同时也将PHP升级了一下，然后不知道什么原因（因为这两个维护导致的或是其他的）IIS运行PHP的站点每隔一阵就会无法访问，而静态页面的站点是可以访问的，最为奇怪的是，貌似每次发生这样的故障的间隔期间基本是差不多的，尝试检查了一下，没发现什么意外情况，连系统的日志以及IIS自身的日志都没有什么异常记录。同时也是比较懒得详细检查，所以干脆直接搞了定时重启服务器。 这绝对是一个非常非常非常懒惰的行为，可确实是没什么更好的办法了，如果有朋友能知道这是怎么个原因的话不妨告诉一下，千恩万谢！！！ 先搞定个Windows计划任务自动定时重启机器吧。关于设置Windows计划任务的操作本没什么技术含量本不想弄的，但刚巧前一阵还真有几个朋友问过这方面的操作的，看来有必要普及一下，呵呵。如果你比较熟悉Windows计划任务了，可以不用往下看了^_^ 首先，得确定一个访问量相对比较低的时段进行重启操作，根据若干的站点流量日志分析，基本上访问量比较低的时段几乎平均在每日的凌晨4点左右，估计大多数人这个时候都在睡觉吧^^，正是重启的好时间。 确定好重启的时间后，开始设置计划任务，打开Windows控制面板，找到“计划任务”，打开。点击“添加新计划任务”，会弹出一个“计划任务向导”对话窗，点击“下一步”，会选择程序，点击浏览，找到“c:\windows\system32\shutdown.exe”确定，然后下一步，设置计划任务的名称和执行时间。“下一步”后，设置具体的时间。再下一步设置Windows登录用户名和密码，点击确认完成。然后再次打开这个计划任务的高级属性。将运行内的执行程序后面加入两个参数。“/r /f”，变成“c:\windows\system32\shutdown.exe /r /f”这样执行的就是强制重启计算机命令了。 如下图：]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=989</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS的一个优化策略</title>
		<link>http://www.deepseath.com/?p=956</link>
		<comments>http://www.deepseath.com/?p=956#comments</comments>
		<pubDate>Sun, 18 Sep 2011 16:26:43 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=956</guid>
		<description><![CDATA[Win系统以IIS做web服务是首选，在Windows2003以后的IIS可以对每个站点设置不同的“应用程序池”，这样的好处是当某个站点当掉的时候不至于影响其他站点。 实际应用中，我比较主张将网站的静态文件存放于单独的一个站点，如果有条件的话，甚至为这个站点单独启用一个于主服务站点不同的域名（提高页面数据的并行下载能力），并将这个静态站点的执行权限全部关闭，因为是纯静态的数据不需要执行脚本。为其设置Header有效期。以及将ETag设置为空。这样下来，这个静态文件站点初具一些优化条件了。但还有一个地方需要注意，那就是它所使用的应用程序池，为这个站点单独设置一个应用程序池是肯定的，另外，因为这个站点不执行脚本，只是静态数据，因此也就不涉及到工作进程回收的问题了，这个时候将应用程序池设定内的“回收工作进程池”应该关闭，这样确保站点不会回收进程导致iis的意外发生。 这样做下来，这个静态文件站点应该相对效率就高一些了。]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=956</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP的Snoopy.class.php</title>
		<link>http://www.deepseath.com/?p=884</link>
		<comments>http://www.deepseath.com/?p=884#comments</comments>
		<pubDate>Wed, 17 Aug 2011 08:01:11 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTP协议]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snoopy]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=884</guid>
		<description><![CDATA[使用PHP读取HTTP页面基本使用Snoopy，使用简单方便易用。 最近在使用过程中发现一些问题，读取某些服务器的时候会发现获取不到页面内容。 留意Snoopy的Header请求头的时候发现，对于HOST请求是类似 HOST: hostname:port 看代码，只要端口存在，就使用该方式发送请求。 但观察浏览器请求时发现如果端口为80的时候，会省略掉端口号。 按这个方式改造一下Snoopy的代码，加入判断端口号，如果端口号为80的情况下，则直接使用 HOST: hostname 否则使用 HOST: hostname:port 这样改写代码后上面的问题就解决了。 问题的原因不太清楚，呵呵，对于HTTP协议始终就是模棱两可一知半解，实用至上主义，问题解决就不管了。 另外，还有一个问题就是，自官方下载到的Snoopy.class.php的编码问题，这个文件使用的是“阿拉伯语（Windows）”进行编码的，至少在这个编码下查看没有乱码。 为了方便日后改写代码，我是利用阿拉伯语（Windows）打开，然后Copy无乱码的代码另存为UTF-8编码，方便日后更改处理。]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=884</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用fastcgi_finish_request提高页面响应速度</title>
		<link>http://www.deepseath.com/?p=851</link>
		<comments>http://www.deepseath.com/?p=851#comments</comments>
		<pubDate>Wed, 13 Apr 2011 16:23:27 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[日积月累]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[服务]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=851</guid>
		<description><![CDATA[当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法. 听起来可能有些茫然,我们通过几个例子来说明一下： &#60;?php echo '例子：'; fastcgi_finish_request(); /* 响应完成, 关闭连接 */ /* 记录日志 */ file_put_contents('log.txt', '生存还是毁灭,这是个问题.'); ?&#62; 通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行！ 合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子： &#60;?php echo '例子：'; file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 上传视频\n&#34;, FILE_APPEND); fastcgi_finish_request(); sleep(1); file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 转换格式\n&#34;, FILE_APPEND); sleep(1); file_put_contents('log.txt', date('Y-m-d H:i:s') . &#34; 提取图片\n&#34;, FILE_APPEND); ?&#62; 代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志. 末了给您提个醒,Yahoo在Best Practices for Speeding Up Your [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=851</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chrome 11 使用新的 user agent 字符串</title>
		<link>http://www.deepseath.com/?p=848</link>
		<comments>http://www.deepseath.com/?p=848#comments</comments>
		<pubDate>Sat, 02 Apr 2011 00:16:12 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[网络文摘]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=848</guid>
		<description><![CDATA[　　如果网站想要了解他们的读者使用的什么浏览器，最简单的办法就是检测读者浏览器客户端的user agent（用户代理，也称 UA string）了，在使用浏览器打开网页的时候，客户端都会发送这个包含浏览器版本和操作系统的字串，让读者所访问的网站能够掌握读者的一些最基本的资 料。Google Chrome 当然也有这个字串，如目前 Chrome 10 正式版的 user agent 就是下面这样的，其他之前的版本的格式也基本类似，只是版本号不同罢了。 Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 　　不过今天 Google 的软件工程师 Peter Kasting 在 Chromium 官方博客宣布 Chrome 11将对 Chrome 的 user agent 进行除版本号之外的改动，目前 Beta 和 [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=848</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>域名转移注册商操作完毕</title>
		<link>http://www.deepseath.com/?p=754</link>
		<comments>http://www.deepseath.com/?p=754#comments</comments>
		<pubDate>Wed, 28 Jul 2010 07:20:04 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[程序人生]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[域名转移]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=754</guid>
		<description><![CDATA[2010年7月22日申请了eXinQing.net的域名转移注册商（http://www.deepseath.com/?p=731） 当日已经顺利进行确认信确认。 直到7月26日中午，突然发现域名DNS无法解析，询问后得知只能是等待，这状况一直持续到7月28日早上8点左右，发现域名已经完全转移完毕，且可以在新的注册商处进行管理。 只是仍旧无法进行DNS设置解析。联系客服后终于在11点的时候可以进行修改了。 经过设置后，根据网友的报告，大概在12点半左右国内已经陆续可以正常解析访问了。 通过本次域名转移注册商得到几个经验就是： 1.注册域名最好选择一些知名的有品牌的注册商，要考虑到日后维护、缴费、迁移等等问题的方便性以及代价（比如，我这个域名就交给之前注册商500元的手续费，TMD） 2.做域名迁移前一定要做好预案，万一无法解析的时候应该通过一些手段来避免用户无法访问。因为有时候域名迁移DNS会中断的，当然如果幸运其实整个过程DNS都是可以正常解析的。 原本其实还有备用域名的，可惜早先没想过这样的问题，只是将备用域名做了一个永久转向。 现在看来，得想个方式在未来能够尽量避免这样的问题。 始终对于多域名访问有一个困惑： 我想实现一种方式，平时只用一个域名访问（当然也包括这个域名的二级域名），其他域名只是转向。如果万一这个域名无法解析的时候，只要通过一些轻微（记住是轻微）的更改就可以轻易的切换到两个域名同时可以访问的状态。 自己琢磨了几个方案发现都不行:(原因是因为，几个栏目之间的应用其实还有一些内部通讯，如果要更换域名的代价太大了，操作非常多——特别是栏目和应用特别多的情况下。 不知道大家都有什么好办法？给个建议哦~~]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=754</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又见《黑猫警长》</title>
		<link>http://www.deepseath.com/?p=617</link>
		<comments>http://www.deepseath.com/?p=617#comments</comments>
		<pubDate>Fri, 26 Feb 2010 10:33:43 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[影音有感]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[动画]]></category>
		<category><![CDATA[电影]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=617</guid>
		<description><![CDATA[刚刚看新闻的时候发现一篇关于电影版《黑猫警长》的，原来经典的动画片《黑猫警长》要拍成电影啦，哈哈。想法真好呀，很怀念小时候看的黑猫警长已经看黑猫警长时的日子…… 期待之余其实也有点害怕，电影版可千万别糟蹋了经典哦~~ 不过，看到几张海报，效果应该不错，黑猫警长大大的眼睛，还有一只耳的狼狈相，还有那些可爱的警长手下小灰猫们^_^ 据说是4月份左右会上映，真的有一些期待，并且期望效果不会令人失望…… 还有哦，据说一只耳的配音是“唐老鸭”李扬，哈哈，估计效果应该不错^_^ 看海报喽~~]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=617</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTTP协议的那些事儿</title>
		<link>http://www.deepseath.com/?p=567</link>
		<comments>http://www.deepseath.com/?p=567#comments</comments>
		<pubDate>Wed, 23 Dec 2009 01:36:40 +0000</pubDate>
		<dc:creator>Deepseath</dc:creator>
				<category><![CDATA[网络文摘]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTP协议]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.deepseath.com/?p=567</guid>
		<description><![CDATA[什么是http连接？一张页面加载过程中，又是图片又是样式、脚本，对于这些东西的请求，是共用一个连接还是多个连接？ 网上有人说，为了节省连接数，应该尽量将外部CSS，js合并，或者内联；甚至图片也合成一张，再用CSS定位。显然，在这里，一个请求就用一个连接，请求完成连接即被关掉。 但IIS里，有选项“保持HTTP连接”，且有超时时间可供设置。如果每请求一样东西，就开启一个连接，并且这个连接迟迟不死，保持激活，那么要多少连接才够用？这里的意思，应该是一个连接可以供多次使用。 究竟哪个才对？ 其实都对。 http协议无状态，无连接。无连接的含义就是限制每次连接只处理一个请求，收到应答后即断开。但据说这个是http1.0。 http1.1里，提出了持久连接（persistentconnection）的概念，也就是说同一条 HTTP连接，可以依次处理多个请求。据说目前大多数浏览器都支持这个。想想也有道理，建立一个http连接，消耗的成本是很高的，类似数据库连接，所以 我们都尽量在一个数据库连接里完成所有的操作，正如你到超市里买东西，不可能去一趟只买一样，不然的话，买齐所有东西天都黑了。 不过，即使有持久连接的概念，还是有点疑惑:同一张页面真的只用一个连接吗？假如有些东西特别大，比如图片，其他元素等不及了怎么办？会不会另外开辟一个连接？http超时时间如果都设20分钟，未免太浪费了吧？ 另外，就算同一张页面只用一个连接，将css、js、图片合并，也有意义。因为数量少了，发送的请求也少了，这个对性能应该也有影响。 ========================================= 附录1： 一个典型的网页，是由一个 html 文件和内嵌的各类元素组成的，这些元素包括页面内的图片，css文件，javascript 文件等等。每一个内嵌的元素在 HTTP 协议的层面上和那个 html文件是没有区别的：也就是都需要浏览器去服务器上抓下来。一个早期典型的浏览器是这样实现的：当用户敲入网址之后，浏览器和服务器建立连接，请求 这个html 页面，然后边接收服务器发送的 html页面，边解析，碰到内嵌元素，可以立即开第二条连接请求。另外，如果内嵌元素很多，他可能会开多条连接同时请求。当所有需要的元素都下载完毕之 后，浏览器就会将页面画出来。这个过程就是最早期的 HTTP/1.0 协议所设想的浏览器实现。 HTTP/1.0 这种多连接的运作模式是可以改进的。建立 TCP连接的过程是这样：客户端给服务器发一个网络包说我要和你建立连接，服务器收到之后回一个网络包说“我愿意”，然后客户端要再发给服务器一个网络包 说“好那咱们开始传数据吧”。这一来一去三个包才能建立 TCP连接。连接建立之后，浏览器给服务器发请求，服务器给浏览器回应。完事之后又要来回几个网络包关闭 TCP连接。如果页面有很多文件长度很短的元素，每个元素都需要单建一条连接就会导致网络上大量的都是 TCP 建立连接和断开连接的网络包。另外，TCP有一个特性叫做 slow start，其含义可以大致这样解释：TCP连接要求发送端发送一定数量的网络包之后接收端就要回一个“我收到”的网络包，而且网络包在经过每个路由器的 时候包头都要被重写，所以在网络不丢包的情况下网络包越大网络的效率就越高。TCP 连接寻找最优网络包大小的方法是，在 TCP连接建立的初期，网络包的大小是很小的，根据网络状况，两端的程序才会逐步增大网络包的大小以适应带宽提高网络传输的效率。所以浏览器给服务器发请 求，如果每发一个请求就关闭连接的话，那这个连接的数据传输很难达到带宽所能承载的速度。 基于这种种原 因，HTTP/1.1 很快出来了，提出了持久连接（persistentconnection）的概念，也就是说同一条 HTTP连接，可以依次处理多个请求，同时用一定的机制保证各个请求之间的分离性。具体的操作过程是：服务器给浏览器发送回应之后，并不马上关闭连接；浏 览器判断上一个请求的回应已经收完的情况下，可以在这同一个连接上发第二个请求。这种运作模式大大减少了网络包，实验也表明这种做法很有效。但是，由于服 务器上保持连接要占用一定的资源，所以一般服务器不会永久保持持久连接，而且也不推荐浏览器和服务器之间建立过多的持久连接。 持 久连接可以进一步提速。这就是 pipelining了。上面可以看到，浏览器需要等待持久连接里上一个请求的回应完全收完才能发送后面的请求。如果和服务器的连接比较慢，往往持久连接 大部分时间都花在等待而非数据发送/接收上。pipelining的意思是，浏览器可以在一个持久连接里一次给服务器发送多个请求，服务器在这个连接上依 次回应这些请求。这种运作方式和浏览器缓存结合起来的时候会尤其有效果。比方，图片浏览过后会存在浏览器缓存中，再次请求的时候浏览器会对服务器说，我这 里已经有这个图片的缓存了，修改时间是XXXX，如果服务器上这个图片在这之后没有修改过，就不用重发了。这种情况下，服务器会发一个很短的 304 Not Modified [...]]]></description>
		<wfw:commentRss>http://www.deepseath.com/?feed=rss2&#038;p=567</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
