HTTP
概念
- HTTP是一个用于在两点之间传输文字、图片、音频、视频等超文本数据等约定和规范
五大类HTTP状态码
-
1xx:提示信息,表示目前是协议处理的中间状态,还需后续操作
-
2xx:成功,报文已经收到并被正确处理
- 200 OK:表示一切正常。若为非HEAD请求,服务器返回的响应头会有body数据。
- 204 No Content:同200,但响应头没有body数据。
- 206 Partial Content:表示响应返回的body数据是其中的一部分,也是服务器处理成功的状态。
-
3xx:重定向,资源位置发生变动,需要客户端重新发送请求
- 301 Moved Permanently:表示永久重定向,即资源已不存在,需用新的URL再次访问。
- 302 Found:表示临时重定向,即资源还在,暂时需要另一个URL来访问。
- 301和302用响应头中的Location指明后续要跳转的URL。
-
4xx:客户端错误,请求报文有误,服务器无法处理
- 400 Bad Request:表示客户端请求的报文有错误。
- 403 Forbidden:表示服务器禁止访问资源。
- 404 Not Found:表示请求的资源在服务器上不存在或未找到。
-
5xx:服务器错误,服务器在处理请求时内部发生了错误
- 500 Internal Server Error:表示服务器发生未知错误。
- 501 Not Implemented:表示客户端请求的功能还不支持 – 即将开业,敬请期待。
- 502 Service Unavailable:表示服务器忙,暂无法响应。
常见字段
- Host:客户端发送请求时,用来指定服务器的域名。
- Host: www.A.com
- Content-Length:表明本次返回的数据长度。
- Content-Length:1000 – 该资源大小1000个字节
- Connection:常用于客户端请求服务器使用TCP持久连接。
- Connection:keep-alive
- Content-Type:用于服务器回应时,告诉客户端,本次数据时什么格式。
- Content-Type: text/html ; charset=utf-8 – 发送的是网页,编码为utf-8
- 客户端指定可以接受哪些数据格式:Accept: / – 任意
- Content-Encoding:表示服务器返回的数据使用了什么压缩格式。
- Content-Encoding: gzip
- Accept-Encoding: gizp, deflate – 客户端指定可以接受的压缩方式
GET 与 POST
- 区别
- GET:是指从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。
- POST:是指向URL指定的资源提交数据,数据就放在报文的body里。
- 安全和幂等
- 安全:是指请求方法不会破坏服务器上的资源。
- 幂等:是指多次执行相同的操作,结果都是相同的。
- GET方法就是安全且幂等的,因为他是只读操作,无论操作几次,其数据都是安全的,且每次结果都一样。
- POST因为是新增或提交数据的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据会创建多个资源,所以不是幂等的。
HTTP特性
- 优点:简单、灵活和易于扩展、应用广泛和跨平台。
-
简单
- HTTP基本的报文格式为header+body,头部为key-value,易于理解。
-
灵活和易于扩展
-
HTTP中的请求方法、URI/URL、状态码、头字段等都允许自定义和扩充。
-
HTTP工作在应用层(OSI第七层),则它的下层可以随意变化。
-
-
缺点:无状态、明文传输,不安全
-
无状态双刃剑
- 无状态的好处:服务器不会记忆HTTP的状态,所以不需要额外的资源来记录状态信息,可以减轻服务器的负担。
- 无状态的坏处:既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。
- 如:登陆->添加购物车->下单->结算->支付,这些操作都需要知道用户身份,若无关联,则每一次都要询问身份信息
- 解决方法如Cookie技术(存储在用户本地终端上的数据),客户端请求一次后,服务器会发一个装有客户信息的小贴纸,再次请求时,则服务器就可以有效识别
-
明文传输双刃剑
- 明文意味着在传输过程中的信息,是可方便阅读的,通过F12和抓包都可以查看;但在传输的漫长的过程中,信息的内容很容易被窃取,毫无隐私可言。
-
不安全
- 通信使用明文(不加密),内容可能会被窃听。如:账号信息容易泄漏,那你号没了。
- 不验证通信方的身份,因此有可能遭遇伪装。如:访问假的淘宝、拼多多,那你钱没了。
- 无法证明报文的完整性,所以有可能已遭篡改。如;网页上植入垃圾广告,视觉污染,眼没了。