先解释一下这个‘大白’吧,它是我对自己的称谓,为什么这么说呢,就是小白以上,大神未满,今天简单学习了http协议,所以这篇文章是写给初学者的,也欢迎各路大神多提意见哦。
本文将从以下几个方面介绍:
1. http是什么
2. 为什么要有http
3. http的工作原理
4. http协议的特点
5. 主要概念
1. http是什么
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准;
它是一种能够获取如HTML这样网络资源的协议。它是Web上数据交换的基础,是一种client-server协议,也就是说请求通常是由像浏览器这样的接受方发起的;
HTTP是基于TCP/IP通信协议来传递数据的(HTML 文件, 图片文件, 查询结等)
2. 为什么要有http
起初设计它的目的主要用于 Web 浏览器与 Web 服务器之间的通信,当然现在它还可以用做其它目的
3. http的工作原理
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求、服务器作出响应
这里提到了URL,那么先说说URL吧
1. URL是什么
2. URL的组成部分有哪些
3. URL如何使用
4. 输入URL的请求过程
URL是什么
URL—Uniform Resource Location统一资源定位符,说白了就是我们常说的“网址”,它是用于完整地描述Internet上网页和其他资源的地址的一种标识方法;
组成
URL由: Protocol(协议)+Host(主机)+Port(端口)+Query组成。
URL的使用
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
传送协议。
1.服务器。(通常为域名,有时为IP地址)
2.端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
3.路径。(以“/”字符区别路径中的每一个目录名称)
4.查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
URL请求过程
当你访问一个网站的时候,输入网址按下回车的瞬间你知道发生了什么吗?
1.当你在浏览器输入URL http://www.website.com 的时候,浏览器发送一个Request去获取 http://www. website.com的html. 服务器把Response发送回给浏览器;
2.浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件;
3.浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件;
4.当所有的文件都下载成功后, 网页就被显示出来了;
在说URL的时候我们通常会想到URI,关于这两者的区别请参见我另一篇文章:http://www.jianshu.com/p/ba15d066f777
4. http协议的特点
1. HTTP是无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
2. HTTP是媒体独立的
这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
3. HTTP是无状态的
什么是无状态呢?
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
HTTP是无状态的:
在同一个连接中,两个成功执行的请求之间是没有关系的。这就带来了一个问题,用户没办法在一个网站进行连续的交互;
比如在一个电商网站里,用户把某个商品加入了购物车中,换了一个页面后再次添加商品,两次添加商品的请求没有联系,浏览器无法知道最终用户都选择了哪些商品。而用HTTP的头部扩展,HTTP Cookies就可以解决这个问题。把Cookies添加到头部中,创建一个会话来让每次请求都能共享相同的上下文信息,相同的状态。
5. 主要概念
一个完整的http请求及响应包括以下内容:
1. http消息结构
2. http请求方法
3. http响应头信息
4. http状态码
下面将介绍这几个方面的概念
http消息结构
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
-
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
-
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
这里只做概念性的介绍,实例请见这里
http请求方法
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
- GET - 从指定的资源请求数据。
- POST - 向指定的资源提交要被处理的数据
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
其他 HTTP 请求方法
下面的表格列出了其他一些 HTTP 请求方法:
GET和POST的比较
http响应头信息
正如在前面讨论的一样,当一个 Web 服务器对浏览器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应头信息、一个空行和文档,一个典型的响应如下所示:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
http响应头可以包含很多类型,具体详细设置请参见这里
http状态码
当我们访问一个网址时,打开控制台的network选项可以看到这样的信息:
可以看到有一个Status Code为200,这个就是我们说的http状态码,每一个http请求都伴有一个http状态码,不论请求是否成功。
状态码的直不同代表的请求状态也不同,常见的http code有:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
本文简单介绍了http协议的基本知识,就当是抛砖引玉了,欢迎大家补充和提意见哈。
参考资料:
http://www.runoob.com/http/http-tutorial.html
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
http://wiki.jikexueyuan.com/project/servlet/client-request.html