《图解Http》笔记

好久没写博客了,但是笔记是有常常写的,只是懒的把笔记放到博客上,因为我觉得,博客里一定要有内容,至少百分之八十的文章,要让人读了感觉有收获,我觉得这样个人博客才能够受欢迎,而自己平常做的笔记,比较随意,所以不太敢放上来,但是我觉得也不用那么刻意,毕竟看博客最多的可能是自己,现在也关闭了评论系统了,其实可以用gitalk,但是我觉得这个东西,比较粗糙,因为有时候换个url什么之类的,可能它又另启一个仓库,感觉比较傻瓜,当然,这只是过去我对它的认知,再加上评论的人不是很多,如果是交流学习的话,我感觉还是发邮件好一点,因为你会比较慎重。胡言乱语不多说,下面是正文

第 1 章 了解web及网络基础

HTTP,全名Hypertext Transfer Protocol,超文本传输协议

互联网是再TCP/IP协议族的基础上运作起来的

TCP/IP协议族分为四层:

  • 应用层:决定了向用户提供应用服务时的通信活动,如FTP,DNS,HTTP等
  • 传输层:提供数据传输,如TCP,UDP
  • 网络层:处理数据包?
  • 链路层:用来处理连接网路的硬件部分

与HTTP密切相关的几个协议:

  • IP协议:作用是保证数据包传送到指定目标
  • TCP协议:作用是可靠传输
  • DNS服务:负责解析域名成IP地址

URI和URL

  • URI是统一资源标识符,强调是唯一标识
  • URL是统一资源定位符,强调的是位置,在什么位置上

第 2 章 简单的HTTP协议

请求访问资源的一端为客户端,提供资源的一端为服务器端,始终都是由客户端来建立通信的

客户端请求报文:

//  方法  URI     版本协议
    GET /user/   HTTP/1.1
// Request Headers   
    Host: api.github.com
    Content-Type: text/plain
    Content-Length:21
// Request Body
    name=fushaolei&age=21

服务端响应报文:

//  版本协议    状态码  状态信息
	HTTP/1.1  200   OK
// Response Headers        
    Content-Type: application/json
    Content-Length:21
// Response Body
    bodybodybodybodybodybodybodybodybodybodybodybodybodybodybodybodybodybodybodybody

Http是不保存状态的协议

各种请求方法:

方法 说明
GET 请求资源,无Request Body,有Response Body
POST 用于增加或修改资源,有Request Body,有Response Body
PUT 同样用于增加或修改资源,但和POST不同的是,PUT是幂等的(调用一次与连续调用多次是等价的),有Response Body
HEAD 获得报文首部,没有Response Body
DELETE 删除文件
OPTIONS 询问支持方法
TRACE 追踪路径,可以查询发出去的请求是被怎样加工修改的
CONNECT 要求用隧道协议连接代理

使用Cookie进行状态管理,客户端保存好服务器端发送过来的Set-Cookie字段,在每次请求的时候带上Cookie,从而验证身份

第 3 章 HTTP报文内的HTTP信息

Http报文本质是由多行(CR+LF换行符)数据构成的字符串文本

报文结构:

请求报文:

请求行
各种首部字段
// 换行,就这里空一行
Request body如果有的话

响应报文:

状态行
各种首部字段
// 换行,就这里空一行
Response body如果有的话

首部字段有4种,分别是,通用首部,请求首部,响应首部,实体首部

内容编码:用于压缩和解压缩内容,有这几种:gzip,compress,deflate,identity(不进行编码)

分块传输编码:将实体分割成块传给客户端

发送多种数据的集合:multipart/form-data,multipart/byteranges,都会使用到boundary字符串来划分,比如boundary=abc,那么各个实体部分的起始行都会用–abc来进行标记,然后使用–abc–来作为结束的标志,而且每个实体部分的起始行都可含有首部字符

获取部分内容:Content-Range: bytes=5001-10000

第 4 章 返回结果的HTTP状态码

状态码的类别:

状态码 说明
1XX infonational
2XX success
3XX redirection
4XX client error
5XX server error

常见状态码:

状态码 说明
200 OK,被服务器正常处理,且对应请求的实体会返回
204 Not Content,被服务器正常处理,但没有实体返回
206 Partial Content,范围请求,响应报文应该有Content-Range来指定内容
301 Move Permanently,永久重定向
302 Found,临时重定向
303 See Other
304 Not Modified
307 Temporary Redirect
400 Bad Request,错误的请求
401 Unauthorized,未验证身份
403 Forbidden,访问被拒绝
404 Not Found 无法找到资源
500 Internal Server Error
503 Service Unavailable

第 5 章 与HTTP协作的Web服务器

通信数据转发程序:代理(服务器和客户端的“中间人”),网关(转发通信数据),隧道(安全通信)

在HTTP之前出现的协议:FTP,NNTP,Archie,WAIS,Gopher

第 6 章 HTTP首部

格式:

首部字段名:字段值1,字段值2

各种首部字段:

通用首部字段

字段名 说明
Cache-Control 指定缓存的工作机制,有一堆
Connnection 管理持久连接
Date 创建Http报文的日期和时间
Transfer-Encoding 传输报文主体时采用的编码
Upgrade 检测http及其他协议是否有高可用版本

请求首部字段:

字段名 客户端想向服务器说明的
Accept 能够处理的媒体类型
Accept-Charset 支持的字符集
Accept-Encoding 能支持的内容编码(gzip,compress,deflate,identity)
Accept-Language 能处理的语言
Authorization 认证信息
Host 目标主机地址(给目标主机定位子主机的),这是唯一一个必须包含在请求内的字段
Range 对于只想获取部分资源,这个字段指定部分资源的范围
Referer 请求的URI是从哪个web页面发起的
User-Agent 浏览器的种类
Cookie 请求需要验证Cookie时带上

响应首部字段:

字段名 服务器想向客户端说明的
Location 重定向的uri
Retry-After 稍后发出请求的时间
Server http服务器的信息
Set-Cookie 返回给客户端Cookie

实体首部字段:

字段名 说明
Content-Encoding 实体的内容编码
Content-Language 实体使用的语言是什么
Content-Length 实体的大小(单位是字节)
Content-Location 实体对应的URI
Content-Range 字节为单位的实体范围
Content-Type 实体媒体类型

第 7 章 确保Web安全的HTTPS

http的缺点:

  • 明文传输,内容可能会被窃听
  • 不验证身份,有可能遭遇伪装
  • 无法验证报文的完整性,可能已被篡改(像这样,请求或响应传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击

Https = Http + 加密 + 认证 + 完整性保护,简单来说 Https = Http + SSL

HTTPS通信步骤:

  1. 客户端发送Client Hello给服务端
  2. 服务端返回Server Hello给客户端
  3. 服务器发送Certificate报文,里边包含公钥证书
  4. 服务器发送Server Hello Done通知客户端,最初握手结束
  5. 客户端发送Client Key Exchange报文,里边包含Pre-master secret随机密码串
  6. 客户端发送Change Cipher Spec报文,提示服务端,之后的通信将采用Pre-master secret密钥加密
  7. 客户端发送Finished报文,该报文包含建立连接至今全部报文的整体校验值
  8. 服务端发送Change Cipher Spec
  9. 服务端发送Finished
  10. SSL连接建立完成