HTTP是分布式、协作的、超媒体信息系统的应用层协议。
HTTP的工作方式:
HTTP是符合C/S模型的,总是Client端发起请求,整个过程,可以简单分为以下四步:
1)客户端发起请求,与服务器端完成‘TCP三次握手’;
2)客户端向服务器端发出“HTTP请求报文”;
3)服务器端在完成内部处理后,向客户端发出“HTTP响应报文”;
4)客户端与服务器端完成“TCP四次握手”;
超文本传输协议URL:
超文本传输协议URL方案规定的语法与语义:
http://host[:port][path]
其中:http://表示要使用的HTTP协议;
host:可用域名或IP地址
port:可选、端口号
path:可选、表示请求的资源所在的路径,缺省情况下为/
报文的组成:
1)起始行:start line
2)首部: Header
3)主体:body
使用wfetch工具获得的内容:(利用/*...*/注释解释) 1)HTTP请求报文: 请求行包括三个字段:方法字段、URI字段、HTTP版本字段 REQUEST: **************\n /*这是向百度发起的请求:HTTP版本显示为HTTP 1.1,方法为GET, 向服务器/申请资源;*/ GET / HTTP/1.1\r\n /*Host用来指定要请求的服务器主机为220.181.112.244*/ Host: 220.181.112.244\r\n Accept: */*\r\n /*这里是一个空行,而且是必须有的这个空行。这是HTTP协议的硬性规定*/ \r\n 2)HTTP响应报文: RESPONSE: **************\n /****行是状态行,包括三个字段:版本字段、状态字段、原因短语字段*/ /*下面,HTTP协议的响应表达是服务器使用的是HTTP协议1.1版本,而且找到了客户端所需要的资源,且会响应报文 发送给客户端,整个过程是正常的*/ HTTP/1.1 200 OK\r\n /*响应报文被发送出去的时间*/ Date: Sat, 31 May 2014 07:09:12 GMT\r\n /*指出包含的数据时HTML文本内容*/ Content-Type: text/html; charset=utf-8\r\n Transfer-Encoding: chunked\r\n Connection: Keep-Alive\r\n Vary: Accept-Encoding\r\n Set-Cookie: BAIDUID=95D095CC664A4682316B86A84AFFAFA9:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\n Set-Cookie: BDSVRTM=15; path=/\r\n Set-Cookie: H_PS_PSSID=6597_5229_1442_6855_5224_6505_4760_6018_6678_6708_6835_6775_6737; path=/; domain=.baidu.com\r\n P3P: CP=" OTI DSP COR IVA OUR IND COM "\r\n /*缓存控制*/ Cache-Control: private\r\n Expires: Sat, 31 May 2014 07:09:12 GMT\r\n X-Powered-By: HPHP\r\n /*Server域表明这个响应报文是BWS服务器发出的,且版本是1.1*/ Server: BWS/1.1\r\n BDPAGETYPE: 1\r\n BDQID: 0x81b75e41000579e6\r\n BDUSERID: 0\r\n /*这里的空行也是不能省略的*/ \r\n /*主体*/ .............
HTTP报文格式:
连接:
***HTTP连接的优势:
1)通过打开和关闭更少的TCP连接,将节约在路由器和主机上的CPU时间,且能够在主机上节约TCP协议控制块所使用的内存。
2)HTTP请求和响应能够如管道相互通过连接。管道允许客户端需要等待每一个响应就发出多个请求,允许单个TCP连接更有效地使用,花费更少的时间。
3)减少网络拥塞,通过减少由TCP打开引出的许多包,和通过允许TCP有充分时间来判断网络的拥塞状态。
4)后序请求的延迟养活了,因为没有花费时间在TCP俩接打开握手上。
5)HTTP能够更有好地进化,由于错误能够被报告,而不需要关闭TCP连接的处罚。
HTTP状态码:
信息性
100 Continue:客户端应该继续它的请求;
101 Switching Protocols:服务器理解并愿意答应客户端的请求;
成功
这类状态码表示客户端的请求成功被接收、理解和接受了;
200 OK:请求已经成功。
201 Created:请求全部成功,且创建了新新资源。
202 Accepted:请求已经接受处理,但是处理还没有完成。
203 Non-Authoriative Infomation:实体头部中返回的元信息不实在原始服务器有效地确定的集合,而是从本地或第三方拷贝收集的。
204 No Content:服务器已经完成请求;
205 Reset Content:服务器已经完成请求且用户代理应该复位引起请求发送的文档视图。
206 Partial Content: 服务器资源已经完成局部资源的GET请求;
重定向
这类状态码指示,需要用户代理采取更进一步的行为来完成请求。
300 Multiple Choices:所请求的资源符合表达式集合中的任何一个,每个都有它自己的特殊位置。
301 Moved Permannently:所请求的资源已经指定到一个新的***URI,且将来任何对该资源的引用都应该使用所返回的URI之一。
302 Found:所请求的资源临时存在不同的URI。
303 See Other:请求的响应可以再不同的URI中发现,且应该使用GET方法到该资源来获取它。
304 Not Modified:如果客户端执行条件GET请求,且允许访问,但文档没有变化,服务器用该响应码响应。
305 USE Proxy:所请求的资源必须通过Location域中给出的代理来访问。
306 : 保留;
客户端错误:
4xx类的状态码用于看起来客户端有错误的情况下。
400 Bad Request:服务器不能理解该请求,由于畸形的语法。客户端不应该重复没有经修改的请求。
401 unauthorized:请求需呀用户认证。
402 Payment Required:保留;
403 Forbidden:服务器理解请求,但拒绝完成它。
404 Not Found: 服务器不能匹配Request-URI的任何东西;
405 Method not Allowed:Request-Line 中指定的方法不允许用到由Request-URI标识的资源。
406 Not Acceptable:请求所标识的资源的内容特性不被请求中所发送的接受头部所接受,所以不能生成响应;
407:同401类似
408 Request Timeout:在服务器准备等待的时间内,客户端没有产生任何请求。
409 Conflict:请求没有完成,因为对资源现有状态的冲突;
410 Gone:所请求的资源不再服务器上有效,且不知道转发地址。
411 Length required:服务器拒绝接受没有定义的请求;
412 Precondition Failed:在一个或多个请求头部域给出的前提在服务器上测试评估失败。
413 :服务器拒绝处理请求,因为情趣实体长于服务器愿意或能够处理的长度;
414 :服务器拒绝服务请求,因为Request-URI长于服务器愿意解析的长度;
415 : 服务器拒绝服务请求,因为请求的实体是请求方法所请求的资源所不支持的格式;
416 : 服务器应该返回该状态码的响应,如果请求包括Range请求头部,且该域中的范围指定没哟覆盖任何选择西苑的当前长度;
服务器错误
由数字5打头的响应状态码表示服务器已经明显处于错误的状况下或没有能力执行请求;
500 Internal Server Error:服务器发生非预期情况,阻止它完成请求。
501 not implemented:服务器不提供完成请所需要的功能;
502 Bad Gateway:当作为网关或代理时,服务器从它靠近的上游服务器收到试图完成请求的无效响应。
503 Service unavailable:服务器当前不能处理请求,因为临时性的负载过重或服务器维护中;
504 Gateway Timeout:当作为网关或代理时,服务器试图完成请求是没有从URI指定我上游服务器或一些其它所需来访问的辅助服务器收到定时响应;
505 HTTP Version Not Supported:服务器不支持,或拒绝支持,请求消息中使用的HTTP协议版本。
HTTP缓存:
HTTP一般用在分布式信息系统,其性能可能通过使用响应缓存来改善。