10、http协议
概述
- http协议是超文本传输协议,是应用层的协议。定义了万维网客户端程序怎么向万维网请求数据,以及服务器怎样把数据传送给客户端程序。
- http协议是明文传输的,所以不安全。
- http协议的默认端口号是80,https = http+ssl,默认端口号是443
特点
- 支持客户端/服务端模式,是请求响应协议。
客户端发送请求给服务端,服务端收到请求并处理后,把响应数据发送给客户端 - 无连接
每次连接只处理一次请求。服务器处理完客户端请求发出响应信息,收到客户端的应答后,就断开连接。采用这种方式可以节省传输时间。 - 无状态
http协议对事务处理没有记忆能力,前面的请求处理完后,是不会进行记忆。这就意味着,如果后续请求需要前面的信息,就必须重传。这样可能会导致每次连接传送的数据量增大。不过,如果后续请求不需要前面的信息时,就比较快。 - 简单快速
客户端在向服务器发送请求时,只需要传送请求方法和路径。常用的请求方法有GET、POST、HEAD。每种方法规定了客户端和服务端的不同联系类型。因为http协议简单使得http服务器的程序规模小,因而通信速度快。 - 灵活
http协议运行传输任意类型的数据对象,由Content-Type标记
工作原理
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
- 客户与服务器建立连接
- 客户向服务器提出请求
- 服务器接受请求,并根据请求返回相应的文件作为应答
- 客户与服务器关闭连接
get、post的区别
get、post的区别请求消息request
的组成
-
由四个部分组成:请求行(request line)、请求头部(header)、空行和请求数据
请求报文组成
请求报文例子
响应消息response
的组成
- 由四个部分组成:状态行、消息报头、空行和响应正文。
常见的http请求头字段
- Accept: 可接受的内容类型
- Accept-Language: 语言
- Connection:连接状态
- Host: 请求的域名(这里我设置的是请求本地,当然,关于域名,就是所谓的URL)
- User-Agent: 浏览器端浏览器型号和版本
- Accept-Encoding: 可接受的压缩类型 gzip,deflate
常见的http响应头
- Server:系统使用的服务器名称;比如Server:Apache/1.3.6(Unix)
- Content-Type:发送给服务器的正文的媒体类型;比- 如:Content-Type:application/json
- Content-Encoding:发送给服务器的正文的压缩方式;比如:Content-Encoding:gzip
- Content-Length:发送给服务器的正文的长度,用字节方式存储的十进制数字来表示
- Keep-Alive:保持连接的时间;比如:Keep-Alive:timeout=5,max=120
常见的响应状态码
- 200:服务器响应成功
- 302:临时跳转,跳转的地址通过location指定
- 400:客户端请求有语法错误,服务器无法识别
- 404:请求的资源丢失
- 500:服务器内部发生不可预期的错误
- 503:服务器暂时不可用
响应状态码详情
1xx:信息性 - 表示临时响应并需要请求方继续执行操作
- 100:继续;请求方应当继续提出请求,服务器返回此代码表示 已收到请求的第一部分,正在等待剩余的部分
- 101:切换协议;请求方要求服务器切换协议,服务器确认并准备切换
2xx:成功性 - 成功处理了请求
- 200:成功;服务器已成功处理了请求,通常表示服务器提供了请求的网页
- 201:已创建;请求成功,并且服务器创建了新的资源
- 202:已接受;服务器已接受请求,但还没处理
- 203:非授权信息;服务器已成功处理了请求,但响应的信息可能来自另一个来源
- 204/205:无内容/重置内容;服务器成功处理了请求,但没有返回响应信息
- 206:部分内容;服务器成功处理了部分的get请求
3xx:重定向 - 要完成请求,需要进一步操作
-
300:多种选择;针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择
-
301:永久移动;请求的网页已永久移动到新位置。服务器返回此响应(对get或head请求的响应)时,会自动将请求者转到新位置
-
302:临时移动;服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
-
303:查看其他位置;请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
-
304:未修改;自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
-
305:使用代理;请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理
-
307:临时重定向;服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4xx:客户端出错 - 请求包含无法错误或无法完成
-
400:错误请求;服务器不理解请求的语法。
-
401:未授权;请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
-
403:禁止;服务器拒绝请求。
-
404:未找到;服务器找不到请求的网页。
-
405:方法禁用;禁用请求中指定的方法。
-
406:不接受;无法使用请求的内容特性响应请求的网页。
-
407:需要代理授权;此状态代码与401类似,但指定请求者应当授权使用代理。
-
408:请求超时;服务器等候请求时发生超时。
-
409:冲突;服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
-
410:已删除;如果请求的资源已永久删除,服务器就会返回此响应。
-
411:需要有效长度;服务器不接受不含有效内容长度标头字段的请求。
-
412:未满足前提条件;服务器未满足请求者在请求中设置的其中一个前提条件。
-
413:请求实体过大;服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
-
414:请求的URI过长;请求的URI过长,服务器无法- 处理。
-
415:不支持的媒体类型;请求的格式不受请求页面的支持。
-
416:请求范围不符合要求;如果页面无法提供请求的范围,则服务器会返回此状态代码。
-
417:未满足期望值;服务器未满足"期望"请求标头字段的要求。
5xx:服务端出错 - 请求正确,但是服务器没有成功完成该请求
-
500:服务器内部错误;服务器遇到错误,无法完成请求。
-
501:尚未实施;服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
-
502:错误网关;服务器作为网关或代理,从上游服务器收到无效响应。
-
503:服务不可用;服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
-
504:网关超时;服务器作为网关或代理,但是没有及时从上游服务器收到请求。
-
505:HTTP版本不受支持;服务器不支持请求中所用的HTTP协议版本。
如何解决无状态的缺点?
- 使用Cookie或Session,两者都是用于跟踪客户端用户身份的一种方式,同时也都有有效期这一概念。
Cookie和Session的不同点
- cookie的数据保存在客户端,session的数据保存在服务端。
- cookie只能存储string数据,session可以存放任意object数据。
- cookie不安全,容易被分析伪造。session比较安全。
- session会在一定时间内保存在服务端,所以如果访问量多的时候,会影响服务器的性能。大型网站会有管理session的服务器。
- cookie的数据在客户端的个数和大小是有限制的,这个得看浏览器的限制。
为什么要抓包?
- 测试时需要查看发送的请求数据包中的数据是否正确,以及是否加密,或者埋点测试时需要抓包。以及前后端联调时可能需要抓包等情况
- 一般抓包可以在浏览器F12直接查看,或者使用fiddler、wireshark等工具。