
http协议这部分的知识很重要,在面试的时候也会经常问起来。
先来看一看什么是http协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide
Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
关于http的版本,也经常在面试的时候会提及,当前用的是HTTP 1.1,是的,你没有看错,是1.1,经常提及的也总共只有0.9,1.0,1.1这3个版本;HTTP/1.0,这是第一个在通讯中指定版本号的HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。HTTP/1.1是当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。HTTP/1.1相较于
HTTP/1.0 协议的区别主要体现在:1,缓存处理;2,带宽优化及网络连接的使用;3,错误通知的管理;4,消息在网络中的发送;5,互联网地址的维护;6,安全性及完整性。
其实啊,HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这个两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。
http请求协议:
一个http请求由基本由请求首行+请求头+请求体组成,
请求方式有很多种:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
但我们常用的是get和post,下面就比较一下这2种,
get | post | |
---|---|---|
后退按钮/刷新 | 没啥影响 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交,就是弹出的框) |
书签 | 可收藏为书签 | 不可收藏为书签 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。注意,这个限制是特定的浏览器及服务器对它的限制。 | 无限制,数据在body中啊。 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET ! |
POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 |
数据在 URL 中对所有人都是可见的 | 数据不会显示在 URL 中,在body中啊。 |
缓存 | 能被缓存 | 不能缓存 |
一般我们就使用这2种,大家可以看看这篇帖子:为什么http用的时候不能用POST方式替代全部的GET方式?
http响应协议:
响应由响应首行+响应头+响应体组成,
响应协议中有个非常重要的东西是响应码,响应码有多种,下面来看看,
数字 | 意义 |
---|---|
1xx | 信息响应类,表示接收到请求并且继续处理![]() |
2xx | 处理成功响应类,表示动作被成功接收、理解和接受![]() |
3xx | 重定向响应类,为了完成指定的动作,必须接受进一步处理![]() |
4xx | 客户端错误,客户请求包含语法错误或者是不能正确执行![]() |
5xx | 服务端错误,服务器不能正确执行一个正确的请求![]() |
一般来说,我们能从响应码中看出这次请求是否成功,或者是发生了什么~
另外,可以在HTML中指定响应头,在HTMl页面中可以使用<meta http-equiv="" content="">来指定响应头,
例如在页面中给出<meta http-equiv="Refresh" content="3;url=http://www.baidu.cn">,表示浏览器只会显示此页面3秒,然后自动跳转到百度。
好了,这些就是我在平时学习的时候所了解到的一些关于http的知识,都是一些比较基础的东西,做个总结,有需要的看看就好哈~