一.HTTP简介
HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以“http://”开头的原因。
自WWW诞生以来,一个多姿多彩的资讯和虚拟的世界便出现在我们眼前,可是我们怎么能够更加容易地找到我们需要的资讯呢?当决定使用超文本作为WWW文档的标准格式后,于是在1990年,科学家们立即制定了能够快速查找这些超文本文档的协议,即HTTP协议。经过几年的使用与发展,得到不断的完善和扩展,目前在WWW中使用的是HTTP/1.0的第六版
HTTP是应用层协议,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接受
HTTP是一个基于请求/响应模式的,无状态的协议
二.原理
上层协议需要用到下层协议,HTTP就是用到了下层的TCP协议,TCP协议是传输可靠的协议.
(1).HTTP URL
格式:
http://host [“:”port] [abs_path]
其中http表示要通过http协议来定位网络资源.
Host表示合法的Internet主机域名或者ip地址.
Port用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接.
如果port是空的,则使用缺省的80端口.
Abs_path 指定请求资源的URI,如果URL中没有给出abs_path,那么当它作为请求URI时,必须以”/”的形式给出
附:
URI(Uniform Resource Identifier,统一资源标识符)纯粹是一个符号结构,用于指定构成Web资源的字符串的各个不同部分,比如luliuyan_123@163.com也是一种URI,但是不是URL.
URL是一种特殊类型的URI,它包含了用于查找某个资源的足够信息.
(2).HTTP请求
客户端通过发送HTTP请求向服务器请求对资源的访问
HTTP请求的组成:
请求行,消息报头,请求正文
请求行的结构:
Method Request-URI HTTP-Version CRLF
其中Method表示请求的方法,比如get或者post,注意需要大写
Request-URI 表示一个统一资源标识符
HTTP-Version 表示请求的HTTP协议版本,CRLF表示回车换行
请求行示例:
GET /form.html HTTP/1.1 (CRLF)
附:
HTTP请求的方法:
- GET
通过请求URI得到资源 - POST,
用于添加新的内容 - PUT
用于修改某个内容 - DELETE,
删除某个内容 - CONNECT,
用于代理进行传输,如使用SSL - OPTIONS
询问可以执行哪些方法 - PATCH,
部分文档更改 - PROPFIND, (wedav)
查看属性 - PROPPATCH, (wedav)
设置属性 - MKCOL, (wedav)
创建集合(文件夹) - COPY, (wedav)
拷贝 - MOVE, (wedav)
移动 - LOCK, (wedav)
加锁 - UNLOCK (wedav)
解锁 - TRACE
用于远程诊断服务器 - HEAD
类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
常见的HTTP请求的方法:
GET方法用于获取由Request-URI所标识的资源的信息
常见的形式:
GET Request-URI HTTP/1.1
我们在浏览器的地址栏中输入地址回车的时候就是使用的GET方法
POST方法用于向目的服务器发出请求,要求服务器接受附在请求后面的数据
POST方法在表单提交的时候用得较多
HEAD方法和GET方法差不多,区别在于HEAD方法只是请求消息报头,而不是完整的内容.通常用于测试超链接的有效性,是否可以访问,以及最近是否更新
(3)HTTP响应
HTTP响应的组成部分:
状态行,消息报头,响应正文
状态行结构:
HTTP-Version Status-Code Reasong-Phrase CRLF
其中
HTTP-Version 表示服务器HTTP协议的版本,,
Status-Code表示服务器发回的响应代码,
Reason-Phrase表示状态代码的文本描述
CRLF表示回车换行
示例:
HTTP/1.1 200 OK
状态代码由3位数字组成,表示请求是否被理解或被满足
状态代码的第一个数字定义了响应的类别,后面两位数字没有具体的分类
--1xx :指示信息-表示请求已接收,继续处理
--2xx:成功—表示请求已经被成功接收,理解,接受
…….
(4).HTTP消息
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成,
请求消息和响应消息都是由开始行,消息报头(可选),空行(只有CRLF的行),
消息正文(可选的)组成的.
对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行
(5).HTTP消息报头
HTTP消息报头包括普通报头,请求报头,响应报头,实体报头,
每个报头域都是由名字+”:”+空格+值组成
消息报头域的名字是大小写无关的.
普通报头:有少数报头域应用于所有的请求和响应消息,但并不用于被传输的实体,这些报头域只用于传输的消息
常用的普通报头:
Cache-Control
Date
Connection
Pragma
请求报头
请求报头允许客户端向服务器端传递该请求的附加信息以及客户端自身的信息
常用的请求报头
Accept
Authorization
Host
User-Agent
响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息
常用的响应报头
Location
Server
www-Authenticate
实体报头
实体由实体报头域和实体正文组成的.
实体正文就是请求消息中的请求正文或者响应消息中的响应正文.
实体报头定义了关于实体正文和请求所标识的资源的元信息
常用的实体报头
Content-Encoding
Content-Language
Content-Length
Content-Type
Last-Modified
Expires