什么是HTTP协议
HTTP协议是一种超文本传输协议,是用于万维网服务器传和本地浏览器进行数据通信的传送协议。它可以使浏览器更加高效,使网络资源传输减少。
HTTP本质上是通过基于TCP/IP通信协议来传递数据和资源,资源包括HTML,文件,图片,视频等等。
另外,HTTP还是一个属于应用层的面向对象的协议,它在1990年被提出,目前已经使用了HTTP/1.1版本。
HTTP协议工作在客户端-服务端的架构上,浏览器作为HTTP客户端通过URL向HTTP服务器发送请求,服务器根据接收到的请求向浏览器进行响应。
HTTP协议的特点
1.无状态:无状态只的是协议对于事务处理没有记忆能力,缺少状态意味着后续处理如果需要前面的信息,那么将会将前面的信息进行重传。这样有利也有弊,例如数据重传时数据量就会很大,但是这使得服务器对浏览器的请求响应的较快。
2.无连接:无连接并不是指浏览器不建立连接,而是指每次建立连接只为了处理一个请求,服务器处理完浏览器的请求后,并受到浏览器的应答后就会断开连接,采用这种方式可以是协议更简单,也更容易维护。
3.简单快速:简单指的是浏览器向服务器请求服务时,只需传送请求方法和路径,请求方法常用GET,POST,HEAD。每种HTTP方法规定了客户与服务的联系的类型不同,快速当然是建立在前面两个特点之上的~。
4.灵活:灵活代表HTTP允许传输任意类型的数据对象,正在传输的类型会以Content-Type进行标记。
HTTP的URL
HTTP协议的请求与响应是构建在URL之上的,HTTP的URL包含了用于查找某个资源的足够信息,它的格式如下:
http://host[“:”port][abs_path].
http表示使用HTTP协议来访问网络资源;
host表示合法的Internet主机域名或者ip地址;
port:表示协议指定的端口,默认端口为80;
abs_path:表示指定请求资源的url,如果url没有给出abs_path,那么当他作为请求url时,浏览器会自动帮我们加上’/’,表示访问服务器/目录的资源,这点我们很常见,例如我们输入
www.baidu.com;浏览器会自动帮我们转化成http://www.baidu.com/
abs_path的内容其实就是从’/’后面开始的,它包含了
1.虚拟目录部分:从域名后的第一个/开始到最后一个/。
2.锚部分:锚部分表示从#开始到url最后的部分,锚常用来进行页面跳转,#后面的字符都会被浏览器解释为位置标识符,这些字符不会发送到服务器端。
3.文件名部分:从域名的最后一个“/”开始到”?”为止,如果省略该部分,则会使用默认的文件名。
4.参数部分:从”?”开始到“#”位置的部分,参数部分同时也被称为搜索部分或查询部分。
关于#和?可以参考下这篇文章:
http://www.cnblogs.com/kaituorensheng/p/3776527.html
HTTP的请求Request
当浏览器发送一个HTTP请求到服务器,它的请求报文包括如下格式:
我们可以看一个http请求的例子:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
1.请求行:主要用来说明请求类型,要访问的资源以及所使用的HTTP版本。
2.请求消息体:消息体主要用来说明服务器要使用的附加信息。
3.第三部分:空行,空行尽管不传递数据,但他是必须的,因为请求消息体没有行数的限制,这个空行的作用就是用来分割消息体和请求正文的。
4.请求正文也叫主体,可以添加任意的数据。
HTTP请求响应Response
浏览器发出请求,服务器当然要作出响应,那么有请求报文,当然也就会有响应报文。HTTP响应部分的报文也由四个部分组成:
好了说到这里,http协议大家应该有所了解了,下一张我们将会了解一下http的几种请求方法。