什么是协议?
计算机中的协议和现实中的协议是一样的,一式双份、多份
双方/多方都遵从共同的一个规范,这个规范就可以称为协议
计算机之所以能全世界互通,协议功不可没。如果没有协议,计算机各说各话,谁都听不懂谁。
什么是http协议?
http协议即按一定规则,向服务器请求数据,或发送数据,而服务器按一定规则,响应数据。
http是一种无状态协议。无状态是指客户端和服务器端之间不需要建立持久的连接,客户端发起一个请求,服务器端返回响应,这个连接就会被关闭,在服务器端不会保留该请求的有关信息。
问:浏览器能发送HTTP协议,http协议一定要浏览器来发送吗?
答:不是,HTTP既然是一种协议,那么只要满足这种协议,什么工具都可以发。
http的工作流程
-
地址解析:HTTP协议是通过标准URL来请求指定的服务器中的指定服务的。
标准URL :baidu.com:80/index.html?......
(1)http:协议类型。
(2)baidu.com : 主机名。通过主机名我们可以准确定位到要访问的服务器
(3) 80 : 端口号。通过端口号我们可以准确找到用户需要访问的那个服务器和应用
(4)index.html : 请求的文件名。通过文件名来访问指定的文件
(5)?name=tom&age=18 : 请求参数。携带的参数不同来响应不同的用户或者同一个用户的不同请求的
-
封装HTTP请求
将URL以及本级的一些信息封装成一个HTTP请求数据包
-
建立TCP连接:也就是我们常说的“三次握手”
”三次握手“:首先由客户端发送建立连接的请求,客户端发送一个syn包,等待服务器端的响应;服务器端收到SYN包之后,返回给客户端一个表示确认的SYN包;最后客户端收到确认SYN包之后向服务器端发送ACK包,发送完之后开始建立连接。
-
发送HTTP请求
客户端发送HTTP请求到服务器端,与请求相关的信息都会包含在请求头和请求体中发送给服务器。
-
服务器处理请求并返回需要的数据
服务器在收到请求之后,根据客户端的请求发送给客户端相应的信息。相关的响应信息都会放在响应头和响应体中。
-
连接结束:关闭连接
服务器端在发送完响应之后,就会关闭连接。如果客户端的请求的头信息中有Connection-alive,那么服务器端在响应完这个请求之后不会关闭连接,直到该客户端的所有请求都响应完毕,才会关闭连接,这样大大节省了带宽和I/O资源。
http请求信息和响应信息
1.请求:
HTTP中的请求头由三部分组成:请求行、请求头和请求正文
(1)请求行
①请求方法
GET POST PUT DELETE TRACE OPTIONS
//注意:这些请求方法虽然HTTP协议里规定的,但WEB SERVER未必欲奴或支持这些方法
//HEAD和GET基本一致,只是HEAD不返回内容
//比如我们只是确定一个内容(比如照片)还正常存在,不需要返回照片的内容,这时用HEAD比较合适
//TRACE:是你用了代理上网,比如用代理访问new.163.com,你想看看代理有没有修改你的HTTP请求,可以用TRACE来测试一下,163.com的服务器就会把最后收到的请求返回给你
②请求路径URL
就是url的一部分
③协议及版本
目前一般是HTTP/1.1,0.9,1.0 已经基本不用
(2)请求头信息(key:value)
常见的请求头域:
(1)Connetion:表示是否需要持久连接。如果服务器看到它的值为keep-alive,或者请求协议使用的是HTTP/1.1(默认使用持久连接),同一个页面如果包含多个资源,则只会使用一个连接,如Connection:keep-alive。如果设置了Connetion:close,则每一个请求结束都会关闭连接,新的请求又会重新建立连接。一个网页至少有几十个资源请求,这样很浪费带宽和时间。
(2)Host:这个是必需的,表示请求的服务器地址是什么,是从URL中提取出来的。比如www.baidu.com/的Host就是www.baidu.com。这里是80端口,默认省略;如果是其他端口,比如www.baidu.com:8080,则Host是www.baidu.com:8080。
(3)Accept:浏览器可以接受的媒体类型(MIME类型),如Accept:text/html代表浏览器可以接受HTML文档。“”代表接受任何类型,如Accept:/*。
(4)Accept-Encoding:浏览器申明自己接受的编码方法,通常指定压缩方法、是否支持压缩、支持什么格式的压缩。
注:头信息结束后和主体信息之间要空一行
(3)请求主体信息 (可以没有)
也叫请求数据,在使用POST请求提交表单数据的时候,这些表单数据就会被放在HTTP请求的请求正文中,以加密的形式向服务器传输。
例:
POST/0606/02.php HTTP/1.1
HOST:localhost
Content-type:
application/x-www-form-urlencode
Content-length:5
Age = 3
2.响应:
(1)响应行
①协议
②状态码
③状态文字
(2)响应头信息(key:value)
注:头信息结束后和主体信息之间要空一行
(3)响应主体信息
(接收的内容,可以没有)
例:
HTTP/1.1 200 OK
Content-type:text/html
Content-length:5
hello
http响应中的状态码
状态码 | 定义 | 说明 |
---|---|---|
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功收到,理解和接收 |
3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
4XX | 客户端错误 | 请求的语法有错误或不能完全被满足 |
5XX | 服务器错误 | 服务器无法完成明显有效的请求 |
常见:200 - 服务器成功返回网页
301/2 - 永久/临时重定向
304 Not Modified - 未修改
500 - 服务器内部错误
失败的状态码:
404 - 请求的网页不存在
503 - 服务器暂时不可用
500 - 服务器内部错误