图解HTTP读书笔记
作者:互联网
1.http的几个版本
- http 0.9 严格来说并没有这个版本 这个版本表示的是Http1.0之前的那个版本 (草案)
- http 1.0 初期标准,该协议至今仍然被广泛使用在服务端
- http 1.1 也就是我们现在用的最多的http协议 有get post put delete head option等
- http 2.0 正在投入使用
- 作为发送端的客户端在应用层(HTTP)发出一个HTTP请求(比如查看页面请求)
- 在传输层(TCP)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层
- 在网络层(IP) 增加作为通信目的地的MAC地址后转发给链路层
- 在链路层将数据发送给通过网络相连的两台计算机
- 接收端的计算机(服务器)在链路层接收到数据,按序往上层发送,一直到应用层,完成接受
- 在使用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,而是会向对方确认是否成功送达。握手的过程中使用了TCP的标志()-SYN和ACK
- 发送端首先发送一个带SYN标志的数据包给对方
- 接收端收到之后,回传一个带有SYN/ACK标志的数据包以示传达确认信息
- 发送端再回传一个带ACK标志的数据包,代表握手结束
- 客户端想浏览某个页面,比如http://hackr.jp/xss/web
- 通过DNS协议获取该域名的IP地址
- 通过HTTP协议生成针对目标WEB服务器的HTTP请求报文
- 通过TCP协议将HTTP请求报文分割成多个报文段
- 通过IP协议搜索对方的地址,一边中转一边传送
- 找到对方服务器,成功传送后也通过同样的步骤把请求的处理结果进行回传
- 协议方案名:使用http或https等协议方案名,不区分字母大小写,最后需要附加一个冒号,也可以使用data:或js:这类指定数据或脚本程序的方案名
- 登录信息(认证):指定用户名和密码作为从服务器端获取资源时必要的登录信息,此项是可选项
- 服务器地址:可以是hackr.jp这种dns可解析的名称,或是192.168.1.1这类ipv4地址名,还可以是[0:0:0:0:0:0:0:1]这类用方括号括起来的ipv6地址名
- 服务器端口号:指定服务器连接的网络端口号,此项是可选项,若用户省略则自动使用默认端口号
- 带层次的文件路径:指定服务器上的文件路径来定位特指的资源,这与UNIX系统的文件目录结构类似
- 查询字符串:针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数
- 片段标识符:标记出已获取资源中的子资源
- 请求行:包含用于请求的方法、URI和HTTP版本
- 状态行:包含表示请求和响应的各种条件和属性的各类首部(
- 其他
- 报文:HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
- 实体:作为请求或相应的有效载荷数据被传输,其内容由实体首部和实体主体组成
- gzip(gun zip)
- compress (unix系统的标准压缩)
- deflate (zlib)
- identity (不进行编码)
- 1XX Informational(信息性状态码) 接收的请求正在处理
- 2XX Success(成功状态码) 请求正常处理完毕
- 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
- 4XX Client Error(客户端错误状态码) 服务器无法处理请求
- 5XX Server Error(服务器状态错误码) 服务器处理请求出错
- 200 OK 成功处理
- 204 NO Content 请求处理成功,但没有资源可返回
- 206 Partical Content 表示客户端进行了范围请求,响应报文中包含由Content-Range指定范围的实体内容
- 301 Moved Permanently 永久重定向,表示请求的资源已经分配了新的URI
- 302 Found 临时性重定向
- 303 See Other 表示由于请求对应的资源存在另一个URI,应该使用GET方法定向获取请求的资源 ==GET+302
- 304 Not Modified 资源已找到,但是未符合条件请求,不包含任何响应主体
- 307 Temporary Redirect 临时重定向,和302相同,区别是307遵照浏览器标准,不会从POST变为GET
- 400 Bad Request 请求报文中存在语法错误,需要修改请求的内容再次发送,另外,浏览器会像200 OK一样对待该状态码
- 401 Unauthorized 表示发送的请求需要通过HTTP认证,如果已经进行过请求,则表示认证失败
- 403 Forbidden 对请求资源的访问被服务器拒绝了
- 404 Not Found 服务器上没有请求的资源
- 500 Internal Server Error 服务器在执行请求过程中发生了错误
- 503 Service Unavailable 服务器正在繁忙或者超负荷状态,现在无法处理请求
- 缓存代理:转发响应时,会预先将资源的副本(缓存)保存在代理服务器上,再次收到对相同资源的请求时,就可以不从源服务器中获取资源,而是将之前缓存的资源进行响应返回
- 缓存服务器是具有有效期限的,缓存过期时代理服务器会想源服务器确定,然后进行资源的更新
- 客户端的缓存,缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中,如果浏览器缓存有效,就不再向服务器请求资源而是在本地磁盘内进行读取,和服务器缓存相同,过期之后会向源服务器确认资源的有效性。
- 透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理,反之,进行加工被称为非透明代理
- 通用首部字段(General Header Fields) 请求报文和响应报文两方都会使用的首部
- 请求首部字段(Request Header Filelds )请求报文使用的首部,补充了请求的附加内容,客户端信息,响应内容相关优先级等等
- 响应首部字段(Response Header Filelds) 响应报文使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息
- 实体首部字段(Entity Header Fields) 针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息
- 通信使用明文,内容可能会被窃听
- 不验证通信方的身份,所以可能遭遇伪装
- 无法证明报文的完整性,有可能被篡改
- 加密通信会消耗更多的CPU和内存资源,如果每次通信都加密,会消耗相当多的资源,平摊到处理器上,那么能够处理的请求数量一定会减少,因此,如果是非敏感信息就用HTTP进行通信,敏感信息使用HTTPS进行加密通信
- BASIC认证(基本认证)
- DIGEST认证 (摘要认证)
- SSL 客户端认证
- FORMBASE 认证(基于表单认证)
- HTML:WEB页面几乎全由HTML构建,HTML是超文本标记语言,是为了发送WEB上的超文本而开发的一种语言, HTML文档经过解析和渲染之后就是我们看到的WEB页面
- CSS:可以指定如何展现HTML内的各种元素,属于样式表标准之一,即使是相同的HTML文档,通过改变应用的CSS,页面外观也会发生改变
- XML:可扩展标记语言,旨在使用XML,使得互联网数据共享变得更容易
- JSON:以JS的对象表示法为基础的轻量级数据标记语言,能够处理的数据类型有/false/null/true/对象/数组/数字/字符串 这七种类型
标签:HTTP,请求,读书笔记,首部,报文,服务器,图解,客户端 来源: https://www.cnblogs.com/bokeofcxs/p/15743451.html