Http协议

我们两清 提交于 2020-03-20 23:50:43

简介

HTTP(Hyper Text Transfer Protocol)是超文本传输协议。它是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。

浏览器和服务器信息交换过程:

1.建立连接

2.发送请求信息

3.回送响应信息

4.关闭连接

由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

HTTP协议是一个无状态的协议

无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了(Cookie技术和Session技术将在后续博文中进行详细的讲述)

HTTP1.1支持持续连接,一次连接可以发送多次请求

HTTP1.0,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个对象,严重影响客户机和服务器的性能。
HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

实际上,HTTP是通过'Connection: Keep-Alive ' 来保持持续的连接。Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。

工具

①http通讯查看软件_Http Watcher

我们可以通过一种叫做HttpWatcher的软件来查看客户端和服务器的通讯状态。Http

 ②http通讯查看软件_Firebug

Firebug是网页浏览器 Mozilla Firefox 下的一款开发类插件,现属于Firefox的五星级强力推荐插件之一。它集HTML查看和编辑、JavaScript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。例如 Yahoo! 的网页速度优化建议工具 YSlow。

Firebug 也是一个除错工具。用户可以利用它除错、编辑、甚至删改任何网站的CSS、HTML、DOM、与JavaScriptt代码。

我们在前面讲授JAVASCRIPT中已经学习使用了Firebug。现在我们开始使用他的网络通讯查看功能,该功能类似于我们刚刚看到的Http Watcher软件。

格式

①请求

一个完整的请求消息包括:一个请求行、若干消息头、实体内容

请求行格式:请求方式  资源路径  HTTP版本号

1. GET方式:

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">GET  http://www.baidu.com?name=aaa&password=bbb   HTTP/1.1  
  2. Host: www.baidu.com  
  3. Accept:*/*  
  4. Pragma: no-cache  
  5. Cache-Control: no-cache  
  6. Referer: http://www.baidu.com  
  7.   
  8. User-Agent:Mozilla/4.04[en](Win95;I;Nav)</span>  

拿网上的一张图来解释其中的奥秘:

2. POST方式:

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">POST  http://www.baidu.com   HTTP/1.1  
  2. Host: www.baidu.com  
  3. Accept:*/*  
  4. Pragma: no-cache  
  5. Cache-Control: no-cache  
  6. Referer: http://www.baidu.com  
  7.   
  8. User-Agent:Mozilla/4.04[en](Win95;I;Nav)  
  9. Content-Length:45  
  10.   
  11. name=aaa&password=bbb </span>  

②响应

一个完整的响应消息包括:状态行,一个或多个应答头,一个空行,响应实体

状态行格式:

1.HTTP版本号 状态码 原因叙述

2.状态码:200(一切正常),404(所请求资源不存在),500(服务器内部程序错误)

通用消息头

通用消息头指的是既可用于请求消息、又可用于响应消息。

1.Connection:用于指定处理完本次请求/响应后,是否还要急需保持连接。

2.Date:产生当前消息的时间。

3.Pragma:no-cache.

4.Cache-Control:指示浏览器或服务器缓存的具体策略

5.Content-Length:表示(请求/响应)正文的长度。

请求

1.Accept:浏览器可接受的MIME类型。

2.Accept-Charset:浏览器可接受的字符集。

3.Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

1.Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

2.Connection:表示是否需要持久连接。

3.Content-Length:表示请求消息正文的长度。

4.Host:初始URL中的主机和端口。

5.Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 

6.User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

响应头

1.Allow 服务器支持哪些请求方法(如GET、POST等)

2.Server处理请求的原始服务器的软件信息

3.Location 表示客户应当到哪里去提取文档。

4.Refresh:告诉浏览器过n秒后自动刷新页面

5.Content-Type 表示实体文档属于什么MIME类型。

6.Content-Length 返回的实体内容的长度

7.Last-Modified 文档的最后改动时间。

8.Content-Location:实体所在的实际位置路径

业务思想

学习HTTP协议是进入B/S业务最初的一步,正式开启浏览器工作区的服务模式,作为互联网上应用最为广泛的协议之一,以其简单、应用广泛等特点.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!