HTTP,Hyper Text Transfer Protocol,超文本传输协议,是一个基于请求&&相应模式的,无状态的协议. 它是浏览器和服务器之间最常用的通信协议,是浏览器,是数据传输的一种约定. 浏览器和服务器只要遵循这个约定就能进行通讯(数据传输)了.
1.请求与相应
浏览器向服务器发送数据,我们称之为请求. 服务器向浏览器发送数据,我们称之为响应.
1)浏览器向服务器发出请求的方式有哪些呢??
在浏览器地址栏中通过地址访问,这种方式最常用. 另外,还有点击表单的提交按钮,点击超链接,发送AJAX请求,等等...
2)HttpWatch
IE浏览器下的抓包工具,可以拦截HTTP请求与响应,查看浏览器与服务器之间的通讯详情. 该工具是一个浏览器插件,安装后会自动嵌入到浏览器中. HttpWatch只能在IE,FireFox浏览器中使用.
上面提到了:HttpWatch可以拦截HTTP请求与响应. 假如我们在win10中使用HttpWatch 10.XX.XX插件,该插件就会拦截HTTP请求和响应...
另外,用户通过浏览器中的地址向服务器发送一次请求,实际上浏览器向服务器发出的请求却不只一次. 这可以通过HttpWatch插件查看...
2.HTTP版本
HTTP是应用层协议,它规定了我们访问网页的时候如何进行缓存,以及请求什么格式等等.
这里说一下TCP/IP. 它是传输层协议,主要用于可靠传输,保证数据完整性(不管服务器向浏览器传输什么数据,都通过IP协议的操作,把数据分段,然后输送,同时保证在这个过程中,数据不会丢失,如果丢失数据,会要求服务器重新发送完整数据).
浏览器和服务器之间进行通讯的过程中包括建立连接,释放连接. 而HTTP 1.0和HTTP 1.1两个版本在数据传输上有很大的区别. 下面来说一下:
前面已经说过,我们通过浏览器地址栏中的地址向服务器发送一次请求,实际上浏览器向服务器发送不止一次的请求...如果使用HTTP 1.0作为我们的应用层协议,当建立连接后第一次请求得到服务器的响应后关闭连接,然后才能发送第二次请求. 如果使用HTTP 1.1作为我们的应用层协议,只要建立了TCP连接,客户端发送的请求不受服务器返回的响应的限制.
前面说过,HTTP1.0的存在,使得浏览器和服务器建立连接之后进行一次数据请求-->响应就得关闭服务器. 而HTTP 1.1的应用解决了上述弊端. 这是因为HTTP1.1在浏览器向服务器发送的请求中增加了Connection参数,有了这个参数我们根据HttpWatch插件看到浏览器每次向服务器发送请求都有"Connection=keep-alive",这里注意关闭服务器请求中的参数有"connection=close"字样...
然后说一下HTTP 1.1新增的请求头,有了它我们可以直接定位到指定的虚拟主机.
3.HTTP协议组成
HTTP协议分为请求协议和响应协议. 我们在讲这两者的时候,先来说一下url,uri...url,统一资源定位符.uri,统一资源标识符.
1)请求协议的格式
请求协议一共包括4个部分,分别是请求行,请求头,空白行,请求正文.
其中请求行中包括请求方法,uri,HTTP协议版本这些信息
比如:
POST /myweb/login.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:35.0) Gecko/20100101 Firefox
.....
user=jeffrey&pwd=1234 //此行以下为提交的数据
2)响应协议的格式
响应协议一共包括4个部分,分别是响应行,响应头,空白行,响应正文
其中响应行中包括HTTP协议版本, 请求状态(200,表示请求成功)
比如:
POST HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"330-1482565608120"
...
响应正文, 这里放的是浏览器请求的页面,代码较多,这里就不再写了~~
4.状态碼
当进行web应用访问时,经常会看到一些2,4,5开头的提示信息页面. 这些就是HTTP协议规定的,让服务器根据情况传递给浏览器的状态码,表示服务器对当前请求的处理状态.常用的状态码:
2xx: 表示页面请求成功, 最常用的状态码是200
4xx:表示请求错误,其中最常用的状态码是404,表示资源找不到. 这种状态码一般是资源路径不对.
5xx:表示服务端错误,其中最常用的状态码是500,表示服务器内部错误. 一般是服务器的Java脚本出错.
5.GET,POST两种提交方式
1)GET请求
由于GET请求将提交的数据显示在地址栏, 这就导致了GET提交的三点不足:
参数值只能是字符串,而不能是其它类型.
该请求方式只适合少量数据的提交处理.
由于提交的数据显示在地址栏中,所以安全性低.
另外,GET请求有一个优点:
当浏览器向服务器发送的请求得到响应后,即服务器向浏览器返回了指定的页面, 浏览器会将这些数据缓存到本地,当浏览器发出相同的请求,会直接读取在Cache中的缓存数据,而不会向服务器发送请求的~~
2)POST请求的特点:
POST请求将提交的数据保存在请求正书中,这种提交方式的三个特点:
POST请求提交的数据可以使任意类型的
POST请求适合大量数据的提交
由于POST请求提交的数据是保存在请求正书中的,所以想必GET请求来说,安全性较高.
另外,POST请求的一个注意点:
浏览器请求得到服务器的响应之后, 相关数据不会缓存在本地. 简单地说,POST请求方式不支持本地缓存~~