chapter 1
- TCP/IP: 互联网相关的协议集合
- TCP/IP分层: 应用层,传输层,网络层,数据链路层
- 应用层:FTP(File Transfer Protocol)和DNS(Domain Name System)就是其中的两类。 HTTP协议也在该层。
- 传输层:有两种性质不同的协议TCP(Transmission Control Protocol)和UDP(User Data Protocol)
- 网络层:IP(Internet Protocol)网际协议
- 链路层:
- DNS: 域名系统,负责解析域名。
- 三次握手:
- client send SYN
- server send SYN/ACK
- client send ACK
chapter 2
- HTTP是不保存状态的协议 stateless减少CPU及内存资源的消耗。
- HTTP使用URI定位互联网上的资源(可访问互联网上的任意资源)
- HTTP方法:
- GET : 获取资源,用于请求被URI标识的资源
- POST : 传输实体主体
- PUT : 传输文件,HTTP/1.0不带验证机制,一般不采用该方法
- HEAD: 用于确认URI的有效性以及资源更新日期等信息。只相应首部信息
- DELETE: 用于删除resource,自身不带验证机制。配合web应用程序的验证机制或遵守REST标准时使用。
- OPTIONS: 查询支持的方法
- TRACE: 追踪路径,不咋用了,还容易引发跨站追踪
- CONNECT : 要求用隋代协议连接代理
- 持久化连接:(keep-alive or connecotion resue)减少无谓的TCP连接与断开,增加通信量的开销
- 管线化:在持久化的基础上管线化(pipelining),不用等到响应结果就可以再次发送请求
- 使用Cookie的状态管理:通过在请求及相应的内容中写入Cookie信息控制client的状态。Server发送Set-Cookie的首部字段信息通知client保存Cookie。客户端再次发送时带有Cookie,Server就可以判断是哪个client发送的信息。
chapter 3
- 请求报文结构
报文首部(包含请求行及各种首部字段)
空行(/r/n or CR+LF)
报文主体(非必要)
Get /HTTP/1.1
User-Agent:Mozilla......
Content-Length:125
/r/n
内容
- 一般有四种首部:通用首部,请求首部,相应首部,实体首部。
- 分块传输编码:将实体主体分块编码进行传输,让浏览器逐步显示页面。每一块都会采用十六进制标记块大小。最后一块用“0(/r/n)”标记
- Range Request:请求时可使用首部字段Range指定请求资源的Byte范围
- 内容协商:请求相同的URI时,会根据浏览器的默认语言返回对应的英文或中文界面。
- 服务器驱动协商:Server根据首部字段返回结果。
- 客户端驱动协商:用户从Web页面进行语言选择。还可利用JS进行选择。
- 透明协商:上述两者的结合。
chapter 4
- 状态码:告知客户端请求的结果。通过状态码就可以知道服务器是否正常处理请求。由三位数字和原因短语组成。
- 状态码大致类别
- 1XX:Informational(信息型状态码) 接受的请求正在处理。
- 2XX:Success(成功) 请求正常处理完毕。
- 3XX:Redirection(重定向状态码) 需要进行附加操作以完成请求。
- 4XX:Client Error (客户端错误) 服务器无法处理。
- 5XX:Server Error(服务端错误) 服务器处理请求出错。
- 2XX:
- 200 OK:请求成功
- 204 No Centent:请求成功,返回不包含实体主体
- 206 Partial Content:范围请求成功
- 3XX:
- 301 Moved Permanently:永久性重定向。资源已被重新分配URI。 例如最后忘记添加反斜杠"/"就会301
- 302 Found:临时性重定向。
- 303 See Other: 资源存在另一个URI,请求新的URI。
- 304 Not Modified:请求时附带条件,资源已找到,但不符合条件。
- 4XX:
- 400 Bad Request:请求语法错误。
- 401 Unauthorized:表示需要HTTP认证,如果是第二次,表示认证失败。
- 403 Forbidden:请求资源的访问被拒绝,权限问题等。
- 404 Not Found:找不到资源。
- 5XX:
- 500 Internal Server Error:服务器内部资源故障。
- 503 Service Unavailable:服务器很忙,如果知道什么时候能忙完,最好相应带Retry-After。