HTTP协议分析

一、简介
  超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
  HTTP是一个客户端和服务器端请求和应答的标准,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
  
二、主要特征
1.支持客户端/服务器模型。

2.是简单快速:服务器当客户端请求服务时,只需传送请求方法和路径。请求方法常用的GET,HEAD,POST。每种方法规定了客户端与服务器联系的是不同的类型。

3.灵活。 HTTP允许任何类型的数据对象的传输。输入被传输的内容类型进行标记。

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

6.端口:默认HTTP的端口号为80,HTTPS的端口号为443。和TCP/IP进行通信

三、HTTP详解

1.和TCP/IP的关系
  HTTP协议通常在TCP协议之上,如果在TLS或SSL协议层之上,就成了HTTPS。
HTTP协议分析_第1张图片
  HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。当然,现在为了安全大家都使在使用https。一般的Web开发,都是构建在HTTP协议之上的Web应用
  
  HTTP URL格式如下:

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源的URI。

2.HTTP请求响应机制
  HTTP协议是客户端向服务器发送请求,服务器返回响应客户端。
HTTP协议分析_第2张图片
HTTP有两类报文:请求报文和响应报文

a.请求报文
  一般来说一个HTTP请求报文由请求行(request line)、请求报头(header)、空行、和请求数据(实体内容)4个部分组成。
  请求行(request line):请求行用于描述客户端的请求方式、请求的资源资源名称、以及使用的HTTP协议版本号。
  请求报头(header):用于描述客户端请求那台主机,以及一些客户端的一些环境信息等。

HTTP请求方式有GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT 、OPTIONS。PUT、DELETE、POST、GET分别对应着增删改查,常用的就是POST和GET。

GET请求或POST请求,都用于向服务器请求数据资源,这俩种方式的区别主要表现在数据传递上:
GET请求:可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分割。
特点:在URL地址后附带参数是有限制的,其数据容量通常不能超过1k。而且在浏览器连接请求地址中是可以看到的。
POST请求:可以在请求的实体内容中向服务器发送数据。
特点:传送的数据量没有限制。在浏览器连接请求地址中看不到

1.GET:请求获取Request-URI所标识的资源
2.POST:在Request-URI所标识的资源后附加新的数据
3.HEAD:请求获取由Request-URI所标识的资源的响应消息报头
4.PUT: 请求服务器存储一个资源,并用Request-URI作为其标识
5.DELETE :请求服务器删除Request-URI所标识的资源
6.TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
7.CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
8.OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求

b.响应报文
  HTTP响应由三个部分组成,分别是:状态行、响应报头、一个空格,响应正文(实体内容)。
  状态行:用于描述服务器对请求的处理结果。
  响应报头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会它回送的数据。
  实体内容:代表服务器向客户端回送的数据。
  
  HTTP响应的格式与请求的格式十分类似:

  <status-line>

  <headers>

  <blank line>

  [<response-body>]
  在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

状态行格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF
  HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值,如下:
1xx:指示信息–表示请求已接收,要求客户端继续提交下一次请求才能完成整个处理过程。
2xx:成功–表示请求已被成功接收并已完成整个处理过程,常用200。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

常见状态代码、状态描述如下:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是服务器拒绝提供服务。
404 Not Found:请求资源不存在,例如:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,过一段时间后可能恢复正常,例如:HTTP/1.1 200 OK(CRLF)。

3.工作机制流程
每一次HTTP操作称为一个事务。工作过程:
a. 客户机与服务器需要建立连接。单击某个超级链接,HTTP的就会开始工作。
b. 建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户端信息和可能出现的其他内容。
d. 服务器接到请求后,返回相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能出现的其他内容。
c. 客户端接收服务器返回的信息通过浏览器或其他方式显示在用户的显示屏上,然后客户端与服务器断开连接。
结论:如果上述执行过程中某一步出现错误,那么产生错误的信息将返回到请求方(c端),c端可以收到返回的信息输出显示。以上过程对于用户来说是看不到的。用户只需要做相应的操作,等待客户端的页面显示就可以了。

相关文章

HTTPS协议分析

你可能感兴趣的:(Java,web,Android,技术)