在web应用中,服务器把网页的HTML代码发送给浏览器,让浏览器显示出来,浏览器和服务器之间的传输协议就是HTTP协议。HTTP是在网络上传输HTML的协议,用于浏览器和服务器之间的通信。
一个网页打开的流程是浏览器读取服务器发送的HTML源码后,解析HTML,显示页面,然后根据HTML中的各个链接,再发送请求到服务器,拿到相应图片视频js脚本等资源,最后显示出一个完整的页面。
http请求的流程:
1.浏览器向服务器发送http请求
方法:有post(请求支援并附带数据,可能修改服务器上的资源)get(仅请求资源)PUT(增加数据)DELETE(删除数据);
路径:/full/url/path;
域名:由host指定,如 host:www.sina.com.cn
当请求方法为post时,请求还包括一个body,包含用户数据。
2.服务器向浏览器返回HTTP相应
响应代码:
200:成功
3XX:重定向
4XX:客户端发送的请求有错误
5XX:服务器端处理时发生了错误
响应类型:由Content-Type指定。
通常服务器返回的HTTP响应会携带内容,即一个body,如HTML源码。
3.浏览器继续向服务器发送请求,就继续1和2的步骤。
注意:HTTP协议采用了简单的请求-响应的模式,一个HTTP请求只处理一个资源。一个网页中的请求可以是不同的服务器,一个站点可以链接到其他站点。比如图片可以链接于不同的网站。
HTTP格式
HTTP请求和响应都遵循相同的格式,包含Header和Body两个部分。Body可选。
HTTP GET请求格式:(Header一行一个,换行符 )
GET /path HTTP/1.1 //例:GET /books/?sex=man&name=professional HTTP/1.1
Header1:Value1
Header2:Value2
Header3:Value3 //GET可提交的数据量受到URL长度的限制,这个限制不是HTTP协议限制的,是浏览器及服务器限制的。
HTTP POST请求格式:(连续两个换行符时,header部分结束,后面全部为body)
POST /path HTTP/1.1
Header1:Value1
Header2:Value2
Header3:Value3
body data…… //HTTP协议对POST的大小没有限制,但处于安全考虑,服务器会在实现时做一定限制。
HTTP响应格式:
200 ok
Header1:Value1
Header2:Value2
Header3:Value3
body data……
注意:body的数据类型由Content-Type来决定。网页时,body是文本,图片时,body是二进制数据。Content-Encoding存在时,body数据被压缩,常见格式是gzip,此时需解压缩。
条件GET使用的时机:
在客户端之前已经访问过某网站,并打算再次访问该网站的时候。
当再次访问这个网站时候,浏览器向服务器发送请求询问是否在上次询问后更改了页面,服务器根据请求判断响应文件是否有更新,更新了则返回正常响应,没有更新则则返回304 Not Modefied响应,告诉浏览器使用已缓存的上次获取文件。
(本文参考地址:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832653051fd44e44e4f9e4ed08f3e5a5ab550358d000)