C#心路-第二篇-WebSite原理-网站的工作机制,协议协议!
本想多扯点篇幅,但是心中总结的核心内容却已经迫不及待的想要分享给大家了.
又但是知识是系统的,要现在就开始讲高级的,我想隔段时间我自己再看,也会很难明白.
好,这一讲工作机制,总而言之就是 “协议协议!”
那么你们现在想到哪些协议?
这个就是我们这讲的功课了,找到的请回复到这里.
OK,继续.
网站的结构:client <—(http等协议)-->service
前一讲我们已经知道了,打开网页就是把服务器的网页文件复制到客户端再通过浏览器打开,
OK,我们一步步来分析。
首先是客户端--浏览器,最常用的就是IE了,其次还有FF,GG等.
你要有兴趣的话,你自己也可以开发一个.当然我这里说的不是用Asp.net里的webbrowse控件组装个.
而是说完全的自己开发.
大家会不会觉得这非常困难,其实这?… 当然这非常困难,难在哪里?
我们不能因为没做过,不了解就觉得难就害怕它,而不去了解它.不光是做软件,而是做任何事都一样。
当我们了解足够了才能分析它,分析它的可行程度以及难点.
那么浏览器的难点在哪里?
我个人的理解是在于 Html,Css,Script等的解析以及呈现.请参照现在流行的 XHTML 1.0 标准.
解析很难,确实很难,但是我们只是要了解网站的工作机制,可以不涉及或者少量涉及到解析,那么就简单了。
剩下的功能大概分为如下几块:
1:通信层
2:界面
我尝试做了下,通讯层核心代码如下:
public string DownloadingString(string url)
{
StringBuilder Html = new StringBuilder();
Uri link = new Uri(url);
using (Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp | ProtocolType.IP))
{
sk.Connect(link.Host, link.Port);
if (sk.Connected)
{
//万能的字符串 协议都是拼和解析字符串
string getstr = @"GET " + link.PathAndQuery + @" HTTP/1.1
Host:" + link.Host + @"
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: " + DateTime.Now.ToString() + @"
";
byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(getstr);
sk.Send(bs);
byte[] rs = new byte[2048];
List<byte> lsbs = new List<byte>();
int i = sk.Receive(rs);
while (i > 0)
{
lsbs.AddRange(rs.ToList().GetRange(0, i));
if (sk.Available > 0)
{
i = sk.Receive(rs);
}
else
{
break;
}
}
Html.Append(System.Text.Encoding.UTF8.GetString(lsbs.ToArray()));
}
}
return Html.ToString();
}
但是现在很难找到个不压缩的网站,所以读出来的都还是乱码,得再加一层解压缩!!!
我这里是想要告诉你,http协议是怎么工作的,没错,它就是在tcp协议的之上在加一套字符串规则。
啊 万能的字符串!!!
现在浏览器的工作机制不那么神秘了吧?
做浏览器也没那么恐怖了吧
哈哈
就到这里,休息,休息,休息一下!
浙公网安备 33010602011771号