HTTP协议简介

写以前推荐一本书,写的很好,能够看看
点我下载-->图解HTTPgit

概念

协议是指计算机通讯网络中两台计算机之间进行通讯所必须共同遵照的规定或规则,超文本传输协议(HTTP)是一种通讯协议,它容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。web

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通讯的规则,经过因特网传送万维网文档的数据传送协议。浏览器

HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。缓存

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。安全

在Internet中全部的传输都是经过TCP/IP进行的。HTTP协议做为TCP/IP模型中应用层的协议也不例外。HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。服务器

HTTP默认的端口号为80,HTTPS的端口号为443。网络

浏览网页是HTTP的主要应用,可是这并不表明HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通讯的双方都遵照这个协议,HTTP就能有用武之地。好比我们经常使用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其余的协议)。多线程


特色

HTTP协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,没法实如今客户端没有发起请求的时候,服务器将消息推送给客户端。并发

HTTP协议的主要特色可归纳以下:app

1.支持客户/服务器模式。支持基本认证和安全认证。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。

3.灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.HTTP 0.9和1.0使用非持续链接:限制每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开链接。HTTP1.1使用持续链接:没必要为每一个web对象建立一个新的链接,一个链接能够传送多个对象,采用这种方式能够节省传输时间。

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。

无状态协议: 协议的状态是指下一次传输能够“记住”此次传输信息的能力。 http是不会为了下一次链接而维护此次链接所传输的信息,为了保证服务器内存。 好比客户得到一张网页以后关闭浏览器,而后再一次启动浏览器,再登录该网站,可是服务器并不知道客户关闭了一次浏览器。 因为Web服务器要面对不少浏览器的并发访问,为了提升Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现一个浏览器在短短几秒以内两次访问同一对象时,服务器进程不会由于已经给它发过应答报文而不接受第二期服务请求。因为Web服务器不保存发送请求的Web浏览器进程的任何信息,所以HTTP协议属于无状态协议(Stateless Protocol)。


工做流程

一次HTTP操做称为一个事务,其工做过程可分为四步:
1)首先客户机与服务器须要创建链接。只要单击某个超级连接,HTTP的工做开始。
2)创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开链接。 若是在以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来讲,这些过程是由HTTP本身完成的,用户只要用鼠标点击,等待信息显示就能够了。

HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向链接的协议。所谓的端到端能够理解为进程到进程之间的通讯。因此HTTP在开始传输以前,首先须要创建TCP链接,而TCP链接的过程须要所谓的“三次握手”(具体内容请参考个人其余文章)。在TCP三次握手以后,创建了TCP链接,此时HTTP就能够进行传输了。


头域

每一个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前能够添加任何数量的空格符,头域能够被扩展为多行,在每行开始处,使用至少一个空格或制表符。

1.请求信息:
发出的请求信息格式以下:

  • 请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
  • (请求)头,例如Accept-Language: en
  • 空行
  • 可选的消息体 请求行和标题必须以做为结尾(也就是,回车而后换行)。空行内必须只有而无其余空格。
    图片加载失败!

三个部分分别是:请求行、消息报头、请求正文。

2.请求方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动做”)来代表Request-URI指定的资源的不一样操做方式:

  • OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也能够利用向Web服务器发送'*'的请求来测试服务器的功能性。
  • HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法能够在没必要传输整个响应内容的状况下,就能够获取包含在响应消息头中的元信息。该方法经常使用于测试超连接的有效性,是否能够访问,以及最近是否更新。
  • GET - 向特定的资源发出请求。注意:GET方法不该当被用于产生“反作用”的操做中,例如在web app.中。其中一个缘由是GET可能会被网络蜘蛛等随意访问。
  • POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建和/或已有资源的修改。
  • PUT - 向指定资源位置上传其最新内容。
  • DELETE - 请求服务器删除Request-URI所标识的资源。
  • TRACE- 回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT - HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。
  • PATCH - 用来将局部修改应用于某一资源。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。HTTP服务器至少应该实现GET和HEAD方法,其余方法都是可选的。此外,除了上述方法,特定的HTTP服务器还可以扩展自定义的方法。

GET和POST的区别:

1.GET提交的数据会放在URL以后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。

2.GET提交的数据大小有限制,最多只能有1024字节(由于浏览器对URL的长度有限制),而POST方法提交的数据没有限制。

3.GET方式须要使用Request.QueryString来取得变量的值,而POST方式经过Request.Form来获取变量的值。

4.GET方式提交数据,会带来安全问题,好比一个登陆页面,经过GET方式提交数据时,用户名和密码将出如今URL上,若是页面能够被缓存或者其余人能够访问这台机器,就能够从历史记录得到该用户的帐号和密码。


HTTP应用

  1. 断点续传的实现原理

HTTP协议的GET方法,支持只请求某个资源的某一部分
在链接断开重连时,客户端只请求该资源未下载的部分,而不是从新请求整个资源,来实现断点续传。
客户端经过并发的请求相同资源的不一样片断,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的FlashGet和迅雷基本都是这个原理。

  1. 多线程下载的原理

下载工具开启多个发出HTTP请求的线程; 每一个http请求只请求资源文件的一部分
以后合并每一个线程下载的文件。

  1. http代理   

