CPHTTPUDP:都是通信协议,即通信时遵循的规则。只有当双方按照这个规则“说话”时,对方才能理解或服务。TCP、HTTP、UDP的关系:TCP/IP是一个协议组,可以分为四层:网络接口层、网络层、传输层和应用层。在网络层,有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。传输层有TCP协议和UDP协议。在应用层,有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,HTTP本身就是一种协议,一种从Web服务器向本地浏览器传输超文本的传输协议。Socket:这是为实现上述通信过程而建立的通信通道。它的真正代表是客户端和服务器之间的一个通信过程。两个进程通过套接字进行通信,通信规则采用指定的协议。socket只是一种连接方式,不是协议,tcp,udp,简单的说(虽然不准确)是最基本的两种协议,很多其他的协议都是基于这两种协议的,比如http就是基于tcp的,使用socket可以创建tcp连接或者udp连接,也就是说socket可以用来创建任何协议的连接,因为其他协议都是基于这个的。让我们来看看与我们的互联网生活息息相关的协议:HTTP什么是Http协议?使用最广泛的协议,Http是一个应用层协议。当你浏览网页时,浏览器和网页服务器会通过HTTP在Internet上发送和接收数据。Http是一种基于请求/响应的无状态协议。也就是我们通常所说的Request/Response。URL:URL(统一资源定位符)地址用于描述网络上的资源。基本格式如下:schema://host[:port#]/path/.../?query-stringscheme指定下层使用的协议(例如:http、https、ftp)主机IP地址或HTTP服务器域名port#HTTP服务器默认端口为80,此时可以省略端口号。如果使用其他端口,则必须指定,例如http://www.cnblogs.com:8080/path访问资源的路径query-string发送给http服务器的数据anchor-锚点URL示例http://万维网。mywebsite.com/sj/t...Schema:httphost:www.mywebsite.compath:/sj/test/test.aspxQueryString:name=sviergn&x=trueAnchor:stuffRequest/ResponseofHTTP:先看结构请求消息,Request消息分为3部分。第一部分称为Requestline,第二部分称为Requestheader,第三部分为body。header和body之间有一个空行,结构如下图所示。第一行的Method表示请求方式,如“POST”、“GET”,Path-to-resore表示请求的资源,Http/version-number表示HTTP协议的版本号。使用“GET”方法时,正文为空。比如我们打开博客园首页请求如下GEThttp://www.cnblogs.com/HTTP/1.1Host:www.cnblogs.com抽象的东西很难理解,老感觉是假的。所谓眼见为实,我们只能理解我们实际看到的和记忆的。我们今天使用Fiddler来实际查看Request和Response。接下来,我们打开Fiddler抓取一个在博客园登录的Request,然后分析其结构。在Inspectors选项卡下可以看到Raw中完整的Request报文,如下图Accept函数:浏览器可以接受的媒体类型,例如:Accept:text/html表示浏览器可以接受发送的text/html类型由服务器返回,也就是我们常说的html文档,如果服务器不能返回text/html类型的数据,服务器应该返回一个406错误(不可接受)通配符*来表示任何类型,比如Accept:/表示浏览器可以处理所有类型,(一般浏览器会把这个发给服务器)Referer:功能:提供请求服务器的上下文信息,告诉服务器我来自哪个链接,比如从我的主页到一个朋友,他的服务器可以从HTTPReferer统计每天有多少用户点击我主页上的链接来访问他的网站。例如:Referer:http://translate.google.cn/?h...Accept-Language功能:浏览器声明它接受的语言。语言和字符集的区别:中文是一种语言,中文有多种字符集,如big5、gb2312、gbk等;例如:Accept-Language:en-usContent-Type功能:例如:Content-Type:application/x-www-form-urlencodedAccept-Encoding:功能:浏览器声明其接收的编码方式,通常指定压缩方式,是否支持压缩,支持什么压缩方式(gzip、deflate),(注意:这里不只是字符编码);例如:Accept-Encoding:gzip,deflateUser-Agent作用:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本。我们在线登录论坛的时候,经常会看到一些欢迎信息,上面列出了你的操作系统的名称和版本,你使用的浏览器的名称和版本,这往往让很多人觉得很神奇。实际上,服务器应用程序从User-Agent请求头字段中获取这些信息User-AgentRequest头字段允许客户端告诉服务器它的操作系统、浏览器和其他属性。例如:用户代理:Mozilla/4.0(兼容;MSIE8.0;WindowsNT5.1;Trident/4.0;CIBA;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729;.NET4。0C;InfoPath.2;.NET4.0E)连接示例: Connection:keep-alive当一个网页打开时,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭。访问此服务器上的网页将继续使用此已建立的连接。例如:Connection:close表示在一个Request完成后,客户端与服务器之间用于传输HTTP数据的TCP连接将被关闭。当客户端再次发送Request时,需要重新建立TCP连接。Content-Length作用:发送给HTTP服务器的数据长度。例如:Content-Length:38Host(发送请求时需要这个头域)功能:请求头域主要用于指定请求资源的Internet主机和端口号,通常是从HTTPURL中提取出来的例子:我们在浏览器中输入:http://www.guet.edu.cn/index....在浏览器发送的请求报文中,会包含Host请求头字段,如下:Host:http://www.guet.edu.cn这里使用默认端口号80。如果指定了端口号,则变为:Host:指定端口号。-cache功能完全一样Pargma只有一种用法,例如:Pragma:no-cacheCookie:功能:最重要的header,将cookie值发送给HTTP服务器Accept-Charset功能:浏览器声明它接收到的字符集,也就是本文前面介绍的各种字符集和字符编码,比如gb2312,utf-8(通常我们说Charset包括对应的字符编码方案);我们看一下Response报文的结构,和Request报文的结构基本一样。它也分为三个部分。第一部分称为Responseline,第二部分称为Responseheader,第三部分为body。header和body之间也有一个空行。结构如下图所示。www.aweb.cc”
