精华内容
下载资源
问答
  • TCP/IP 详解 2 ) 笔记 / 目录
    2021-08-17 23:37:13

    1 导言

    1.1 架构原则

    1.2 设计与实现

    1.3 TCP/IP 协议栈的架构与协议

    1.4 互联网, 内联网, 外联网

    1.5 设计应用程序

    1.6 标准化过程

    1.7 实现与软件分发

    1.8 涉及互联网架构的攻击

    1.9 总结

    1.10 参考文献

    2 互联网地址架构

    2.1 介绍

    2.2 IP 地址表示

    2.3 基本的 IP 地址结构

    2.4 CIDR 与聚合

    2.5 有特殊用途的地址

    2.6 分配

    2.7 单播地址分配

    2.8 与 IP 地址相关的攻击

    2.9 总结

    2.10 参考文献

    3 链路层

    3.1 介绍

    3.2 以太网与 IEEE 802 LAN/MAN 标准

    3.3 全双工, 节能, 自动协商机制, 802.1X 流控制

    • 3.3.1 双工不匹配
    • 3.3.2 Wake-on LAN (WoL), 节能, Magic Packets
    • 3.3.3 链路层流程控制

    3.4 桥接器与交换机

    • 3.4.1 生成树协议(Spanning Tree Protocol (STP))
    • 3.4.2 802.1ak:Multiple Registration Protocol (MRP)

    3.5 无线局域网 - IEEE 802.11 (Wi-Fi)

    • 3.5.1 802.11 框架
    • 3.5.2 节能模式与 Time Sync Function (TSF)
    • 3.5.3 802.11 介质访问控制
    • 3.5.4 物理层细节:Rates, Channels, Frequencies
    • 3.5.5 Wi-Fi 安全
    • 3.5.6 Wi-Fi 网格 (802.11s)

    3.6 点对点协议(Point-to-Point Protocol (PPP))

    • 3.6.1 链路控制协议(Link Control Protocol (LCP))
    • 3.6.2 多链路点对点协议(Multilink PPP (MP))
    • 3.6.3 压缩控制协议(Compression Control Protocol (CCP))
    • 3.6.4 PPP 鉴权
    • 3.6.5 网络控制协议(Network Control Protocols (NCPs))
    • 3.6.6 Header 压缩
    • 3.6.7 例子

    3.7 回环

    3.8 MTU 与 Path MTU

    3.9 隧道基础知识

    • 3.9.1 单向链路

    3.10 链路层上的攻击

    3.11 总结

    3.12 参考文献

    4 地址解析协议(Address Resolution Protocol (ARP))

    4.1 介绍

    4.2 例子

    • 4.2.1 直接交付与 ARP

    4.3 ARP 缓存

    4.4 ARP 框架格式

    4.5 ARP 例子

    • 4.5.1 普通例子
    • 4.5.2 到不存在的主机的 ARP 请求

    4.6 ARP 缓存超时

    4.7 代理 ARP

    4.8 免费 ARP 与地址冲突检测(Address Conflict Detection (ACD))

    4.9 arp 命令

    4.10 使用 ARP 为一个内置设备设置 IPv4 地址

    4.11 涉及 ARP 的攻击

    4.12 总结

    4.13 参考文献

    5 IP 协议

    5.1 介绍

    5.2 IPv4 与 IPv6 Header

    • 5.2.1 IP Header 字段
    • 5.2.2 互联网校验和
    • 5.2.3 DS 字段与 ECN (以前叫做 ToS Byte 或 IPv6 流量类型)
    • 5.2.4 IP 选项

    5.3 IPv6 扩展 Header

    • 5.3.1 IPv6 选项
    • 5.3.2 路由 Header
    • 5.3.3 分片 Header

    5.4 IP 转发

    • 5.4.1 转发表
    • 5.4.2 IP 转发操作
    • 5.4.3 例子
    • 5.4.4 讨论

    5.5 移动 IP

    • 5.5.1 基本模型:双向隧道
    • 5.5.2 路由优化(Route Optimization (RO))
    • 5.5.3 讨论

    5.6 主机对 IP 数据报的处理

    • 5.6.1 主机模型
    • 5.6.2 地址选择

    5.7 涉及 IP 的攻击

    5.8 总结

    5.9 参考文献

    6 系统配置:DHCP 和自动配置

    6.1 介绍

    6.2 动态主机配置协议(Dynamic Host Configuration Protocol (DHCP))

    • 6.2.1 地址池与租约
    • 6.2.2 DHCP 与 BOOTP 报文格式
    • 6.2.3 DHCP 与 BOOTP 选项
    • 6.2.4 DHCP 协议操作
    • 6.2.5 DHCPv6
    • 6.2.6 在有中继的情况下使用 DHCP
    • 6.2.7 DHCP 鉴权
    • 6.2.8 重新配置扩展
    • 6.2.9 快速提交
    • 6.2.10 位置信息(Location Information (LCI and LoST))
    • 6.2.11 Mobility and Handoff Information (MoS and ANDSF)
    • 6.2.12 DHCP 窥探

    6.3 无状态地址自动配置(Stateless Address Autoconfiguration (SLAAC))

    • 6.3.1 动态配置 IPv4 链路本地地址
    • 6.3.2 为链路本地地址做 IPv6 SLAAC

    6.4 DHCP 与 DNS 交互

    6.5 以太网上的 PPP(PPP over Ethernet (PPPoE))

    6.6 涉及系统配置的攻击

    6.7 总结

    6.8 参考文献

    7 防火墙与网络地址转换(Network Address Translation (NAT))

    7.1 介绍

    7.2 防火墙

    • 7.2.1 包过滤防火墙
    • 7.2.2 代理防火墙

    7.3 网络地址转换(Network Address Translation (NAT))

    • 7.3.1 传统的 NAT:基本 NAT 与 NAPT
    • 7.3.2 地址与端口翻译行为
    • 7.3.3 过滤器行为
    • 7.3.4 NATs 背后的服务器
    • 7.3.5 发夹与 NAT 回环
    • 7.3.6 NAT 编辑器
    • 7.3.7 服务供应商 NAT(Service Provider NAT (SPNAT))与服务供应商 IPv6 翻译

    7.4 NAT 穿透

    • 7.4.1 针孔与打洞
    • 7.4.2 单边自我绑定地址(UNilateral Self-Address Fixing (UNSAF))
    • 7.4.3 NAT 会话穿透工具(Session Traversal Utilities for NAT (STUN))
    • 7.4.4 NAT 中继穿透(Traversal Using Relays around NAT (TURN))
    • 7.4.5 交互式连接建立(Interactive Connectivity Establishment (ICE))

    7.5 配置包过滤防火墙与 NAT

    • 7.5.1 防火墙规则
    • 7.5.2 NAT 规则
    • 7.5.3 与 NAT 和防火墙直接交互:UPnP, NAT-PMP, PCP

    7.6 实现 IPv4 与 IPv6 共存与转换的 NAT

    • 7.6.1 轻型双协议栈(Dual-Stack Lite (DS-Lite))
    • 7.6.2 用 NAT 与 ALG 进行 IPv4 IPv6 翻译

    7.7 涉及防火墙与 NAT 的攻击

    7.8 总结

    7.9 参考文献

    8 ICMPv4 和 ICMPv6:互联网控制报文协议(Internet Control Message Protocol)

    8.1 介绍

    • 8.1.1 IPv4 与 IPv6 中的封装

    8.2 ICMP 报文

    • 8.2.1 ICMPv4 报文
    • 8.2.2 ICMPv6 报文
    • 8.2.3 ICMP 报文的处理

    8.3 ICMP 错误报文

    • 8.3.1 扩展的 ICMP 与多部分报文
    • 8.3.2 无法到达目的地 (ICMPv4 Type 3, ICMPv6 Type 1) 与包太大 (ICMPv6 Type 2)
    • 8.3.3 重定向 (ICMPv4 Type 5, ICMPv6 Type 137)
    • 8.3.4 ICMP 超时 (ICMPv4 Type 11, ICMPv6 Type 3)
    • 8.3.5 参数问题 (ICMPv4 Type 12, ICMPv6 Type

    8.4 ICMP 请求/有信息的报文

    • 8.4.1 回显请求/回复 (ping) (ICMPv4 Types 0/8, ICMPv6 Types 129/128)
    • 8.4.2 路由器发现:路由器请求与公告 (ICMPv4 Types 9, 10)
    • 8.4.3 本地代理地址发现请求/回复 (ICMPv6 Types 144/145)
    • 8.4.4 移动前缀请求/公告 (ICMPv6 Types 146/147)
    • 8.4.5 移动 IPv6 快速切换报文 (ICMPv6 Type 154)
    • 8.4.6 组播侦听者请求/报告/完成 (ICMPv6 Types 130/131/132)
    • 8.4.7 组播侦听者发现版本 2(Version 2 Multicast Listener Discovery (MLDv2))(ICMPv6 Type 143)
    • 8.4.8 组播路由器发现(Multicast Router Discovery (MRD))(IGMP Types 48/49/50, ICMPv6 Types 151/152/153)

    8.5 IPv6 中的邻居发现

    • 8.5.1 ICMPv6 路由器请求与公告 (ICMPv6 Types 133, 134)
    • 8.5.2 ICMPv6 令居请求与公告 (ICMPv6 Types 135, 134)
    • 8.5.3 ICMPv6 反向邻居发现请求/公告 (ICMPv6 Types 141/142)
    • 8.5.4 邻居状态检测(Neighbor Unreachablility Detection (NUD))
    • 8.5.5 安全邻居发现(Secure Neighbor Discovery (SEND))
    • 8.5.6 ICMPv6 邻居发现(Neighbor Discovery (ND))选项

    8.6 翻译 ICMPv4 与 ICMPv6

    • 8.6.1 将 ICMPv4 翻译为 ICMPv6
    • 8.6.2 将 ICMPv6 翻译为 ICMPv4

    8.7 涉及 ICMP 的攻击

    8.8 总结

    8.9 参考手册

    9 广播与本地组播 (IGMP 与 MLD)

    9.1 介绍

    9.2 广播

    • 9.2.1 使用广播地址
    • 9.2.2 发送广播数据报

    9.3 组播

    • 9.3.1 将 IP 组播地址转换为 802 MAC/以太网地址
    • 9.3.2 例子
    • 9.3.3 发送组播数据报
    • 9.3.4 接收组播数据报
    • 9.3.5 主机地址过滤器

    9.4 互联网组管理协议(Internet Group Management Protocol (IGMP))与组播侦听者发现协议(Multicast Listener Discovery Protocol (MLD))

    • 9.4.1 IGMP 与组成员处理 MLD (“组成员部分”)
    • 9.4.2 IGMP 与组播路由器处理 MLD (“组播路由器部分”)
    • 9.4.3 例子
    • 9.4.4 轻量级 IGMPv3 与 MLDv2
    • 9.4.5 IGMP 与 MLD 健壮性
    • 9.4.6 IGMP 与 MLD 计数器与变量
    • 9.4.7 IGMP 与 MLD 窥探

    9.5 涉及 IGMP 与 MLD 的攻击

    9.6 总结

    9.7 参考文献

    10 用户数据报协议(User Datagram Protocol (UDP))和 IP 分片

    10.1 介绍

    10.2 UDP Header

    10.3 UDP 校验和

    10.4 例子

    10.5 UDP 与 IPv6

    • 10.5.1 Teredo:通过 IPv4 网络建立 IPv6 隧道

    10.6 轻量级 UDP(UDP-Lite)

    10.7 IP 分片

    • 10.7.1 例子:UDP/IPv4 分片
    • 10.7.2 重组超时

    10.8 UDP 的 Path MTU 发现

    • 10.8.1 例子

    10.9 IP 分片与 ARP/ND 交互

    10.10 UDP 数据报的最大长度

    • 10.10.1 实现限制
    • 10.10.2 数据报截断

    10.11 UDP 服务器设计

    • 10.11.1 IP 地址与 UDP 端口号
    • 10.11.2 限制本地 IP 地址
    • 10.11.3 使用多个地址
    • 10.11.4 限制外部 IP 地址
    • 10.11.5 每个端口使用多个服务器
    • 10.11.6 Spanning Address Families:IPv4 与 IPv6
    • 10.11.7 流量不够用与拥塞控制

    10.12 翻译 UDP/IPv4 与 UDP/IPv6 数据报

    10.13 互联网中的 UDP

    10.14 设计 UDP 与 IP 分片的攻击

    10.15 总结

    10.16 参考文献

    11 域名解析与域名系统(Domain Name System (DNS))

    11.1 介绍

    11.2 DNS 命名空间

    • 11.2.1 DNS 命名语法

    11.3 域名服务器与区域

    11.4 缓存

    11.5 DNS 协议

    • 11.5.1 DNS 报文格式
    • 11.5.2 DNS 扩展格式(The DNS Extension Format (EDNS0))
    • 11.5.3 UDP 或 TCP
    • 11.5.4 Question (Query) 与区域部分格式
    • 11.5.5 回答, 授权, 额外信息部分格式
    • 11.5.6 资源记录类型
    • 11.5.7 动态更新 (DNS UPDATE)
    • 11.5.8 区域翻译与 DNS NOTIFY

    11.6 Sort Lists, Round-Robin, Split DNS

    11.7 Open DNS 服务器与 DynDNS

    11.8 透明度与扩展性

    11.9 将 IPv4 翻译为 IPv6 的 DNS (DNS64)

    11.10 LLMNR 与 mDNS

    11.11 LDAP

    11.12 DNS 上的攻击

    11.13 总结

    11.14 参考文献

    12 TCP:传输控制协议(Transmission Control Protocol (Preliminaries))

    12.1 介绍

    • 12.1.1 ARQ 与重发
    • 12.1.2 数据包窗口与滑动窗口
    • 12.1.3 变量窗口:流程控制与拥塞控制
    • 12.1.4 设置重发超时

    12.2 TCP 介绍

    • 12.2.1 TCP 服务模型
    • 12.2.2 TCP 可靠性

    12.3 TCP Header 与封装

    12.4 总结

    12.5 参考文献

    13 TCP 连接管理

    13.1 介绍

    13.2 TCP 连接建立与终止

    • 13.2.1 TCP 半关闭
    • 13.2.2 同时打开与关闭
    • 13.2.3 初始序列号(Initial Sequence Number (ISN))
    • 13.2.4 例子
    • 13.2.5 连接建立超时
    • 13.2.6 连接与翻译器

    13.3 TCP 选项

    • 13.3.1 最大报文段长度(Maximum Segment Size (MSS))选项
    • 13.3.2 选择性确认(Selective Acknowledgment (SACK))选项
    • 13.3.3 Window Scale (WSCALE 或 WSOPT) 选项
    • 13.3.4 时间戳选项与防止序号回绕(Protection against Wrapped Sequence Numbers (PAWS))
    • 13.3.5 用户超时(User Timeout (UTO))选项
    • 13.3.6 鉴权选项(Authentication Option (TCP-AO))

    13.4 TCP 的 Path MTU 发现

    • 13.4.1 例子

    13.5 TCP 状态转换

    • 13.5.1 TCP 状态转换图
    • 13.5.2 TIME_WAIT (2MSL Wait) 状态
    • 13.5.3 安静时间
    • 13.5.4 FIN_WAIT_2 状态
    • 13.5.5 开关同时转换

    13.6 重置段

    • 13.6.1 向不存在的端口请求连接
    • 13.6.2 中止连接
    • 13.6.3 半开的连接
    • 13.6.4 TIME-WAIT 暗杀(TIME-WAIT Assassination (TWA))

    13.7 TCP 服务器操作

    • 13.7.1 TCP 端口号
    • 13.7.2 限制本地 IP 地址
    • 13.7.3 限制外部端点
    • 13.7.4 呼入连接队列

    13.8 涉及 TCP 连接管理的攻击

    13.9 总结

    13.10 参考文献

    14 TCP 超时与重传

    14.1 介绍

    14.2 简单的超时与重传例子

    14.3 设置重传超时(Retransmission Timeout (RTO))

    • 14.3.1 经典方法
    • 14.3.2 标准方法
    • 14.3.3 Linux 方法
    • 14.3.4 RTT 估计器行为
    • 14.3.5 RTTM 健壮性降低与重排序

    14.4 基于定时器的重传

    • 14.4.1 例子

    14.5 快速重传

    • 14.5.1 例子

    14.6 用选择性确认进行重传

    • 14.6.1 SACK 接受者行为
    • 14.6.2 SACK 发送者行为
    • 14.6.3 例子

    14.7 假超时与重传

    • 14.7.1 复制 SACK(Duplicate SACK (DSACK))扩展
    • 14.7.2 Eifel 检测算法
    • 14.7.3 Forward-RTO 恢复 (F-RTO)
    • 14.7.4 Eifel 响应算法

    14.8 数据包重排序与复制

    • 14.8.1 重排序
    • 14.8.2 复制

    14.9 目的地度量

    14.10 重新打包

    14.11 涉及 TCP 重传的攻击

    14.12 总结

    14.13 参考文献

    15 TCP 数据流与窗口管理

    15.1 介绍

    15.2 交互式通信

    15.3 延迟确认

    15.4 Nagle 算法

    • 15.4.1 延迟 ACK 与 Nagle 算法交互
    • 15.4.2 禁用 Nagle 算法

    15.5 流程控制与窗口管理

    • 15.5.1 滑动窗口
    • 15.5.2 零窗口与 TCP 坚持定时器
    • 15.5.3 糊涂窗口综合征(Silly Window Syndrome (SWS))
    • 15.5.4 大缓冲区与自动调谐

    15.6 应急机制

    • 15.6.1 例子

    15.7 与窗口管理相关的攻击

    15.8 总结

    15.9 参考文献

    16 TCP 拥塞控制

    16.1 介绍

    • 16.1.1 TCP 中的拥塞检测
    • 16.1.2 减慢 TCP 发送者

    16.2 经典算法

    • 16.2.1 慢启动
    • 16.2.2 拥塞避免
    • 16.2.3 在慢启动与拥塞避免之间做选择
    • 16.2.4 Tahoe, Reno, 快速恢复
    • 16.2.5 标准 TCP

    16.3 标准算法的演变

    • 16.3.1 NewReno
    • 16.3.2 用 SACK 进行 TCP 拥塞控制
    • 16.3.3 转发确认(Forward Acknowledgment (FACK))与比率等分
    • 16.3.4 有限传输
    • 16.3.5 拥塞窗口验证(Congestion Window Validation (CWV))

    16.4 处理假 RTO - Eifel 响应算法

    16.5 扩展的例子

    • 16.5.1 慢启动行为
    • 16.5.2 发送者暂停与本地拥塞 (Event 1)
    • 16.5.3 Stretch ACKs 与从本地拥塞中恢复
    • 16.5.4 快速重传与 SACK 恢复 (Event 2)
    • 16.5.5 额外本地拥塞与快速重传事件
    • 16.5.6 超时, 重传, Undoing cwnd Changes
    • 16.5.7 连接完成

    16.6 共享拥塞状态

    16.7 TCP 友好

    16.8 高速环境中的 TCP

    • 16.8.1 高速 TCP(HighSpeed TCP (HSTCP))与有限慢启动
    • 16.8.2 二进制增长拥塞控制(Binary Increase Congestion Control (BIC 与 CUBIC))

    16.9 基于延迟的拥塞控制

    • 16.9.1 Vegas
    • 16.9.2 FAST
    • 16.9.3 TCP Westwood and Westwood+
    • 16.9.4 复合 TCP

    16.10 缓冲区膨胀

    16.11 主动队列管理与 ECN

    16.12 涉及 TCP 拥塞控制的攻击

    16.13 总结

    16.14 参考文献

    17 TCP Keepalive

    17.1 介绍

    17.2 描述

    • 17.2.1 Keepalive 例子

    17.3 涉及 TCP Keepalive 的攻击

    17.4 总结

    17.5 参考文献

    18 安全:EAP, IPsec, TLS, DNSSEC, DKIM

    18.1 介绍

    18.2 信息安全的基本原则

    18.3 对网络通信的威胁

    18.4 基本加密与安全机制

    • 18.4.1 密码系统
    • 18.4.2 Rivest, Shamir, Adleman (RSA) 公钥加密
    • 18.4.3 Diffie-Hellman-Merkle Key Agreement (aka Diffie-Hellman 或 DH)
    • 18.4.4 签密与 Elliptic Curve Cryptography (ECC)
    • 18.4.5 密钥导出与完全正向保密(Perfect Forward Secrecy (PFS))
    • 18.4.6 伪随机数, 生成器, 函数族
    • 18.4.7 随机数与加盐
    • 18.4.8 加密哈希函数与消息摘要
    • 18.4.9 消息认证码(Message Authentication Codes (MACs, HMAC, CMAC, GMAC))
    • 18.4.10 Cryptographic Suites 与 Cipher Suites

    18.5 证书, 证书授权中心(Certificate Authorities (CAs)), PKIs

    • 18.5.1 公钥证书, 证书授权中心, X.509
    • 18.5.2 验证证书有效性与撤回证书
    • 18.5.3 属性证书

    18.6 TCP/IP 安全协议与分层

    18.7 网络访问控制:802.1X, 802.1AE, EAP, PANA

    • 18.7.1 EAP 方法与密钥导出
    • 18.7.2 EAP 重新认证协议(EAP Re-authentication Protocol (ERP))
    • 18.7.3 承载网络访问认证的协议(Protocol for Carrying Authentication for Network Access (PANA))

    18.8 3 层 IP 安全(IP Security (IPsec))

    • 18.8.1 互联网密钥交换(Internet Key Exchange (IKEv2))协议
    • 18.8.2 Authentication Header (AH)
    • 18.8.3 封装安全载荷(Encapsulating Security Payload (ESP))
    • 18.8.4 组播
    • 18.8.5 L2TP/IPsec
    • 18.8.6 IPsec NAT 穿越
    • 18.8.7 例子

    18.9 传输层安全(Transport Layer Security (TLS 与 DTLS))

    • 18.9.1 TLS 1.2
    • 18.9.2 数据报 TLS(TLS with Datagrams (DTLS))

    18.10 DNS 安全(DNS Security (DNSSEC))

    • 18.10.1 DNSSEC 资源记录
    • 18.10.2 DNSSEC 操作
    • 18.10.3 事务鉴权 (TSIG, TKEY, SIG(0))
    • 18.10.4 DNS64 的 DNSSEC

    18.11 域名密钥识别邮件(DomainKeys Identified Mail (DKIM))

    • 18.11.1 DKIM 签密
    • 18.11.2 例子

    18.12 安全协议上的攻击

    18.13 总结

    18.14 参考文献

    更多相关内容
  • TCP IP详解卷1:协议 原书2.pdf 一个pdf文件,不是多个。其他的资源都是多个的,分还高
  • TCPIP协议详解卷2:实现 pdf版,有目录,完美阅读体验。 中文书名:TCP/IP详解 卷2:实现 英文书名:TCP/IP Illustrated, Volume 2: The Implementation 作者:(美) Gary R. Wright ,W. Richard Stevens 译者:陆...
  • (必读)TCPIP详解 第二版 pdf

    热门讨论 2012-03-15 18:46:41
    Addison.Wesley.TCP-IP.Illustrated.Volume.1.The.Protocols.2nd.Ed.2012
  • TCPIP详解:实现

    2016-03-23 12:58:29
    TCPIP 详解 实现
  • 本书主要讲述TCP/IP协议,展示每种协议的实际工作原理的同时还解释了其来龙去脉,新增了RPC、访间控制身份认证、隐私保护、 NFS、 SMB/CIFS、 DHCP、 NAT、防火墙、电子邮件、 Web、 Web服务、无线、无线安全等内容,每...
  • TCP IP详解 第二版 卷1 中文版+英文版,可以对照查看。虽然有电子版的,但是这种经典还是建议买本纸质版的,祝大家有所收获!
  • 在书名为《TCP/IP详解》这样的系列书中夹杂着TCP/IP以外的协议不免令人生奇,但Unix域协议几乎15年前就已经伴随着BSDTCP/IP的实现在4.2BSD中发布了。今天,它们在任何一个从伯克利衍生而来的内核中都在频繁地使用...
  • 理解体系结构的范围和局限性以及它的协议,可以为思考未来的演变甚至革命奠定良好的基础。今天小编给大家带来一本书:《TCP/IP详解卷1》“对于开发人员、网络管理员以及其他需要理解TCP/IP技术的人来说,这两书是一本...

    前言

    TCP/IP体系结构在构思时就是一个产品。在适应多方面呈百万倍或以上不断增长的需求,更不用说大量的应用程序方面,它是非凡的。理解体系结构的范围和局限性以及它的协议,可以为思考未来的演变甚至革命奠定良好的基础。

    今天小编给大家带来一本书:《TCP/IP详解卷1》

    “对于开发人员、网络管理员以及其他需要理解TCP/IP技术的人来说,这两书是一本优秀的参考书。它覆盖面广泛,涉及TCP/IP各方面的主题。对专家来说,它提供足够的细节;对于初学者来说,它给出详细的背景和注释。”

    e301cf2f0bb685c4634b1594090d2869.png

    因平台篇幅限制,无法全部在此展现,需要这本书籍文档的小伙伴可以

    转发+关注后,后台私信“666”即可

    《TCP/IP卷1》

    第一章:概述

    8df475987d1da3fafcdb846e1ff7cde2.png

    第二章:Intemet地址结构

    2e447ee2fa00cf9c7720bedd4e66e8e5.png

    第三章:链路层

    13c9177f1048fae5f1edef5f38c70cd4.png

    第四章:地址协议解析

    fd9da901154f553253793ea1da906297.png

    第五章:Intemet协议

    a639c86c8a02d580263554569c5a76dc.png

    第六章:系统配置: DHcP和自动配置

    17d63252b2dd81f7578d7188b62adc54.png

    第七章:防火墙和网络地址转换

    333b2086b20892e72a8d16e4a3759362.png

    第八章:ICMPv4和ICMPv6: Intemet控制报文协议

    8f42f3f814b5f11261c8ddd31f8cbccf.png

    第九章:广播和本地组播(IGMP和MLD)

    15e996f9158c67bd1cfa9f2436feed69.png

    第十章:用户数据报协议和IP分片

    5bc1d186ef30c0a34c5b81d621eea7dd.png

    十一章:名称解析和域名系统

    f5c980900388d3adcd06c6bc24f7529b.png

    十二章:TCP:传输控制协议(初步)

    f82163361ed15329da6547855779841d.png

    十三章:TCP链接管理

    2104a08ff60f21c728131493a666c66b.png

    十四章:TCP超时与重传

    8e06028eda3402b14caba5d24d27780d.png

    十五章:TcP数据流与窗日管理

    03719e7085e8b52d230a66d033279298.png

    十六章:TCP拥塞控制

    d40abddec99c196596e7b013f8a32bbf.png

    十七章:TCP保括机制

    3d946b941824ea81c44dc3af240beea9.png

    十八章:安全:可扩展身份认证协议、 IP安全协议、传输层安全、 DNS安全、域名密钥识别邮件

    f6ac78e70ec6cc9a4484d706d3636cf1.png

    以上就是这本《TCP/IP详解卷1》的目录及部分内容,“ stevens所有的书都具有很强的可读性和技术性,这本书尤其如此。尽管已经有很多描述TCP/IP协议的书问世,但Stevens在书中提供了别人没有的深度和实现细节。他采用可视化方法使读者深入TCP/IP内部,以便了解该协议是如何工作的。”

    获取方式

    这本《TCP/IP详解卷1》已经给大家整理成了pdf文档,有需要的朋友们可以

    转发+关注后,私信“666”即可获取

    展开全文
  • TCP/IP协议详解三卷套高清PDF
  • TCPIP路由技术卷一
  • TCPIP协议详解

    2012-02-14 15:25:42
    TCPIP协议详解.pdf,非扫描,好资源。没下载分了,否则会让大家0分下载的。目录如下: 1章概述 2章mbuf:存储器缓存 3章接口层 4章接口:以太网 5章接口:SLIP和环回 6章IP 编址 7章域和协议 ...
  • TCP IP详解卷1:协议 原书2 压缩TCP IP详解卷1:协议 原书2 压缩TCP IP详解卷1:协议 原书2 压缩TCP IP详解卷1:协议 原书2 压缩
  • tcp/ip详解卷1第二版(中英文合集),英文版是文字PDF版本,中文版是清晰文字版,都带完整书签。考虑到第一版的确已经过时(很多技术已经被弃用或者修改),还是推荐读第二版,而且最好读英文版,中文版用来对照一下...
  • tcp/ip协议 详解分三部分上传 中文
  • TCP/IP协议详解(卷PDF

    热门讨论 2011-04-27 14:11:13
    介绍TCP/IP协议的圣经,网络编程的入门书籍,大师之作,全书分三卷,这是卷
  • 由于收到文件大小的限制 只能分部分上传了 TCPIP协议详解:实现(2) 还有TCPIP协议详解:实现(2) TCPIP协议详解:实现(3) 三部分合起来是完整的 ~~~~
  • [TCP/IP] TCP/IP 详解 卷1 协议 2 (英文)

    千次下载 热门讨论 2013-12-28 09:00:19
    [Addison-Wesley Professional] TCP/IP 详解 卷1 协议 2 (英文) [Addison-Wesley Professional] TCP/IP Illustrated Volume 1 The Protocols 2nd Edition (E-Book) ☆ 图书概要:☆ TCP/IP Illustrated, ...
  • TCP-IP详解 卷2 :实现 pdf下载

    千次阅读 2019-10-06 13:53:51
    一共分为三卷的书,好多的内容,泛读了一下,力推。 需要学习的朋友可以通过网盘免费下载pdf版(先点击普通下载-----再选择普通用户就能免费下载了): http://putpan.com/fs/by...

    一共分为三卷的书,好多的内容,泛读了一下,力推。

    需要学习的朋友可以通过网盘免费下载pdf版 (先点击普通下载-----再选择普通用户就能免费下载了):

    http://putpan.com/fs/byi8beens3hu9e904/

    《TCP/IP详解·卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。《TCP/IP详解·卷2:实现》不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点。《TCP/IP详解·卷2:实现》适用于希望理解TCP/IP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。

    目录  · · · · · ·

    第一章 概述
    1.1 引言
    1.2 源代码表示
    1.3 历史
    1.4 应用编程接口
    1.5 程序示例
    1.6 系统调用和库函数
    1.7 描述符
    1.8 网络实现概述
    1.9 mbuf与输出处理
    1.10 输入处理
    1.11 网络实现概述
    1.12 中断级别与并发
    1.13 源代码组织
    1.14 测试网络
    1.15 小结
    第二章 mduf:存储器缓存
    2.1 引言
    2.2 代码介绍
    2.3 mduf的定义
    2.4 mduf结构
    2.5 简单的mduf宏和函数
    2.6 m_devget和m_pullup函数
    2.7 mduf宏和函数的小结
    2.8 Net/3联网数据结构小结
    2.9 m_copy和簇引用记数
    2.10 其他选择
    2.11 小结
    第三章 接口层
    3.1 引言
    3.2 代码介绍
    3.3 ifnet结构
    3.4 ifaddr结构
    3.5 sockaddr结构
    3.6 ifnet与ifaddr的专用化
    3.7 网络初始化概述
    3.8 以太网初始化
    3.9 SLIP初始化
    3.10 环回初始化
    3.11 if_attach函数
    3.12 ifinit函数
    3.13 小结
    第四章 接口:以太网
    4.1 引言
    4.2 代码介绍
    4.3 以太网接口
    4.4 ioctl系统调用
    4.5 小结
    第五章 接口:SLIP和环回
    5.1 引言
    5.2 代码介绍
    5.3 SLIP接口
    5.4 环回接口
    5.5 小结
    第六章 IP编址
    6.1 引言
    6.2 代码介绍
    6.3 接口和地址小结
    6.4 sockaddr_in结构
    6.5 in_ifaddr结构
    6.6 地址指派
    6.7 接口ioctl处理
    6.8 internet实用函数
    6.9 ifnet实用函数
    6.10 小结
    第七章 域和协议
    7.1 引言
    7.2 代码介绍
    7.3 domain结构
    7.4 protosw结构
    7.5 IP的domain和protosw结构
    7.6 pffindproto和pffindtype函数
    7.7 pfctlinput函数
    7.8 IP初始化
    7.9 sysctl系统调用
    7.10 小结
    第八章 IP:网际协议
    8.1 引言
    8.2 代码介绍
    8.3 IP分组
    8.4 输入处理:ipintr函数
    8.5 转发:ip_forward函数
    8.6 输出处理:ip_output函数
    8.7 Internet检验和:in_cksum函数
    8.8 setsockopt和getsockopt系统调用
    8.9 ip_sysctl函数
    8.10 小结
    第九章 IP选项处理
    9.1 引言
    9.2 代码介绍
    9.3 选项格式
    9.4 ip_dooptions函数
    9.5 记录路由选项
    9.6 源站和记录路由选项
    9.7 时间戳选项
    9.8 ip_insertoptions函数
    9.9 ip_pcbopts函数
    9.10 一些限制
    9.11 小结
    第十章 IP的分片与重装
    10.1 引言
    10.2 代码介绍
    10.3 分片
    10.4 ip_optcopy函数
    10.5 重装
    10.6 ip_optcopy函数
    10.7 ip_slowtimo函数
    10.8 小结
    第十一章 ICMP:Internet控制报文协议
    第十二章 IP多播
    第十三章 IGMP:Internet组管理协议
    第十四章 IP多播选路
    第十五章 插口层
    第十六章 插口I/O
    第十七章 插口选项
    第十八章 Radix树路由表
    第十九章 选路请求和选路消息
    第二十章 选路接口
    第二十一章 ARP:地址解析协议
    第二十二章 协议控制块
    第二十三章 UDP:用户数据报协议
    第二十四章 TCP:传输控制协议
    第二十五章 TCP的定时器
    第二十六章 TCP输出
    第二十七章 TCP的函数
    第二十八章 TCP的输入
    第二十九章 TCP的输入(续)
    第三十章 TCP的用户需求
    第三十一章 BPF:BSD分组过滤程序
    第三十二章 原始IP
    结束语
    附录A 部分习题的解答
    附录B 源代码的获取
    附录C RFC 1122的有关内容

    需要IT编程经典书籍资源大合集百度网盘链接的加qq 3083709327,另本人愿意有偿带小白学python,帮助你答疑解惑,帮助你解决问题,指导你找工作,带你入行。相信我有人带着你的话可以少走弯路,成功入行拿高薪。北京地区周六日可上门指导,非北京线上指导。本人前每日优鲜后端工程师,土木专业自学python成功转行,月薪5位数,性格安静,诚信正直,想学的加qq。

    另闲聊的也可加,就当交个朋友吧!


    更多专业前端知识,请上 【猿2048】www.mk2048.com
    展开全文
  • TCP-IP详解卷1:协议.pdf TCP-IP详解卷2:实现.pdf TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议.pdf
  • 《TCP/IP详解(卷2):实现》pdf

    热门讨论 2011-04-26 23:10:05
    编辑推荐 ...1999年再版的《计算机网络》2为普通高等教育“九五”国家级重点教材。近来还主持翻译了Comer写的《TCP/IP网络互联》计算机网络经典教材一套三卷本,Harnedy写的《简单网络管理协议教程》。
  • TCP-IP详解:实现(超清晰),撸主找了N久,找到个拆散的高清,合并后共享给大家。
  • TCP_IP协议详解高清非扫描PDF版 第一卷:TCP-IP_1(协议) 第二卷:TCP-IP_2(实现) 第三卷:TCP-IP_3(TCP事务协议,HTTP,NNTP和UNIX域协议)
  • tcp ip详解2全部实现 目 录 译者序 前言 1章 概述 1 1.1 引言 1 1.2 源代码表示 1 1.2.1 将拥塞窗口设置为1 1 1.2.2 印刷约定 2 1.3 历史 2 1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络...
  • TCPIP协议详解卷三.pdf,非扫描,好资源。没下载分了,否则会让大家0分下载的。 目 录 译者序 前言 一部分 TCP事务协议 1章 T/TCP概述 1 1.1 概述 1 1.2 UDP上的客户-服务器 1 1.3 TCP上的客户-服务器 6 1.4 ...
  • HTTP协议详解

    2021-02-18 09:19:02
    文章目录1.... GET 请求方式2. POST 请求方式5. 测试GET请求方式6.... HTTP是 Hyper Text Transfer ...它是一种请求/响应式的协议,客户端在与服务器端建立连接后,就可以向服务器端发送请求,这种请求被称作HTTP请求,服务

    1. HTTP介绍

    • HTTP是 Hyper Text Transfer Protocol的缩写,即超文本传输协议。它是一种请求/响应式的协议,客户端在与服务器端建立连接后,就可以向服务器端发送请求,这种请求被称作HTTP请求,服务器端接收到请求后会做出响应,称为HTTP响应,客户端与服务器端在HTTP 下的交互过程如图3-1所示。

    在这里插入图片描述

    • 从图3-1中可以清楚地看到客户端与服务端使用HTTP通信的过程,接下来总结一下HTTP协议的特点,具体如下。
      (1) 支持客户端(浏览器就是一种 Web客户端)/服务器模式。
      (2) 简单快速:客户端向服务器请求服务时,只需传送请求方式和路径。常用的请求方式有GET、POST等,每种方式规定了客户端与服务器联系的类型不同。由于 HTTP简单,使得HTTP服务器的程序规模小,因而通信速度很快。
      (3) 灵活:HTTP 允许传输任意类型的数据,正在传输的数据类型由 Content-Type 加以标记。
      (4) 无状态:HTTP是无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

    2. HTTP 1.0 和 HTTP 1.1

    • HTTP自诞生以来,先后经历了很多版本,其中,最早的版本是 HTTP 0.9,它1990年被提出。后来,为了进一步完善HTTP,先后在1996年提出了版本1.0,在1997年提出了版本1.1。由于HTTP 0.9版本已经过时,这里不作过多讲解。接下来,只针对HTTP 1.0和 HTTP 1.1进行详细地讲解。

    2.1 HTTP 1.0

    • 基于HTTP1.0协议的客户端与服务器在交互过程中需要经过建立连接、发送请求信息、回送响应信息、关闭连接4个步骤,具体交互过程如图3-2所示。
      在这里插入图片描述
    • 从图3-2中可以看出,客户端与服务器建立连接后,每次只能处理一个 HTTP请求。对于内容丰富的网页来说,这样的通信方式明显有缺陷。例如,下面的一段HTML代码:
    <html>
    	<body>
    		<img src="/image01.jpg">
    		<img src="/image02.jpg">
    		<img src="/image03.jpg">
    	</body>
    </html>
    
    • 上面的 HTML文档中包含三个<img>标记,由于<img>标记的src属性指明的是图片的 URL 地址,因此,当客户端访问这些图片时,还需要发送三次请求,并且每次请求都需要与服务器重新建立连接。如此一来,必然导致客户端与服务器端交互耗时,影响网页的访问速度。

    2.2 HTTP 1.1

    • 为了克服上述HTTP 1.0的缺陷,HTTP1.1版本应运而生,它支持持久连接,也就是说在一个 TCP 连接上可以传送多个 HTTP 请求和响应,从而减少了建立和关闭连接的消耗和延时。基于 HTTP 1.1的客户端和服务器端的交互过程,如图3-3所示。
      在这里插入图片描述
    • 从图3-3中可以看出,当客户端与服务器端建立连接后,客户端可以向服务器端发送多个请求,并且在发送下个请求时,无须等待上次请求的返回结果。但服务器必须按照接受客户端请求的先后顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容。由此可见,HTTP 1.1不仅继承了HTTP 1.0的优点,而且有效解决了HTTP 1.0的性能问题,显著地减少了浏览器与服务器交互所需要的时间。

    3. HTTP消息

    • 当用户在浏览器中访问某个 URL地址,单击网页的某个超链接或者提交网页上的form表单时,浏览器都会向服务器发送请求数据,即 HTTP请求消息。服务器接收到请求数据后,会将处理后的数据回送给客户端,即 HTTP 响应消息HTTP请求消息和HTTP响应消息统称为HTTP消息。
    • 在HTTP消息中,除了服务器端的响应实体内容(HTML 网页、图片等)以外,其他信息对用户都是不可见的,要想观察这些“隐藏”的信息,需要借助一些网络查看工具,如:F12等。

    (1) 在浏览器的地址栏中输入 www.baidu.com 访问百度首页,在F12中可以看到请求的 URL地址,如图所示。
    在这里插入图片描述
    (2) 单击URL地址左边的Name,在展开的默认头信息选项卡中可以看到格式化后的响应头信息和请求头信息。单击请求头信息一栏左边的“原始头信息”,可以看到原始的请求头信息,具体如下所示;
    在这里插入图片描述

    • 在上述请求消息中,第一行为请求行,请求行后面的为请求头消息,空行代表请求头的结束。

    (3) 单击响应头信息一栏左边的“原始头信息”,可以看到原始的响应头信息,如下所示:
    在这里插入图片描述

    • 在上面的响应消息中,第一行为响应状态行,响应状态行后面的为响应消息头,空行代表响应消息头的结束。

    4. HTTP请求消息

    • 在 HTTP中,一个完整的请求消息是由请求行、请求头和实体内容三部分组成,其中,每部分都有各自不同的作用。本节将围绕HTTP请求消息的每个组成部分进行详细的讲解。

    4.1 HTTP请求行

    • HTTP请求行位于请求消息的第一行,它包括三个部分,分别是请求方式、资源路名以及所使用的HTTP版本,具体示例如下:
    GET /index.html HTTP/1.1
    
    • 上面的示例就是一个HTTP请求行,其中,GET是请求方式, index.html是请求源路径,HTTP/1.1是通信使用的协议版本。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行结束。
    • 关于请求资源和协议版本,读者都比较容易理解,而 HTTP请求方式对读者来说比较陌生,接下来就针对HTTP的请求方式进行具体分析。
    • 在 HTTP的请求消息中,请求方式有GET,POST、 HEAD、OPTIONS、 DELETE,TRACE、PUT和 CONNECT共8种,每种方式都指明了操作服务器中指定URI资源的方式,它们表示的含义如表3-1所示。
      在这里插入图片描述
    • 表3-1中列举了HTTP的8种请求方式,其中最常用的就是GETPOST 方式,接下来,针对这两种请求方式进行详细讲解,具体如下所示。

    1. GET 请求方式

    • 当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上的一个超链接时,浏览器将使用GET 方式发送请求。如果将网页上的form表单的method属性设置为“GET”或者不设置method属性(默认值是GET),当用户提交表单时,浏览器也将使用GET方式发送请求。
    • 如果浏览器请求的URL中有参数部分,在浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后面。先来看一个URL地址,具体如下,
    http://wwrw.xdr630.com/javaForm?username=xdr630&password=123456
    
    • 在上述URL中,“?”后面的内容为参数信息。参数是由参数名参数值组成的,并且中间使用等号(=)进行连接。需要注意的是,如果URL地址中有多个参数,参数之间需要用“&”分隔。
    • 当浏览器向服务器发送请求消息时,上述 URL中的参数部分会附加在要访问的URI咨源后面.具体加下所示,
    GET /javaForm?username=xdr630&password=123456 HTTP/1.1
    
    • 需要注意的是,使用GET方式传送的数据量有限,最多不能超过1KB.

    2. POST 请求方式

    • 如果网页上form表单的method 属性设置为“POST”,当用户提交表单时,浏览器将使用POST方式提交表单内容,并把各个表单元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI地址的参数传递。另外,在使用POST方式向服务器传递数据时, Content-Type消息头会自动设为“application/x-www-form-urlencoded”,Content-Length消息头会自动设置为实体内容的长度,具体示例如下:
    POST /javaForm HTTP/1.1
    Host: www.xdr630.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 17
    
    username=xdr630&password=123456
    
    • 对于使用POST方式传递的请求信息,服务器端程序会采用与获取URI后面参数相同的方式来获取表单各个字段的数据。
    • 需要注意的是,在实际开发中,通常都会使用POST方式发送请求,其原因主要有两个,具体如下。
    1. POST 传输数据大小无限制
      由于GET请求方式是通过请求参数传递数据的,因此最多可传递1KB的数据。而POST请求方式是通过实体内容传递数据的,因此可以传递数据的大小没有限制
    2. POSTGET请求方式更安全
      由于 GET请求方式的参数信息都会在URL地址栏明文显示,而POST请求方式传递的参数隐藏在实体内容中,用户是看不到的,因此,POSTGET 请求方式更安全。

    5. 测试GET请求方式

    (1) 创建一个HTML文件,GET.html,如下所示:

    GET.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="get">
        用户名:<input type="text" name="username" style="width: 150px"><br>
        密码: <input type="text" name="password" style="width: 150px"><br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    

    在这里插入图片描述

    • 提交后:这时地址栏中的URL地址发生了变化,在原有的URL地址后面附加上了参数信息
      在这里插入图片描述

    • 查看显示的请求头信息,发现在请求行的URL请求资源后附加了参数信息,如图
      在这里插入图片描述

    • 而在Query String Parameters
      在这里插入图片描述
      在这里插入图片描述

    6. 测试POST请求方式

    POST.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post">
        用户名:<input type="text" name="username" style="width: 150px"><br>
        密码: <input type="text" name="password" style="width: 150px"><br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    

    在这里插入图片描述

    • 提交后,URL地址栏没有变化。F12查看发现请求的参数被加密了

    在这里插入图片描述

    • F12查看,发现在请求消息中多了两个请求消息头
      在这里插入图片描述
    • 新添加的两个消息头中,Content-Type表示实体内容的数据格式,Content-Length表示实体的内容长度。
    • F12 中看到 Form Data 就是提交的表单信息,也就是HTTP请求消息的实体内容,也就是说,在POST请求方式中,表单的内容将作为实体内容提交给服务器。
      在这里插入图片描述
      在这里插入图片描述

    7. HTTP请求消息头

    • 在HTTP请求消息中,请求行之后,便是若干请求消息头。请求消息头主要用于向服务器端传递附加消息,例如,客户端可以接收的数据类型、压缩方法、语言以及发送请求的超链接所属页面的URL地址等信息,具体示例如下:
      在这里插入图片描述
    • 从上面的请求消息头中可以看出,每个请求消息头都是由一个头字段名称和一个值构成,头字段名称和值之间用冒号(:)和空格()分隔,每个请求消息头之后使用一个回车换行符标志结束。需要注意的是,头字段名称不区分大小写,但习惯上将单词的第一个字母大写
    • 当浏览器发送请求给服务器时,根据功能需求的不同,发送的请求消息头也不相同,接下来,针对一些常用的请求头字段进行详细讲解。

    1. Accept

    • Accept头字段用于指出客户端程序(通常是浏览器)能够处理的 MIME(Multi-purpose Internet Mail Extensions,多用途互联网邮件扩展)类型。例如如果浏览器和服
      务器同时支持 png类型的图片,则浏览器可以发送包含 image/png的Accept头字段,服务器检查到Accept头中包含image/png这种 MIME类型,可能在网页中的img元素中使用png类型的文件。MIME类型有很多种,例如,下面的这些 MIME类型都可以作为Accept头字段的值。
      在这里插入图片描述

    2. Accept-Charset

    • Accept-Charset 头字段用于告知服务器端客户端所使用的字符集,具体示例如下:
    Accept-Charset: ISO-8859-1
    
    • 在上面的请求头中,指出客户端服务器使用ISO-8859-1字符集。如果想指定多种字符集,则可以在 Accept-Charset头字段中将指定的多个字符集以逗号分隔,具体示例如下:
    Accept-Charset: ISO-8859-1,unicode-1-1
    
    • 需要注意的是,如果Accept-Charset头字段没有在请求头中出现,则说明客户端能接受使用任何字符集的数据。
    • 如果Accept-Charset头出现在请求消息里,但是服务器不能发送采用客户端期望字符集编码的文档,那么服务器将发送一个406错误状态响应,406是一个响应状态码,表示服务器返回内容使用的字符集与Accept-Charset头字段指定的值不兼容,关于状态码的相关知识,将在后面的章节进行详细讲解。

    3. Accept-Encoding

    • Accept-Encoding头字段用于指定客户端能够进行解码的数据编码方式,这里的编码方式通常指的是某种压缩方式。在 Accept-Encoding头字段中,可以指定多个数据编码方式,它们之间以逗号分隔,具体示例如下:
    Accept-Encoding: gzip,compress
    
    • 在上面的头字段中,gzipcompress这两种格式是最常见的数据编码方式。在传输较大的实体内容之前,对其进行压缩编码,可以节省网络带宽和传输时间。服务器接收到这个请求头,它使用其中指定的一种格式对原始文档内容进行压缩编码,然后再将其作为响应消息的实体内容发送给客户端,并且在 Content-Encoding响应头中指出实体内容所使用的压缩编码格式。浏览器在接收到这样的实体内容之后,需要对其进行反向解压缩。
    • 需要注意的是,Accept-EncodingAccept消息头不同,Accept请求头指定的MIME类型是指解压后的实体内容类型,Accept-Encoding消息头指定的是实体内容压缩的方式。

    4. Accept-Language

    • Accept-Language头字段用于指定客户端期望服务器返回哪个国家语言的文档,它的值可以指定多个国家的语言,语言之间用逗号分隔,具体示例如下:
    Accept-Language: zh-CN,en-us
    
    • 在上述示例中, zh-cn代表中文(中国),en-us代表英语(美国),这些值不需要记忆。
    • 需要注意的是,浏览器会根据“语言首选项”对话框中语言列表的先后顺序,生成相应的Accept-Language消息头。
    • 服务器只要检查Accept-Language请求头中的信息,按照其中设置的国家语言的先后顺序,首先选择返回位于前面的国家语言的网页文档,如果不能返回,则依次返回后面的国家语言的网页文档。

    5. Authorization(授权)与Proxy-Authorization

    • 当客户端访问受口令保护的网页时, Web服务器会发送401响应状态码和WWW-Authenticate响应头,要求客户端使用Authorization请求头来应答。根据 WWW-Authenticate响应头指定的认证方式不同,Authorization请求头中的内容格式也不一样。WWW-Authenticate响应头指定的认证方式有两种:BASICDIGEST。对于BASIC认证方式,客户端需要把用户名和密码用“:”分隔,然后经过 Base64编码之后传送给Web服务器。
    • 例如,将用户名为Ann、密码为666888的用户信息“Ann:666888”进行 Base64编码,形成的 Authorization请求头字段内容如下所示:
    Authorization: Basic Qw5uOjY2Njg4OA==
    
    • 然而,使用Base64编码的数据很容易被解码,这实际上相当于是一种未加密的明文传送方式,装备了网络监视工具的计算机截获到该信息后,很容易破解出用户名和密码。
    • 如果使用DIGEST认证方式,服务器首先向浏览器发送一些用于验证过程的信息及附加信息,浏览器将这些信息与用户名和密码以及某些其他信息进行混合后,再执行MD5加密算法,将得到的结果和附加信息一起以明文文本通过网络发送给服务器。服务器也使用与客户端一样的信息和附加信息,将它们和所保存的客户端密码执行散列算法,然后将计算结果和客户端的结果进行比较,只有这两个数字完全相同才允许访问。
    • Proxy-Authorization头字段的作用和用法与Authorization头字段基本相同,只不过Proxy-Authorization请求头是服务器端向代理服务器发送的验证信息。

    6. Host

    • Host头字段用于指定资源所在的主机名和端口号,格式与资源的完整URL中的主机名和端口号部分相同,具体示例如下所示:
    Host: www.xdr630.top
    
    • 在上述示例中,由于浏览器连接服务器时默认使用的端口号为80,所以“www.xdr630.top”后面的端口号信息“:80”可以省略。
    • 需要注意的是,在HTTP 1.1中,浏览器和其他客户端发送的每个请求包含Host请求头子段,以便访问Web站点时,会根据地址栏中的URL地端所要访问的虚拟Web站点。当浏览器访问Web站点时,会根据地址栏中的URL地址自动生成相应的Host请求头。

    7. If-Match

    • 浏览器和代理服务器都可以缓存服务器回送的网页文档。当用户再次访问已缓存的页面时,只有网页内容已被更新,服务器才需要把该页面的内容重新回送到客户端,否则会通知浏览器访问本地缓存的页面,以减少不必要的网络传输流量。当服务器为客户端传送网页文件的内容时,可以传输一些代表实体内容特征的头字段,这些头字段被称为实体标签。当客户机再次向服务器请求这个网页文件时,可以使用If-Match头字段附带以前缓存的实体标签内容,这个请求被视为一个条件请求,例如:
    If-Match: "repository"
    
    • 其中,"repository"是客户端上次访问Web服务器中的该页面时,服务器使用ETag实体标签传送的内容,具体示例如下所示:
    ETag: "repository"
    
    • 服务器收到客户端的请求后,会检索If-Match头中的实体标签内容,并与服务器端的代表当前网页内容特征的实体标签内容进行比较。如果两者相同,则表示网页内容没有更改,Web服务器不返回网页文档,让客户端仍然使用以前缓存的网页文档。否则,服务器返回新的网页文件和新的实体标签内容头字段。

    8. If-Modified-Since

    • If-Modified-Since请求头的作用和 If-Mach类似,只不过它的值为GMT格式的时间。If-Modified-Since请求头被视作一个请求条件,只有服务器中文档的修改时间比IF-Modified-Since请求头指定的时间新,服务器才会返回文档内容。否则,服务器将返回一个304(Not Modified)状态码来表示浏览器缓存的文档是最新的,而不向浏览器返回文档内容,这时,浏览器仍然使用以前缓存的文档。通过这种方式,可以在一定程度上减少浏览器与服务器之间的通信数据量,从而提高了通信效率。

    9. Range和If-Range

    • Range头字段用于指定服务器只需返回文档中的部分内容及内容范围,这对较大文档的断点续传非常有用。如果客户端在一次请求中只接收到服务器返回的部分内容就中断了,可以在第二次请求中,使用 Range头字段要求服务器只返回中断位置以后的内容。Range头有以下几种使用格式。
      (1)Range: bytes=1000-2000
      (2) Range: bytes=1000-
      (3) Range:bytes=-1000
    • 在上面列举的三种格式中,第一种格式请求服务器返回文档中的第1000~2000个字节之间的内容,包括第1000个和第2000个字节的内容。第二种格式请求服务器返回文档中的第1000个字节以后的所有内容。第三种格式请求服务器返回文档中的最后1000个字节的内容。
    • If-Range头字段只能伴随着Range头字段一起使用,其设置值可以是实体标签或GMT格式的时间。如果设置值为实体标签,且该标签内容与服务器端代表当前网页内容特征的实体标签内容相同,则服务器按Range头的要求返回网页中的部分内容,否则,服务器返回当前网页的所有内容。如果设置值为GMT格式的时间,并且自从这个时间以来,服务器上保存的该网页文件没有发生修改,服务器会按Range头的要求返回网页中的部分内容,否则,服务器返回当前网页的所有内容。

    10. Max-Forward

    • Max-Forward头字段指定当前请求可以途经的代理服务器数量,每经过一个代理服务器,此数值就减1。当Max-Forward请求头的值为0时,如果请求还没有到达最终的Web服务器,那么代理服务器将终止转发这个请求,由它来完成对客户机的最终响应。

    11. Referer

    • 浏览器向服务器发出的请求,可能是直接在浏览器中输入 URL地址而发出,也可能是单击一个网页上的超链接而发出。对于第一种直接在浏览器地址栏中输入 URL地址的情况,浏览器不会发送 Referer请求头,而对于第二种情况,浏览器会使用Referer头字段标识发出请求的超链接所在网页的URL。例如,本地Tomcat服务器的 chapter03项目中有一个 HTML文件 GET.html,GET.html中包含一个指向远程服务器的超链接,当单击这个超链接向服务器发送GET请求时,浏览器会在发送的请求消息中包含Referer头空段.如下所示.
    Referer: http://localhost:8080/Test01/GET.html
    
    • Referer头字段非常有用,常被网站管理人员用来追踪网站的访问者是如何导航进入网站的。同时,Referer头字段还可以用于网站的防盗链。有R提太机,版什么是盗链呢?假设一个网站的首页中想显示一些图片信息,而在该网站的服务器中并没有这些图片资源,它通过在 HTML 文件中使用img标记链接到其他网站的图片资源,将其展示给浏览者,这就是盗链。盗链的网站提高了自己网站的访问量,却加重了被链接网站服务器的负担,损害了其合法利益。所以,一个网站为了保护自己的资源,可以通过Referer头检测出从哪里链接到当前的网页或资源,一旦检测到不是通过本站的链接进行的访问,可以进行阻止访问或者跳转到指定的页面。

    12. User-Agent

    • User-Agent中文名为用户代理;简称UA,它用于指定浏览器或者其他客户端程序使用的操作系统及版本、浏览器及版本、浏览器渲染引擎、浏览器语言等,以便服务器针对不同类型的浏览器而返回不同的内容。例如,服务器可以通过检查User-Agent头,如果发现客户端是一个无线手持终端,就返回一个WML文档;如果客户端是一个普通的浏览器,则返回通常HTML文档。例如,IE浏览器生成的User-Agent请求信息如下:
    User-Agent: Mozilla/4.0(compatible;MSIE 8.0; Windows NT 5.1: Trident/4.0)
    
    • 在上面的请求头中,User-Agent头字段首先列出了Mozilla版本,然后列出了浏览器的版本(MSIE 8.0表示 Microsoft IE 8.0)、操作系统的版本(Windows NT 5.1表示Windows XP)以及浏览器的引擎名称(Trident/4.0)。

    8. HTTP 响应消息

    • 当服务器收到浏览器的请求后,会回送响应消息给客户端。一个完整的响应消息主要包括响应状态行、响应消息头和实体内容,其中,每个组成部分都代表了不同的含义,本节将围绕HTTP响应消息的每个组成部分进行详细的讲解。

    1. HTTP响应状态行

    • HTTP响应状态行位于响应消息的第一行,它包括三个部分,分别是 HTTP版本一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息,具体示例如下:
    HTTP/1.1 200 OK
    
    • 上面的示例就是一个 HTTP 响应消息的状态行,其中 HTTP 1.1是通信使用的协议版本(200是状态码),OK是状态描述,说明客户端请求成功。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行结束。
    • 状态代码由三位数字组成,表示请求是否被理解或被满足。HTTP响应状态码的第一个数字定义了响应的类别,后面两位没有具体的分类,第一个数字有5种可能的取值,具体介绍如下所示。
    1. 1xx:表示请求已接收,需要继续处理。监哗斯分认工源店,价出战条细出网此额海
    2. 2xx:表示请求已成功被服务器接收、理解并接受。
    3. 3xx:为完成请求,客户端需进一步细化请求。
    4. 4xx:客户端的请求有错误。
    5. 5xx:服务器端出现错误。
    • 下面通过表3-2~表3-6对 HTTP 1.1协议版本下的5种类别的状态码、状态信息(每个状态码后面小括号中的内容就是状态信息)及其作用分别进行说明。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 表3-2~表3-6列举了HTTP的大多数状态码,这些状态码无须记忆。接下来列举几个Web开发中比较常见的状态码,具体如下。
      (1) 200:表示服务器成功处理了客户端的请求。
      (2) 302:表示请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求。例如,在请求重定向中,临时 URI应该是响应的Location头字段所指向的资源。
      (3) 404;表示服务器找不到请求的资源。例如,访问服务器不存在的网页经常返回此状态码。
      (4) 500:表示服务器发生错误,无法处理客户端的请求。

    2. HTTP 响应消息头

    • 在HTTP响应消息中,第一行为响应状态行,紧接着的是若干响应消息头,服务器端通过响应消息头向客户端传递附加信息,包括服务程序名、被请求资源需要的认证方式,客户端请求资源的最后修改时间、重定向地址等信息。HTTP响应消息头的具体示例如下所示:
      在这里插入图片描述
    • 从上面的响应消息头可以看出,它们的格式和 HTTP请求消息头的格式相同。当服务器向客户端回送响应消息时,根据情况的不同,发送的响应消息头也不相同。接下来,针对―些常用的响应消息头字段进行详细讲解。

    1. Accept-Range

    • Accept-Range头字段用于说明服务器是否接收客户端使用Range请求头字段请求资源。如果服务器想告诉客户机不要使用Range头字段,则使用下面的头信息
    Accept-Range: none
    
    • 如果服务器想告诉客户端可以使用以bytes为单位的Range请求,则应该使用下面的头信息:

    2. Age

    • Age头字段用于指出当前网页文档可以在客户端或代理服务器中缓存的有效时间,设置值为一个以秒为单位的时间数,具体示例如下所示:
    Age: 1234567
    
    • 客户端再次访问已缓存的某个网页文档内容时,先用当前的时间值减去服务器返回该网页时所设置的Date头字段值,如果结果值小于服务器上返回该网页时所设置的Age头字段的时间值,客户端直接使用缓存中的网页内容。否则,客户端将向服务器发出针对该页面的网页请求。

    3. Etag

    • Etag头字段用于向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签,每个版本的资源的实体标签是不同的,通过实体标签可以判断在不同时间获得的同一资源路径下的实体内容是否相同。例如,在一个文档最后添加一个回车换行,Etag头字段的值就能标识出不同。Etag头字段的格式如下所示:
    Etag: abc1234
    

    4. Location

    • Location头字段用于通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL地址,如下所示;
    Location: http://www.xdr630.top
    
    • Location头字段和大多数3xx状态码配合使用,以便通知客户端自动重新连接到新的地址请求文档。由于当前响应并没有直接返回内容给客户端,所以使用 Location头的HTTP消息不应该有实体内容,由此可见,在HTTP消息头中不能同时出现 LocationContent-Type这两个头空段

    5. Retry-After

    • Retry-After头字段可以与503状态码配合使用,告诉客户端在什么时间可以重新发送请求。也可以与任何一个3xx状态码配合使用,告诉客户端处理重定向的最小延时时间。Retry-After头字段的值可以是GMT格式的时间,也可是一个以秒为单位的时间数,具体示例如下:
    Retry-After: Sun, 21 Mar 2021 10:00:00
    GMTRetry-After: 120			//120秒
    

    6. Server

    • Server头字段用于指定服务器软件产品的名称,具体示例如下:
    Server: Apache- Coyote/1.1
    

    7. Vary

    • Vary用于指定影响了服务器所生成的响应内容的那些请求头字段名,具体示例如下:
    Vary: Accept-Language
    
    • 上面的响应头字段说明了服务器响应的内容受到了客户端发送的Accept-Language请求头的影响,服务器根据Accept-Language请求头的值,返回相应语言种类的网页内容。当客户端再次访问已经缓存的资源时,需要检查Vary头字段中指定的请求头字段,检查请求头字段的这次设置与上次的设置是否相同,以此作为是否使用缓存的条件。-例如,上次的请求中Accept-Language头字段的值为en-us,而这次的 Accept-Language头字段的值为zh-cn,即使客户端使用请求资源路径的本地缓存的其他条件都成立,但客户端也不能使用缓存,它仍需向服务器发出访问请求。

    8. WWW-Authenticate和Proxy-Authenticate

    • 当客户端访问受口令保护的网页文件时,服务器会在响应消息中回送401(Unauthrized)响应状态码和WWW-Authoricate响应头,指示客户端应该在Author-ization请求头中使用WWW-Authoricate响应头指定的认证方式提供用户名和密码信息。WWW-Authenticate响应头中可以指定两种认证方式:BASICDIGEST。如果要求客户端采用 BASIC方式传送认证信息,语法格式如下:
    WWW-Authenticate: BASIC realm= "xdr630"
    
    • 其中, realm属性用于指定当前资源所属的域,域定义了同一个主机内的一个受保护区间(一组需要保护的资源),它可以是任意字符串。同一台主机上可以有多个域,相同的域内所有的资源都共享相同的账户。如果某个账户具有访问某个资源的权限,那么该账户就能访问同一个域中的其他资源。根据HTTP验证的规范,与某一资源具有相同的目录路径或位于其目录路径的子目录中的资源,与该资源使用相同的域。
    • DIGEST认证方式细节比较复杂,想对其进行深入研究的读者可以参阅 RFC2617文档。
    • Proxy-Authenticate头字段是针对代理服务器的用户信息验证,其他的作用与用法与 WWW-Authenticate头字段类似。

    9. Refresh

    • Refresh头字段用于告诉浏览器自动刷新页面的时间,它的值是一个以秒为单位的时间数,具体示例如下所示:
    Refresh:3
    
    • 上面所示的Refresh头字段用于告诉浏览器在3秒后自动刷新此页面。
    • 需要注意的是,在 Refresh头字段的时间值后面还可以增加一个URL参数,时间值与URL之间用分号(﹔)分隔,用于告诉浏览器在指定的时间值后跳转到其他网页,例如告诉浏览器经过3秒跳转到www.xdr630.top网站,具体示例如下:
    Refresh:3; url=http://www.xdr630.top
    

    10. Content-Disposition

    • 如果服务器希望浏览器不是直接处理响应的实体内容,而是让用户选择将响应的实体内容保存到一个文件中,这需要使用Content-Disposition头字段。Content-Disposition头字段没有在 HTTP的标准规范中定义,它是从 RFC 2183中借鉴过来的。在RFC 2183中,Content-Disposition指定了接收程序处理数据内容的方式,有inline和attachment两种标准方式, inline表示直接处理,而attachment则要求用户干预并控制接收程序处理数据内容的方式。而在 HTTP应用中,只有attachment是 Content-Disposition的标准方式。attachment后面还可以指定filename参数。filename参数值是服务器建议浏览器保存实体内容的文件名称,浏览器应该忽略filename参数值中的目录部分,只取参数中的最后部分作为文件名。在设置Content-Disposition之前,一定要设置Content-Type头字段,具体示例如下.
    Content-Type: application/octet-stream
    Content- Disposition: attachment; filename=lee.zip
    

    3. HTTP其他头字段

    1. 通用头字段

    • 在 HTTP消息中,有些头字段既适用于请求消息也适用于响应消息,这样的字段被称为通用头字段。通用头字段有如下几种:Cache-Control、 Connection、Date, Pragma,Trailer、 Transfer-Encoding,Upgrade、 Via, Warning,关于这些通用头字段的相关讲解具体如下。

    1. Cache-Control

    • 如果Cache-Control用在请求消息中,它用于通知位于客户端和服务器端之间的理服务器如何使用已缓存的页面。在这种情况下,Cache-Control的值可以是:no-cache、no-store、max-age , max-stale、 min-fresh 、no-transform,only-if-cached等。
    • 如果Cache-Control用在响应消息中,它用于通知客户端和代理服务器如何缓存页面,在这种情况下,Cache-Control 的取值可以为public、 private , no-cache、no-store、no-transform,must-revalidate、proxy-revalidate 、 max-age,s-max-age等。
    • 在一个Cache-Control头字段中可以设置多个值,它们之间用过号分隔,具体示例如下:
    Cache-Control: no- stroe,no-cache,must-revalidage
    
    • 在上面的Cache-Control头字段中,设置的每个值都有特定的含义,接下来,通过表3-7对Cache-Control头字段的一些常用值进行介绍说明。
      在这里插入图片描述

    2. Connection

    • Connection头字段用于指定处理完本次请求/响应后,客户端和服务器端是否还要继续保持连接。Connection头字段可以指定两个值,如下所示:罐必监中来都鼓
    Connection: Keep-Alive
    Connection: close
    
    • 当Connection头字段的值为Keep-Alive时,客户端与服务器在完成本次交互后继续保持连接,当Connection头字段的值为close 时,客户端与服务器在完成本次交互后关闭连接。对于HTTP1.1版本来说,默认采用持久连接,也就是说默认情况下,Connection头字段的值为Keep- Alive.

    3. Data

    • Date头字段用于表示 HTTP消息产生的当前时间,它的值为GMT格式,具体示例如下:
    Mon, 22 Feb 2021 08:29:02 GMT
    
    • 一般情况下,服务器返回的所有响应中必须包括一个 Date头字段.除了下而这此情况。
    1. 响应状态代码表示服务器的错误,如500(内部服务器错误)或503(服务不可用),那么服务器就不可能产生一个有效的日期。
    2. 服务器没有时钟,不能提供当前时间,响应就不能设置Date头,这种情况下,服务器也不能设置如 Expire、Last-Modified等这样的头字段。

    4. Pragma

    • Pragma头字段主要在HTTP 1.0中通知代理服务器和客户端如何使用缓存页面,它的值只能固定设置为no-cache,如下所示:
    Pragma: no-cache
    
    • 当Pragma头字段用于响应消息时,指示客户端不要缓存文档;当用于请求消息时,指示代理服务器必须返回一个最新的文档,而不能返回缓存的文档。在HTTP 1.0中,一些浏览器对Pragma头字段的支持不是非常可靠,因此,人们常常通过设置Expires头字段的值为0来实现同样功能。
    • 而在 HTTP 1.1中,Cache-Control头字段也基本替代了Pragma头字段的使用。

    5. Transfer-Encoding

    • 对于HTTP 1.0协议,服务器端和客户端不是持久化连接,当服务器端关闭了TCP连接,客户端就知道响应的数据已经发送完毕。而对于HTTP 1.1来说,由于服务器端和客户端保持持久连接,服务器端必须在响应消息中通过Content-Length头字段通知客户端响应数据的长度,客户端才能知道数据何时传输完毕。然而,在服务器端,有些数据是动态生成的,服务器必须等到所有的内容都生成后才能准确地计算出响应数据的长度,也就是说只有当所有数据生成完毕后服务器端才能响应客户端的请求,这样势必会影响效率。为了解决这个问题,Transfer-Encoding头字段被引人,这个头字段指定响应消息的实体内容采用哪种传输编码方式,目前标准设置值只有chunked,具体示例如下:
    Transfer-Encoding: chunked
    
    • 当响应消息中设置了Transfer-Encoding头字段后,会把响应消息的整个实体内容分成一连串分段后再进行传输。每个分段的开始都是一个十六进制的数字,用来表示整个分段的大小。最后一个分段必须是0,用于表示整个 chunked编码数据的结束,如下所示:
    HTTP/1.1 200 OK
    Content-Type: text/htm1Transfer-Encoding: chunked
    
    7f
    <html>
    <head>
    <title>trailer Example</title>
    </head>
    <body>
    <p> Please wait while we complete your transaction ...</p>
    2c
    <p>Transaction complete!</p>
    </body>
    </html>
    0
    
    • 上面的响应消息中,7f和2c代表两个分段内容的大小标识信息,所以这种情况下不必用 Content-Length头字段来指定整个实体内容的大小。

    6. Trailer

    • 一些头字段可以放置在整个 HTTP消息的尾部,也就是可以在实体内容部分之后放置头字段信息。对于放置在尾部的头字段,需要在消息头中使用Trailer字段说明,具体示例如下,
    Trailer:Date
    
    • 需要注意的是,Trailer头字段必须在 chunked传输编码的方式下使用。

    7. Upgrade

    • Upgrade头字段用在客户端,用于指定客户端想要从当前协议切换的新的通信协议。如果服务器端认为切换的协议合适,会在响应消息中设置Upgrade头字段指定切换的协议,Upgrade响应头字段需要和101状态码配合使用,具体示例如下:
    //请求消息
    GET /HTTP/1.1  
    Host: 127.0.0.1
    Upgrade: TLS/1.0
    //响应消息
    HTTP/1.1 101 Switching Protocols
    Upgrade: TLS/1.0
    

    8. Via

    • Via头字段用于指定HTTP 消息所途经的代理服务器所使用的协议和主机名称,这个头字段由代理服务器产生,每个代理服务器必须把它的信息追加到Via字段的最后,以反映 HTTP消息途经的多个代理服务器的顺序,具体示例如下:
    Via: HTTP/1.1 Proxy1,HTTP/1.1 Proxy2
    
    • 如果代理服务器所使用的协议为HTTP,Via头字段中的协议名称可以省略,如下所示:
    Via: 1.1 Proxy1,1.1 Proxy2
    

    9. Warning

    • Warning头字段主要用于说明其他头字段和状态码不能说明的一些附加警告信息,例如提示代理服务器断开网络,如下所示:
    warning:112 Disconnected operation
    

    2. 实体头字段

    • 请求消息和响应消息中都可以传递实体信息,实体信息包括实体头字段和实体内容,实体头字段是实体内容的元信息,描述了实体内容的属性,例如实体内容的类型、长度、压缩方法、最后的修改时间、数据的有效期等。接下来,本节将针对实体头字段进行详细的讲解。

    1. Allow

    • Allow头字段指定了请求资源所支持的请求方式(如 GET,POST等),用于通知客户端应该严格按照指定的方式请求资源,如下所示:
    Al1ow: GET,HEAD,PUT
    
    • 需要注意的是,Allow头字段必须和405响应状态码一起使用。

    2. Content-Language

    • Content-Language用于指定返回网页文档的国家语言类型,其设置值是zh-cn,en-us,ja等国家语言的标准名称。由于同一个字符在不同的国家语言中的样式和意义上能有略微区别,如果一些客户端软件正好要对字符文本按不同的国家语言进行不同处理时, Content-Language头字段就比较重要了。Content-Language的具体示例如下所示:
    Content-Language: en-us
    

    3. Content-Length

    • Content-Length头字段用于表示实体内容的长度(字节数),首先来看一个带有Content-Length头字段的简单的响应消息,具体如下所示:
    HTTP/1.1 200 OK
    Date: Mon, 22 Feb 2021 09:29:57 GMT
    Content- Length:109
    
    
    <html>
    <head>
    <title> content-Length Example</title>
    </head>
    <body>
    Content-Length:109
    </body>
    </html>
    
    • 在上面的响应消息中,从<html>中的第一个字符“<”到</hml>中的最后一个字符“>”,内容的长度为109。
    • 在 HTTP 1.1中,浏览器与服务器之间保持持久连接,服务器允许客户端在一个TCP连接上发送多个请求,服务器必须在每个响应中发送一个 Content-Length响应头来标识各个实体内容的长度,以便客户端能分清每个响应内容的结束位置,而不会将上一个响应和下一个响应混淆。
    • 如果响应消息中包含 Transfer-Encoding响应头,也就是说响应内容以chunked编码方式返回,那么,Content-Length响应头就不应该设置了。

    4. Content-Location

    • Content-Location头字段用于指定响应消息中实体内容的实际位置路径(不能简单地认为响应消息中的实体内容所在的路径就是请求资源的路径),当一个请求资源路径对应有多种实体内容形式时,例如,同一请求资源可能有多个国家语言的版本,每个国家语言的版本都有自己的位置,在这种情况下,请求资源路径与响应的实体内容所在的路径可能是不同的,具体示例如下:
    //请求消息
    GET /docs/index.html HTTP/1.1
    Host: httpd.apache.org
    Accept- Language: en-us
    //响应消息
    HTTP/1.1 200 OK
    Date:  Mon, 22 Feb 2021 09:29:57 GMT	
    Server: Apache(UNIX)
    Content-Location: index_en_us.html
    Content-Type: text/html
    Content-Language: en-us
    
    • 在上面的示例中,请求消息中需要请求index. html文档,而且要求是英文文档,服务器中发现有可用的英文文档index_en_us.html,就会在响应消息中将Content-Location消息头的值设置为index_en_us. html文档的路径,并把该文档回送给客户端。
    • Content-Location的设置值可以是绝对路径,也可以是相对路径,如果是相对路径,则是相对请求资源路径而言的,对于上面的响应消息来说, index, html和 index_en_us.html在同一目录下。

    5. Content-Range

    • Content-Range头字段用于指定服务器返回的部分实体内容的位置信息。只有客户机使用了Range请求头要求服务器返回实体的部分内容时,服务器的响应头中才会包含Content-Range头,具体示例如下所示:
    HTTP/1.1 206 Partial content
    Date: wed,15 Nov 1995 06:25:24 GMT
    Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
    Content-Range: bytes 21010-47021/47022
    Content- Length:26012
    Content-Type: image/gif
    
    • 在Content-Range头字段中, bytes说明后面的数据以byte为单位,21010~47021说明返回的内容从第21010个字节开始到第47021个字节结束,47022说明整个实体内容的大小为47022个字节,从 Content-Length头字段可以看出返回的实体内容的长度为26012(47 021-21 010+1)个字节。

    6. Content-MD5

    • Content-MD5头字段用于提供对实体内容的完整性检查,它的值是对实体内容MD5 数字摘要后再进行 Base64编码的结果。
    • MD5 数字摘要算法是一种散列算法,能够通过对一段信息进行运算,产生一个16个字节的数字摘要。如果对输人信息做了任何形式的改变,对改变后的信息再次进行MD5运算所产生的数字摘要和改变之前的数字摘要都不相同。由于通过MD5算法计算的16个字节摘要信息可能无法转化成可打印的 ASCII字符显示,因此需要对这16个字节进行 Base64编码,将其转换为可打印的 ASCII字符。Content-MD5的头字段如下所示:
    Content-MD5: ZTFmZDA5MDYyYTMzZGQzMDMxMmixMjc4YThhNTMyM21=
    

    7. Content-Type

    • Content-Type用于指出实体内容的MIME类型。MIME(Multipurpose InternetMail Extensions,多用途互联网邮件扩展类型)是一个互联网标准,它设计之初是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。由于通过HTTP传输的数据也有各种类型,因此,HTTP 也采用了MIME来标识不同的数据类型。客户端通过检查响应头字段 Content-Type中的 MIME类型,就能知道接收到的实体内容代表哪种格式的数据类型,从而进行正确的处理。
    • 大多数服务器会在配置文件中设置文件扩展名与MIME类型的映射关系,从而可以根据请求资源的扩展名自动确定 Content-Type的 MIME类型。在Tomcat的 web.xml文件中有大量的元素,来实现文件扩展名和 MIME类型的映射,下面是web. xml文件的片段:
    ...
    <mime-mapping>
    	<extension>pdf</extension>
    	<mime-type>application/pdf</mime-type>
    </mime-mapping>
    ...
    
    • 其中<mime-mapping >元素的<extension>子元素用于指定文件的扩展名,<mime-type>子元素用于指定该文件扩展名映射的 MIME类型。
    • MIME类型包含主类型和子类型,两者之间用“/”分隔,上面的文件片段中的 MIM类型“application/pdf”, application为主类型,pdf为子类型。MIME类型也可以使用“*”号通配符,“*/ *”代表所有的MIME类型,"image/ *”代表所有image的子类型如果子类型以“x-”开头,则表示该类型目前还处于实验性的阶段。Content-Type头字段中的 MIME类型后面还可以指定响应内容所使用的字符码表,两者之间用分号(;)和空格隔开,如 Content-Type: text/html; charset=GB2312。如果Content-Type头字段中没有指定字符码表,默认使用的是ISO-8859-1字符码表。
    展开全文
  • 深入学习TCP/IP协议详解

    千次阅读 多人点赞 2021-05-08 17:29:09
    TCP/IP协议详解1.应用层(1)应用层知名协议(2)HTTP 协议详解①request 请求头(4部分)②response 响应头(4部分)③HTTP常见Header信息④Session 和 Cookie的区别是啥?⑤HTTP 和 HTTPS 区别是啥?(3) 重要...
  • TCP/IP详解三卷电子

    千次阅读 2020-10-23 11:26:16
    今天给大侠带来“TCP/IP详解三卷电子”,获取电子资料,请在“FPGA技术江湖”公众号内回复“TCP/IP详解三卷电子”,即可获取。 TCP/IP 详解 卷1 详解 TCP/IP详解卷2 实现 TCP/IP详解卷3TCP事务协议 ...
  • TCP/IP详解 卷一 第二版 TCPIP Illustrated, Volume 1, 2nd Edition
  • 《TCP/IP路由技术》由浅入深地详细阐述了各种常用的IP内部...TCP/IP路由技术(1卷)(2一部分 路由选择的基本知识 1章 TCP/IP回顾 1.1 TCP/IP协议层 1.2 IP包头 1.3 IPv4地址 1.4 地址解析协议(ARP) .

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

tcpip协议详解第二版pdf