走进 - Http - a
文章目录
- 1.发展历史
- 2.TCP/IP
- 3.HTTP协议
- 4.HTTP报文内的信息
- 5.HTTP返回状态码
- 6.Web服务器相关概念
- 7.HTTP首部
-
- 7.1 首部字段结构
- 7.2 首部字段类型
- 7.3 HTTP/1.1 首部字段一览
- 7.4 非HTTP/1.1首部字段
- 7.5 End-to-end首部和Ho-by-hop首部
- 7.6 HTTP/1.1 通用首部字段
- 7.7 请求首部字段
-
- 7.7.1 Accept
- 7.7.2 Accept-Charset
- 7.7.3 Accept-Encoding
- 7.7.4 Accept-Language
- 7.7.5 Authorization
- 7.7.6 Expect
- 7.7.7 From
- 7.7.8 Host
- 7.7.9 If-Match
- 7.7.10 If-Modified-Since
- 7.7.11 If-None-Match
- 7.7.12 If-Range
- 7.7.13 If-Unmodified-Since
- 7.7.14 Max-Forwards
- 7.7.15 Proxy-Authorization
- 7.7.16 Range
- 7.7.17 Referer
- 7.7.18 TE
- 7.7.19 User-Agent
- 7.8 响应首部字段
- 7.9 实体首部字段
- 7.10 为Cookie服务的首部字段
- 7.11 其它首部字段
1.发展历史
- HTTP/0.9(问世):1990年,
- HTTP/1.0:1996年5月,记载于RFC1945
- RFC1945 - Hypertext Transfer Protocol – HTTP/1.0
- HTTP/1.1:1997年1月,标准RFC2068,修订RFC2616
- RFC2616 - Hypertext Transfer Protocol – HTTP/1.1
2.TCP/IP
- TCP/IP是互联网相关各类协议族的总称
- 协议中存在各式各样的内容。
- 从电缆到规格到IP的选定方法,寻找异地用户的方法、双方建立通信的顺序,以及web页面显示需要处理的步骤,等等。
- 协议中存在各式各样的内容。
2.1 TCP/IP协议分层管理
- TCP/IP协议族按层次分:
- 应用层
- 决定向用户提供服务时通信的活动
- 传输层
- 对应上层应用,提供处于网络连接中的两台计算机之间的数据传输
- 两个协议:
- TCP(Transmission Control Protocol)传输控制协议
- UDP(User Data Protocol)用户数据报协议
- 网络层(网络互联层)
- 处理网络中的流动的数据包(数据传输的最小单位)
- 规定了通过怎样的路径到达对方计算机,并把数据包传送给对方
- 链路层(又名数据链路层,网络接口层)
- 处理连接网络的硬件部分
- 操作系统,硬件的设备驱动,NIC(Network Interface Card,网络适配器,即网卡),光纤等物理可见部分(包括连接器等一切传输媒介)
- 处理连接网络的硬件部分
- 应用层
2.2 通信传输流
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tMPwRrXQ-1576342371055)(C:\Users\ANGLE0\AppData\Roaming\Typora\typora-user-images\image-20191213232633213.png)]
-
流程
- 应用层发出请求
- 传输层(TCP协议)—>分割报文并标号
- 网络层(IP协议)—>增加作为通信目的地的MAC地址
- 链路层传送
- 网络层
- 传输层
- 应用层
-
流程图示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69DyECUu-1576342371069)(C:\Users\ANGLE0\AppData\Roaming\Typora\typora-user-images\image-20191213235257650.png)]
2.3 IP协议(Internet Protocol)
- 网际协议位于网络层,TCP/IP 中IP就是指网际协议
- 作用:数据包发送给对方
- 依赖信息:IP地址+MAC地址(Media Access Control Address)
- 网络中实际应用:采用ARP(Address ResolutionProtocel)解析地址的协议,依据通信方的IP地址反差出对应的MAC地址
2.4 TCP协议
- 传输层,提供可靠的字节流服务(Byte Stream Sercive)
- 为了方便传输将大块数据分割成以报文段(segment)为单位的数据包进行管理
- 可靠性:TCP协议能够确认数据最终是否送达到对方
- 三次握手(three-way handshaking)
- 标记:确认信息是否成功到达的:flag - SYN(synchronize),ACK(acknowlodgement)
- 流程:
- 发送端—>(带SYN标志的数据包)
- (带SYN/ACK的数据包)<—接收端接收到后
- 发送端—>(回传ACK标志的数据包),至此握手结束
2.5 DNS服务(Domain Name System)
- 应用层
- 域名到IP的解析服务,IP到域名的反查服务
2.6 URI和URL
- URI(统一资源标识符)
- URL(Uniform Resource Locator,统一资源定位符)
2.7 统一资源标识符
- URI(Uniform Resource Identifier)
- Uniform:规定统一的格式可方方便处理多种不同类型的资源,不用根据上下文环境来识别资源指定的访问方式
- Resource:资源的定义是“可标识的任何东西”,可以是单个,也可以是多数集合体
- Identifier:可标识的对象
- URI用字符串标识某一互联网资源 > URL表示资源的地点
2.8 URI格式
- 表示指定的URI,要使用涵盖全部必要信息的绝对URI,绝对URL相对URL
- 相对URL,是指从浏览器中基本URI指定的URL
- 示例:http://use:pass@www.text.com:8080/dir/doc/index.jsp?id=1#page1
- http://协议信息
- use:pass登录信息(可选)
- www.text.com服务器地址
- 8080服务端口号
- dir/doc/index.jsp带层次的文件路径
- id=1查询字符串(可选)
- page1片段标识符(可选)
3.HTTP协议
- 协议规定:请求从客户端发出,服务端响应并返回
- 无状态(stateless)协议(不保存状态,不对请求和响应之间的通信状态进行保存),即就是HTTP这个级别,协议对发送过的请求和响应都不做持久化处理
- 设计之初为了快速处理大量事务,确保协议的可升缩性
- 现在由于业务需要,需要保存状态等,引入Cookie技术实现这个操作
3.1 定位资源
- 使用URI
- 客户端请求访问资源时,URI将作为请求报文中的 请求URI 包含在内
- URI 为完整的请求URI
- 例如:GET http://www.baidu.com HTTP/1.1
- 对服务器本省发起请求(* 代替 请求URI)
- OPTIONS * HTTP/1.1
3.2 告知服务器意图的HTTP方法
- GET:
- 获取资源
- 请求已被URI识别资源,指定资源被服务器解析后返回响应内容
- 资源为文本:保持原样返回
- 资源为类似CGI(Common Gateway Interface,通用网关接口)的程序:返回执行后的输出结果
- POST:
- 传输实体主体
- GET方法也可传输实体,但POST主要内容并非获取响应内容
- PUT:
- 传输文件
- HTTP/1.1时不带验证机制,存在安全问题
- 一般使用REST(Representational State Transfer,表征状态转移)标准的同类WEB网站,可能开放使用
- HEAD:
- 获取报文首部
- 和GET方法一样,但不返回报文主体
- 一般用于确认URI的有效性及资源更新日期
- DELETE:
- 删除文件
- HTTP/1.1时不带验证机制
- 一般使用REST(Representational State Transfer,表征状态转移)标准的同类WEB网站,可能开放使用
- OPTIONS:
- 询问支持的方法
- 查询请求URI支持的方法
- TRACE:
- 追踪路径
- 让WEB服务器端将之前请求的通信返回给客户端的方法
- 操作:
- 发送请求时在Max-Forwards中填入数值每过一层减一(直至到0时停止传输),最后接到请求的服务器返回200 OK 的响应
- 可以查询发送出去的请求是如何被加工的
- 风险:
- 容易受到(XST, Cross-Site Tracing,跨站追踪的攻击),通常不使用
- CONNECT:
- 要求用隧道协议连接代理
- 实现用隧道协议进行TCP通信,主要使用SSL(Secure Sockets Layer,安全套接层)和TSL(Transport Layer Security,传输层安全)协议加密通信内容后经过网络隧道传输
3.3 1.0和1.1支持的方法
X—不支持,O—支持
协议 | 1.0 | 1.1 |
---|---|---|
LINK | O | X |
UNLINK | O | X |
GET | O | O |
POST | O | O |
PUT | O | O |
DELETE | O | O |
OPTIONS | X | O |
TRACE | X | O |
CONNECT | X | O |
3.4 持久连接
- 初识的HTTP通信要求每次通信都要断开TCP
- 应对策略
- HTTP Persistent Connections( 别名:HTTP keep-alive或HTTP connection reuse)
- HTTP/1.1中默认使用持久化连接
3.5 管线化
- 持久连接使得多数请求以管线化(pipelining)方式发送成为可能,不用等响应即可发送下一个请求
3.6 使用Cookie
- Cookie通过在请求和响应报文中写入Cookie来控制客户端的状态
- Cookie根据响应报文中的set-Cookie的首部字段通知客户端保存Cookie
- 加入Cookie后的请求流程:
- 1.客户端请求:首部不含Cookie
- 2.服务端响应:响应报文中含有通知客户端保存Cookie的字段,客户端保存Cookie
- 3.客户端请求:首部自动添加上保存的Cookie
4.HTTP报文内的信息
4.1 HTTP报文
-
构成:
- 多行字符串构成的字符串文本(换行由回车符CR(16进制0x0d)+ 换行符LF(16进制0x0a))
- 报文大致分为:报文首部+报文主体
-
图示:
- 请求报文结构
- 响应报文结构
-
请求行: