目录
- 概述
- 特点
- HTTP URL 详解
- HTTP Request 请求
- HTTP Response 响应
- HTTP 状态码
- HTTP 工作流程
概述
HTTP是HyperText Transfer Protocol(超文本传输协议)的缩写,是互联网上面应用最为广泛的的一种网络协议。HTTP是一个基于TCP/IP协议的客户端和服务器端请求和应答的标准。客户端一般是本地浏览器。
HTTP是一个工作在应用层的面向对象协议,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送请求。服务器根据接收到客户端请求后,根据URL传递的信息,对应向客户端发送响应的信息。
特点
- 简单快速,浏览器向服务器发送请求的时候,一般情况下,只需要传递请求方法和路径,例如常用的POST、GET请求。因为这种简单的特点,使得HTTP服务器的压力也会比较小。保证了双方通信的及时快速。
- 灵活,HTTP几乎支持传递所有类型的数据对象。如文字、图像、音频、视频等。传输的具体对象标识在Header的参数Content-Type中。
- 无连接,这一点相信有过HTTP通信开发的人员都能够感受到,HTTP限制每次链接只处理一个请求。服务器处理完该请求并接受到客户端的应答后,才能接受第二次请求。
- 无状态,表示处理本次的请求对之前的请求没有记忆能了,保证每个请求事务的完整性。后续处理如果要和之前关联,必须携带上之前的参数供服务器判断,这点可能导致每次传送的链接数据量增大,如果每次都是单独的业务操作,服务器的应答就会很快。
- 支持浏览器/服务端(B/S)、客户端/浏览器(C/S)。
HTTP URL 详解
URL(Uniform Resource Locator)统一资源定位符,是一个HTTP通信中一个比较直接被用户接触到的东西,也是一个很重要的组成部分。其依托于URI(UniformResource Identifiers)统一资源标识符,来传输和建立连接。URL是一种特殊的URI,它更为细化的定位到了某个资源。下面通过一个完整的URL来分析这个里面包含的信息。
https://www.hehehe.com:8080/he/index.php?user=123424#openDialog=1
- 协议:上面URL使用到的协议是“https:”,代表该网站是使用的HTTP协议。在Internet中,还有其他协议,如HTTP协议,文件传输用到的FTP协议。这些协议后面使用“//”作为分隔符。
- 域名:上面URL的域名就是“www.hehehe.com”。一个URL可以使用域名,也可以直接使用域名所解析到的IP访问。
- 端口:跟在域名后面的就是端口,上面的8080就是端口,域名和端口之间通过“:”来分开,端口不是必须的,缺省状况默认的端口是80,在服务器上,每一个对外提供服务的应用程序都有端口。常用的MySQL是3306,Apache是80。FTP为22等。
- 虚拟目录:域名部分后面第一个“/”到最后一个“/”为止,是虚拟目录的部分,虚拟目录也不是URL的必须的部分。如“www.baidu.com”也可以直接访问百度,上面的URL中"/he/"就是一个虚拟目录。
- 文件部分:URL中从最后一个“/”到“?”中间的部分就是文件,如果没有“?”,就是到“#”。如上面的“index.php”就是一个文件。
- 参数部分:从“?”到“#”的部分,上面的“user=123424”就是参数。
- 锚部分:从“#”到最后都是锚部分,上面的“openDialog=1”就是锚部分。
HTTP Request请求
在概述中我们说到了,一次完整的HTTP请求,需要有客户端发起请求以及服务端相应请求的操作。Request就是客户端发起的请求。
HTTP请求的类型有以下一些,主要用到的就是GET和POST两种。GET用户快速传递简单的,较小的参数。POST用于传输较大的复杂的数据类型。
编辑
一个HTTP Request主要包含以下几个部分。
- 请求行(Request Line),请求行以一个方法头部开头,然后紧跟一个空行,后面跟着URI和协议的版本。
- 请求头部(Request Header),头部里面包含一些基本属性,如指向的具体主机信息、请求的发起参数类型、访问请求的客户端信息、一些授权信息等。
- 空行,介于请求头部与请求主体之间,必须要有。
- 请求主体(Request Body),在GET请求中,请求的参数是和头部一起的,在POST请求中,请求主体是单独存在的。
HTTP Response响应
在服务器接受到HTTP的请求后,一般要给出一个响应消息。响应消息也是由四部分组成,大体和请求消息类似。
编辑
- 状态行,由HTTP版本号,状态码,状态消息三部分组成
- 消息报头,用来标识一些附加信息,如上图中的第二行和第三行。标识了一些时间,页面字符编码信息。
- 空行,上面的第四行,也是必须的。
- 响应正文,空行后面的HTML信息就是正文。
HTTP 状态码
状态码就是访问服务器,服务器给出的返回提醒,大体上讲状态码,可以看到这些信息。
- 1XX:表示请求接受,正在处理。
- 2XX:表示处理成功,请求被接受、理解、接受。
- 3XX:表示重定向,完成请求需要更进一步的操作。
- 4XX:客户端请求不正确,请求被中断或者服务器找不到资源。
- 5XX:服务器内部错误,无法完成请求。
HTTP 工作流程
下面介绍一个一次完整的HTTP请求会经历那些过程:
- 客户端连接到HTTP服务器。
- 客户端发送HTTP Request请求。
- 服务器接受请求并返回HTTP响应。
- 两端释放TCP连接。
- 浏览器获取到Response的内容渲染到页面供用户浏览。