HTTP协议的基本概念
HTTP(Hypertext tansfer protocol)超文本传输协议,是目前互联网应用最广泛的一种协议。
HTTP是通用的,无状态的,面向对象的协议。到目前为止,HTTP总共有三个版本分别是HTTP1.0,HTTP1.1和HTTP-NG。
HTTP的消息分为请求消息和响应消息两种。
理解HTTP协议的URL
URL统一资源定位符,用来表示万维网上的各种资源,如文档,视屏,图片,声音等。URL由三部分组成:协议类型,主机名和路径及文件名。
HTTP的URL的一般格式为:http://host:[port]/path/filename(在不同的系统中URL的大小写需要特别注意,在windows系统是不区分大小的,而在Unix或者linux系统中则区分大小写的)
HTTP协议请求头
HTTP协议的请求主要有三部分组成:请求行,请求报头,请求体。其中在某些请求中请求报头和请求体是可选额,请求报头和请求体之间需要用空格隔开。
1.请求行,由三部分组成:请求方法,请求资源,HTTP协议版本。其格式为 Method Request-URI HTTP-Version CRLF
请求方法
- GET:请求读取Request-URI所标识的资源。此方法的URL参数传递的数量是有限的,一般在1KB以下。
- POST:请求服务器在接受在Request-URI所标识的资源后附加数据。传递的参数数量比GET大的多,一般没有限制。
2.请求报头,包含客户端传递请求的附加信息和客户端多接受的信息类型。常见的请求报头有Accept和User-Agent。
例如:Accpet:text/html Accept:image/gif
- Accept:用于指定客户端所支持的信息类型
- Accept-Charset:用于指定客户端所接受的字符集
- Accept-Encoding:用于指定客户端所接受的字符编码
- Accept-Languagu:用于指定客户端可接受的自然语言,如果没有设置则默认表示客户端可以接受任何语言。
- Host:用于指定所请求的资源的主机名和端口号,缺省端口号默认为80
- Connection:指定请求结束后是否保持连接 keep-alive保持连接 close关闭连接
HTTP协议响应
在接受到一个请求后,服务器会返回一个HTTP响应。HTTP响应由三部分组成,即状态行,响应报头,响应正文。
1.状态行:由HTTP版本,状态码和状态码的简单短语三部分构成。即 HTTP-Version Status-Code Reason-Phrase CRLF
状态码由三位数字组成,共有5大类,大类的取值分别是1-5
- 1XX:指示成功,如请求收到了或正在处理
- 2XX:成功
- 3XX:重定向
- 4XX:客户端错误,如请求中包含语法错误或不能正常完成的
- 5XX:服务器错误,如服务器失效为无法完成请求
典型的状态码解析如下
- 200:表示请求成功,成功返回了请求的资源
- 302/307:表示重定向,此时请求的文档已经面临移动到其他位置,该文档新的URL将在Location响应报头中给出
- 401:表示浏览器访问的是一个受到保护的页面
- 403:表示服务器受到请求,但是拒绝服务
- 404:表示找不到资源,即服务器上不存在浏览器请求的资源
- 500:表示服务器内部错误,即服务器端的CGI,ASP,JSP等程序发生了错误
- 503:表示服务器暂时性超载,不能处理当前请求
例如:200 OK 成功
304 Not Modified 未修改
400 Bad Request 错误请求
404 Not Found 未找到
2.响应报头,响应报头是服务器不能放在状态行中的附加响应消息,以及服务器的信息和对Request-URI所标识的资源进行下一步的 访问信息。
常见的响应报头有如下:
- Allow:支出服务器多支持的请求方法,如GET,POST等方法
- Content-Encoding:指定文档的编码方法
- Content-Length:指定响应中数据的字节长度
- Content-Type:指定回送数据的MIME类型
- Date:指定发送HTTP消息的日期
- Last-Modified:指定返回数据的最后修改时间
- Location:重定向请求到一个新的URI地址
- Refresh:指定浏览器的定时刷新时间
- Expires:指定浏览器缓存数据的时间
- Server:指定服务器名称,包含了处理请求的服务器使用的软件产品信息,与User-Agent请求报头想对应
3.响应正文,响应正文是服务器所返回的资源内容,如HTML页面。响应报头和响应正文之间必须使用空行来分割。
一个典型的HTTP响应实例如下
HTTP/1.1 200 OK
Connection:close
Date: Wed, 19 Nov 2017 20:20:20 GMT
Server: Apache/2.0.54
Content-Length:1024
Content-Type:text/html
//空行----分割空行
<html>
//数据
</html>