通信协议之HTTP,UDP,TCP协议

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字头)

这一类型的状态码,代表请求已成功被服务器接收、理解、并接受
 
200——交易成功 
201——提示知道新文件的URL 
202——接受和处理、但处理未完成 
203——返回信息不确定或不完整 
204——请求收到,但返回信息为空 
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件 
206——服务器已经完成了部分用户的GET请求 
 

重定向(3字头)

这类状态码代表需要客户端采取进一步的操作才能完成请求。

 300——请求的资源可在多处得到 
301——删除请求数据 
302——在其他地址发现了请求数据 
303——建议客户访问其他URL或访问方式 
304——客户端已经执行了GET,但文件未变化 
305——请求的资源必须从服务器指定的地址得到 
306——前一版本HTTP中使用的代码,现行版本中不再使用 
307——申明请求的资源临时性删除 

 

请求错误(4字头)

这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
 
400——错误请求,如语法错误 
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字头)

这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
500——服务器产生内部错误 
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。

原文地址:https://www.cnblogs.com/Raymond201508/p/4748424.html