http代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。   代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它以后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所须要的信息并传送给你的浏览器
http代理服务器的主要功能:
1.突破自身IP访问限制,访问国外站点
2.访问一些单位或团体内部资源
3.突破中国电信的IP封锁
4.提升访问速度
5.隐藏真实IP

  1. 虚拟主机

HTTP代理

这里详细说一下HTTP代理,上面已经说了代理的主要功能

代理服务器的工做流程:

  • 用户向代理发起TCP链接;
  • 代理接收用户的链接,双方创建链接;
  • 用户向代理发送HTTP请求,请求内容和没有HTTP代理的内容彻底相同;
  • 代理解析HTTP请求;
  • 代理向服务器发起TCP链接;
  • 服务器接收代理的链接;
  • 代理向服务器发送HTTP请求(这个HTTP请求是基于用户的HTTP请求,可能会有修改)
  • 服务器发送响应给代理;

若是不使用代理的话,HTTP的请求报文里会有一个
Connection: Keep-Alive
若是使用代理的话,HTTP的请求报文里Connection就变了
Proxy-Connection: Keep-Alive

HTTP 代理存在两种形式:普通模式、隧道代理

  • 普通模式
    原理:HTTP 客户端向代理服务器发送请求报文,代理服务器须要正确地处理请求和链接(例如正确处理 Connection:keep-alive),同时向目标服务器发送请求,并将收到的响应转发给客户端。

  • 隧道代理
    原理:HTTP 客户端经过HTTP的CONNECT方法请求隧道代理,建立一条到达任意目的服务器和端口的TCP链接,并对客户端和服务器之间的后继数据进行盲转发。

正向代理和反向代理

代理能够分为正向代理和反向代理两种。

正向代理须要客户端来配置,通常来讲咱们会经过浏览器或者操做系统提供的工具或者界面来配置。这个时候,代理对客户端不是透明的,客户端须要知道代理的地址而且手动配置。配置了代理,浏览器在发送请求的时候会对报文作特殊的修改。

反向代理对客户端是透明的,也就是说客户端通常不知道代理的存在,认为本身是直接和服务器通讯。咱们大部分访问的网站就是反向代理服务器,反向代理服务器会转发到真正的服务器,通常在反向代理这一层实现负载均衡和高可用的功能。并且这里也能够看到,客户端是不会知道真正服务器端的 ip 地址和端口的,这在必定程度上起到了安全保护的做用。


HTTP状态响应码

1**(信息类):表示接收到请求而且继续处理
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本

2**(响应成功):表示动做被成功接收、理解和接受
200——代表该请求被成功地完成,所请求的资源发送回客户端
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不肯定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求

3**(重定向类):为了完成指定的动做,必须接受进一步处理
300——请求的资源可在多处获得
301——本网页被永久性转移到另外一个URL
302——请求的网页被转移到一个新的地址,但客户访问仍继续经过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
303——建议客户访问其余URL或访问方式
304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,表明上次的文档已经被缓存了,还能够继续使用
305——请求的资源必须从服务器指定的地址获得
306——前一版本HTTP中使用的代码,现行版本中再也不使用
307——申明请求的资源临时性删除

4**(客户端错误类):请求包含错误语法或不能正确执行
400——客户端请求有语法错误,不能被服务器所理解
401——请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用
  HTTP 401.1 - 未受权:登陆失败
  HTTP 401.2 - 未受权:服务器配置问题致使登陆失败
  HTTP 401.3 - ACL 禁止访问资源
  HTTP 401.4 - 未受权:受权被筛选器拒绝
  HTTP 401.5 - 未受权:ISAPI 或 CGI 受权失败
402——保留有效ChargeTo头响应
403——禁止访问,服务器收到请求,可是拒绝提供服务
  HTTP 403.1 禁止访问:禁止可执行访问
  HTTP 403.2 - 禁止访问:禁止读访问
  HTTP 403.3 - 禁止访问:禁止写访问
  HTTP 403.4 - 禁止访问:要求 SSL
  HTTP 403.5 - 禁止访问:要求 SSL 128
  HTTP 403.6 - 禁止访问:IP 地址被拒绝
  HTTP 403.7 - 禁止访问:要求客户证书
  HTTP 403.8 - 禁止访问:禁止站点访问
  HTTP 403.9 - 禁止访问:链接的用户过多
  HTTP 403.10 - 禁止访问:配置无效
  HTTP 403.11 - 禁止访问:密码更改
  HTTP 403.12 - 禁止访问:映射器拒绝访问
  HTTP 403.13 - 禁止访问:客户证书已被吊销
  HTTP 403.15 - 禁止访问:客户访问许可过多
  HTTP 403.16 - 禁止访问:客户证书不可信或者无效
  HTTP 403.17 - 禁止访问:客户证书已经到期或者还没有生效
404——一个404错误代表可链接服务器,但服务器没法取得所请求的网页,请求资源不存在。eg:输入了错误的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**(服务端错误类):服务器不能正确执行一个正确的请求
HTTP 500 - 服务器遇到错误,没法完成请求
  HTTP 500.100 - 内部服务器错误 - ASP 错误
  HTTP 500-11 服务器关闭
  HTTP 500-12 应用程序从新启动
  HTTP 500-13 - 服务器太忙
  HTTP 500-14 - 应用程序无效
  HTTP 500-15 - 不容许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
HTTP 503:因为超载或停机维护,服务器目前没法使用,一段时间后可能恢复正常


^_<

相关文章
相关标签/搜索