1.HTTP报文格式
HTTP报文分为请求报文和响应报文:
- 请求报文格式:请求报文主要分为四个部分,请求行,请求头部,空行和请求数据
POST /index.html HTTP/1.1
HOST: www.XXX.com
User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0
Username=admin&password=admin
-
请求行:由请求方法、URL和HTTP协议版本组成
-
请求头部:由key/value键值对组成,通知服务器有关客户端请求的信息,分为通用首部、响应首部、请求首部和实体首部,需要注意的是,header部分的键值对是可以包括中文的,但是需要使用URLEncode和URLDecode进行编码和解码
-
空行:用以分隔请求头部和请求数据
-
请求数据:不在get方法中使用,在post方法中使用
-
响应报文格式:响应报文主要分为四个部分,响应行,响应头部,空行和响应体
HTTP/1.1 200 OK Content-Encoding: gzip Content-Type: text/html;charset=utf-8 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <p>this is http response</p> </body> </html>- 响应行:由HTTP协议版本、状态码和对应的文本描述组成
- 响应头:key/value键值对,用于描述服务器的基本信息和数据的基本描述,可以通知客户端如何处理返回的数据
- 空行:用来分隔响应头和响应体
- 响应体:返回的数据,可以是html页面也可以是json格式的数据
2.HTTP状态码
- 1xx:表示通知信息的,比如请求收到了,或者正在进行处理
- 100:表示到目前为止都正常
- 2xx:表示成功
- 200,ok表示成功
- 3xx:重定向,即使用响应报文提供的新的URL进行加载
- 301:永久重定向
- 302:临时重定向
- 303:也是临时重定向,但是要求使用客户端用Get方法获取资源
- 4xx:客户端错误,比如400时请求报文语法错误,404是请求资源不存在
- 400:请求报文存在语法错误
- 401:没有访问权限
- 403:请求被拒绝
- 404:请求资源不存在
- 5xx:服务器错误
- 500:服务器正在执行请求时发生错误
- 503:服务器暂时处于超载或者停机维护状态,现在无法处理请求
3.HTTP方法
在请求报文第一行,包含了http方法
- Get:请求资源
- Head:获取报文首部,主要客户端用来查看服务端性能
- Post:传输数据
- Put:上传文件
- Patch:对资源进行部分修改
- Delete:删除文件
- Options:
- 获取服务器支持的HTTP方法
- 用来做嗅探请求:根据w3c规范要求,对于复杂请求浏览器必须先使用Options发送一个预检请求,从而获知服务器是否允许该跨域请求,服务器确认以后才会发送实际的http请求(复杂请求主要指的是使用非get post head方法,以及自定义首部的请求,还有就是pots请求的content-type是application/json格式的请求)
- Trace:服务器将通信路劲返回给客户端
- Connect:要求在于代理服务器建立连接时使用隧道SSL进行通信
4.Get和Post的区别
- get主要用来请求资源,post主要用来向服务器传输数据
- Get方法使用URL传参,而Post方法使用request body传参
- Get方法因为参数在url中可见,所以Post方法更安全一些
- get方法提交参数受url长度限制,而post方法不受限制,因为是在body中传参
- get方法满足幂等性,即多次请求同意url返回的结果是一致的
5.HTTP长连接和短连接的区别
- 短连接:每次HTTP请求建立一个连接,请求结束后就断开连接
- 长连接:长连接的话则会保持这个连接,当客户端再次访问这个服务器时,会继续使用这个已建立的连接
6.HTTP 1.0和HTTP1.1区别
- 长连接:HTTP1.0是短连接的,HTTP1.1是长连接的
- 短连接:客户端和服务端每进行一次http操作就建立一次连接,任务完成就断开连接
- 长连接:客户端和服务端建立起的连接会保持一段时间,再次访问时使用这个连接就可以了
- 节约带宽:http1.1支持只发送header信息,不包含任何body信息,这样可以避免由于客户端没有访问服务器的权限的情况下,占用带宽的情况,如果客户端有访问权限,那么服务器会返回100,客户端继续发送body;如果没有权限的话,服务器会返回401,客户端就不会继续发送body了
- http1.1新增了6种http方法:在http1.0中,只有get,post,head三种方法。而http1.1新增了put,patch,delete,trace,options,connect等方法
- http1.1新增host域,用来访问部署在同一台服务器上的多个web应用,使用host字段可以指定访问哪个网站
7.HTTP 1.1和HTTP 2.0的区别
- 多路复用:HTTP2.0使用了多路复用技术,使得一个连接并发处理多个请求
- 首部压缩:HTTP2.0对header数据进行压缩,体积更小,传输速度更快
- 服务器推送:除了客户端请求的资源外,服务器会把相关的资源一起推送给客户端,这样当客户端需要访问这些资源时,不需要再去请求,提升响应速度
8.Session和Cookie的区别
Session和Cookie都是用来保存用户信息的,因为HTTP是无状态的
- Cookie保存至浏览器上,而Session保存在服务器上,相对来说更加安全
- Cookie只能保存String类型的数据,而Session可以保存任意类型的数据,更加多样化
- Cookie可能会被浏览器禁用
9.如何理解HTTP是无状态的?HTTP为什么要被设计为无状态的?
无状态指的是服务端对于对于客户端每次发出的请求都认为是一个新的请求,上一次会话和下一次会话之间没有关联
无状态可以简化服务器的复杂性,因为状态管理是一件很复杂的事情,要建立连接、创建会话、同步信息、释放资源、异常处理等等
10.有哪些HTTP方法是幂等的?
GET、HEAD、PUT、DELETE、OPTIONS