什么是 HTTP 协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTP 协议发展简史
最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET。
1996年5月,HTTP/1.0 版本发布,内容大大增加。 任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。
1997年1月,HTTP/1.1 版本发布,只比 1.0 版本晚了半年。它进一步完善了 HTTP 协议,一直用到了20年后的今天,直到现在还是最流行的版本。
HTTP 协议工作原理
HTTP协议工作于客户端-服务端架构为上, 是一种请求应答式的.
浏览器(或其他客户端)作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP协议格式
通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。
客户端发送给服务器的格式叫“请求协议”;
服务器发送给客户端的格式叫“响应协议”。
重点学习这两个格式。
请求协议格式
请求行 例:GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif文件。
请求头 例:Accept-Language: en(很多请求头)
空行 必须的,服务通过这个空行来区别出请求头和请求体
请求体 有时候也叫消息体,是可选的,get请求时无请求体,post请求会有。
浏览器向服务器发送请求时必须依据该格式,否则服务器无法识别。http协议中的请求行中可以有8种请求方法,但是目前为止,通用和大家都在用的只有两种:post请求和get请求。
响应协议格式
状态行;
响应头信息;
空行;
响应体(响应正文)。
GET 请求和 POST 请求的区别
注意区别就是请求数据的传送方式:
1.GET 方法
查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
2.POST 方法
请求数据(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
比较
项目 | GET | POST |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |