1、UDP,TCP,HTTP之间的关系
tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层,
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层有TCP,UDP协议
而在应用层有HTTP,FTP,DNS等协议
因此HTTP本身就是一个协议,是从WEB服务器端传输超文本,到本地浏览器的一个传输协议
2、Socked协议
是为实现以上各个协议而建立的一个通信管道,实际上就是代表了客户端与服务器端的一个通信进程,双方都是通过指定的socked进行通信,
客户端与服务器端都是通过指定的协议去进行通信的。
而socket只能是一种连接模式,它也是完全基于TCP,以及UDP这两个在传输层最基本的协议的。实际上有很多应用层上的协议是完全基于这两个
协议的,比如,HTTP协议就是基于TCP协议(TCP协议是可靠的,在发送和接收时都要计算校验和,在传输字节流时是基于三次握手的)的,
而socked则可以创建TCP或则UDP的连接,这就说明Socked可以创建任意在应用层上的连接,因为在应用层上的协议完全就是基于UDP与TCP的。
3、HTTP 超文本传输协议
HTTP是一个在应用层上的协议,浏览器与服务器端间就会通过HTTP协议在互联网上进行数据的传输以及接受,
HTTP协议是一个基于请求/响应模型的、无状态的传输协议。就是Request/Response模型。
来看一个URL的例子
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
Schema( 指定低层使用的协议(例如:http, https, ftp)): http
host ( HTTP服务器的IP地址或者域名): www.mywebsite.com
path (访问资源的路径): /sj/test/test.aspx
Query String ( 发送给http服务器的数据): name=sviergn&x=true
Anchor ( 锚): stuff
还有个port# : HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
4,HTTP协议之GET,POST
HTTP协议定义了很多的客户端与服务器端进行交互的方法,最基本的有4中,get,post,put,delete,
如果说一个URL地址代表着一个URL地址,那么HTTP中的这四中方法,分别对应着对这4种资源的查,改,增,删操作,
最常见得就是GET,与POST方方法了,GET一般用于获取/查询资源,POST一般用于更新资源,
GET与POST之间的区别如下:
(1)1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
(2)GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
(3)GET方式需要方法Request.QueryString来取得变量的值,这是通过地址栏来传值 ,而POSt方式通过Request.Form来获取变量的值,这是通过表单的提交来传值。
(4)GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
5、GET与POST两种方法的传参方式
1,GET的传参方式
通过超连接传递参数
<a href="/P04GetParams.ashx?id=2&name=ByA">
通过form表单传递参数,最值得注意的是以name的值为键,以value的值为键值对的值经行传递,
如下,传递给服务器的参数为"/P04GetParams.ashx?id=4";
<form method="get" action="/P04GetParams.ashx">
<input type="text" value="4" name="id" /><br />
<input type="submit" value="提交参数" /><br />
</form>
而服务器那边(是一般处理程序)接受参数用的语句是 context.Request.QueryString["id"];
2、POST传参方式 特点:将参数放在请求报文体中,同样是以name的值为键,以value的值为键值对的值经行传递,
<form method="post" action="/P04GetParams.ashx">
<input type="text" value="1" name="id" /><br />
<input type="text" value="ByPostForm" name="name" /><br />
<input type="submit" value="提交" />
</form>
在服务器端接受参数用的语句是 string id = context.Request.Form["id"];
6、HTTP状态码
所有状态码的第一个数字代表了响应的五种状态之一。
消息(1字头)
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
成功(2字头)
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
请求错误(4字头)
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求
也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下
一级服务器不能满足请求
服务器错误(5字头)
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本
100:Continue
101:Switching Protocols
102:Processing
200:OK
201:Created
202:Accepted
203:Non-Authoriative Information
204:No Content
205:Reset Content
206:Partial Content
207:Multi-Status
300:Multiple Choices
301:Moved Permanently
302:Found
303:See Other
304:Not Modified
305:Use Proxy
306:(Unused)
307:Temporary Redirect
400:Bad Request
401:Unauthorized
402:Payment Granted
403:Forbidden
404:File Not Found
405:Method Not Allowed
406:Not Acceptable
407:Proxy Authentication Required
408:Request Time-out
409:Conflict
410:Gone
411:Length Required
412:Precondition Failed
413:Request Entity Too Large
414:Request-URI Too Large
415:Unsupported Media Type
416:Requested range not satisfiable
417:Expectation Failed
422:Unprocessable Entity
423:Locked
424:Failed Dependency
500:Internal Server Error
501:Not Implemented
502:Bad Gateway
503:Service Unavailable
504:Gateway Timeout
505:HTTP Version Not Supported
507:Insufficient Storage
7、HTTP的无连接、无状态特点
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。
(1)无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。
Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。市场上的大部分 Web 服务器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive 功能对资源利用的影响尤其突出。
这样一来,客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。
(2)无状态
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。
客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。