所在的位置: Web开发 >> HTTP >> HTTP协议基础

HTTP协议基础

HTTP由两部分组成:请求和响应。当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他资源)为止。   HTTP请求   HTTP请求的格式如下所示:

request-lineheadersblankline[request-body]

  在HTTP请求中,第一行必须是一个请求行(requestline),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。   在HTTP中,定义了大量的请求类型,不过主要关心的只有GET请求和POST请求。只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源。对于   请求行的第一部分说明了该请求是GET请求。该行的第二部分是一个斜杠(/),用来说明请求的是该域名的根目录。该行的最后一部分说明使用的是HTTP1.1版本(另一个可选项是1.0)。那么请求发到哪里去呢?这就是第二行的内容。   第2行是请求的第一个首部,HOST。首部HOST将指出请求的目的地。结合HOST和上一行中的斜杠(/),可以通知服务器请求的是   如果要获取一个诸如   注意只有第一行的内容发生了变化,它只包含URL中   要发送GET请求的参数,则必须将这些额外的信息附在URL本身的后面。其格式类似于:

URL?name1=value1name2=value2..nameN=valueN

  该信息称之为查询字符串(querystring),它将会复制在HTTP请求的请求行中,如下所示:

GET/books/?name=Professional%20AjaxHTTP/1.1Host:   注意,为了将文本“ProfessionalAjax”作为URL的参数,需要编码处理其内容,将空格替换成%20,这称为URL编码(URLencoding),常用于HTTP的许多地方(JavaScript提供了内建的函数来处理URL编码和解码)。“名称—值”(name—value)对用隔开。绝大部分的服务器端技术能够自动对请求主体进行解码,并为这些值的访问提供一些逻辑方式。当然,如何使用这些数据还是由服务器决定的。

  浏览器发送的首部,通常比本文中所讨论的要多得多。为了简单起见,这里的例子尽可能简短。

  另一方面,POST请求在请求主体中为服务器提供了一些附加的信息。通常,当填写一个在线表单并提交它时,这些填入的数据将以POST请求的方式发送给服务器。   以下就是一个典型的POST请求:

POST/runwit/helloword.JSP/HTTP/1.1Host:   从上面可以发现,POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User-Agent仍然存在,在后面有两个新行。其中首部Content-Type说明了请求主体的内容是如何编码的。浏览器始终以application/x-   正如前面所提到的,还有其他的HTTP请求类型,它们遵从的基本格式与GET请求和POST请求相同。下一步我们来看看服务器将对HTTP请求发送什么响应。   HTTP响应   如下所示,HTTP响应的格式与请求的格式十分类似:

status-lineheadersblankline[response-body]

  正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(statusline)通过提供一个状态码来说明所请求的资源情况。以下就是一个HTTP响应的例子:

HTTP/1.OKDate:Sat,31Dec:59:59GMTContent-Type:text/html;charset=ISO--1Content-Length:htmlheadtitleWroxHomepage/title/headbody!--bodygoeshere--/body/html

  在本例中,状态行给出的HTTP状态代码是,以及消息OK。状态行始终包含的是状态码和相应的简短消息,以避免混乱。最常用的状态码有:   ◆(OK):找到了该资源,并且一切正常。   ◆(NOTMODIFIED):该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。   ◆(UNAUTHORIZED):客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。   ◆(FORBIDDEN):客户端未能获得授权。这通常是在之后输入了不正确的用户名或密码。   ◆(NOTFOUND):在指定的位置不存在所申请的资源。   ◆:服务器内部错误。   在状态行之后是一些首部。通常,服务器会返回一个名为Data的首部,用来说明响应生成的日期和时间(服务器通常还会返回一些关于其自身的信息,尽管并非是必需的)。接下来的两个首部大家应该熟悉,就是与POST请求中一样的Content-Type和Content-Length。在本例中,首部Content-Type指定了MIME类型HTML(text/html),其编码类型是ISO--1(这是针对美国英语资源的编码标准)。响应主体所包含的就是所请求资源的HTML源文件(尽管还可能包含纯文本或其他资源类型的二进制数据)。浏览器将把这些数据显示给用户。   注意,这里并没有指明针对该响应的请求类型,不过这对于服务器并不重要。客户端知道每种类型的请求将返回什么类型的数据,并决定如何使用这些数据。









































去哪里治白癜风好
白癜风的治疗方法有哪些



转载请注明:http://www.guyukameng.com/http/1450.html

  • 上一篇文章:
  •   
  • 下一篇文章: