第四章
状态码告知从服务器端返回的请求结果
-
状态码列表
类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求 4XX Client Error(客户端错误状态码 服务器无法处理请求 5XX Server Error(服务器错误状态码) 服务器处理请求出错 -
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作
-
2XX成功
- 表示从客户端发来的请求在服务器端被正常处理了
- 在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变
- 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分GET请求
- 该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不包含实体的主体部分
-
3XX重定向
- 临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问
- 303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别
-
4XX客户端错误
- 该状态码表示请求报文中存在语法错误
- 该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息
- 若之前已进行过1次请求,则表示用户认证失败
- 该状态码表明对请求资源的访问被服务器拒绝了
- 未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能是发生403的原因
- 该状态码表明服务器上无法找到资源
-
5XX服务器错误
- 5XX的响应结果表明服务器本身发生错误
- 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter首部字段再返回给客户端
第五章
一台Web服务器可以搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升传输效率
用单台虚拟主机实现多个域名
- 客户端使用HTTP协议访问服务器时,会经常采用类似www.hackr.jp这样的主机名和域名
- 因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI
通信数据转发程序:代理、网关、隧道
- 代理
- 代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器
- 转发时,需要附加Via首部字段以标记出经过的主机信息
- 利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的
- 缓存代理
- 代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上
- 当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回
- 透明代理
- 转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。
- 网关
- 网关能使通信线路上的服务器提供非HTTP协议服务
- 利用网关能提高通信的安全性
- 网关是转发其他服务器通信数据的服务器,接收从其他客户端发送来的请求时,它就像自己拥有资源的服务器一样对请求进行处理
- 隧道
- 确保客户端能与服务器进行安全的通信
- 隧道本身不会去解析HTTP请求
保存资源的缓存
- 缓存是指代理服务器或客户端本地磁盘内保存的资源副本
- 利用缓存可减少对源服务器的访问,因而也就节省了通信流量和通信时间
- 即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性
- 缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中
- FTP(File Transfer Protocol)
- 传输文件时使用的协议
- NNTP(Network News Transfer Protocol)
- 用于NetNews电子会议室内传送信息的协议
- Archie
- 搜索anonymous FTP公开的文件信息的协议
- W AIS(Wide Area Information Servers)
- 以关键词检索多个数据库使用的协议
- Gopher
- 查找与互联网连接的计算机内信息的协议
第六章
HTTP报文首部
- HTTP请求报文
- 在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成
- HTTP响应报文
- 在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成
HTTP首部字段
-
通用首部字段
- 请求报文和响应报文双方都会使用的首部
-
请求首部字段
- 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
-
响应首部字段
- 由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息
-
实体首部字段
- 针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息
-
通用首部字段
-
首部字段名 说明 Cache-Control 控制缓存的行为 Connection 逐跳首部、连接的管理 Date 创建报文的日期时间 Pragma 报文指令 Trailer 报文末端的首部一览 Transfer-Encoding 指定报文主体的传输编码方式 Upgrade 升级为其他协议 Via 代理服务器的相关信息 Warning 错误通知
-
-
请求首部字段
-
首部字段名 说明 Accept 用户代理可处理的媒体类型 Accept-Charset 优先的字符集 Accept-Encoding 优先的内容编码 Accept-Language 优先的语言(自然语言) Authorization Web认证信息 Expect 期待服务器的特定行为 From 用户的电子邮箱地址 Host 请求资源所在服务器 If-Match 比较实体标记(ETag) If-Modified-Since 比较资源的更新时间 If-None-Match 比较实体标记(与If-Match相反) If-Range 资源未更新时发送实体Byte的范围请求 If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反) Max-Forwards 最大传输逐跳数 Proxy-Authorization 代理服务器要求客户端的认证信息 Range 实体的字节范围请求 Referer 对请求中URI的原始获取方 TE 传输编码的优先级 User-Agent HTTP客户端程序的信息
-
-
响应首部字段
-
首部字段名 说明 Accept-Ranges 是否接受字节范围请求 Age 推算资源创建经过时间 ETag 资源的匹配信息 Location 令客户端重定向至指定URI Proxy-Authenticate 代理服务器对客户端的认证信息 Retry-After 对再次发起请求的时机要求 Server HTTP服务器的安装信息 Vary 代理服务器缓存的管理信息 WWW-Authenticate 服务器对客户端的认证信息
-
-
实体首部字段
-
首部字段名 说明 Allow 资源可支持的HTTP方法 Content-Encoding 实体主体适用的编码方法 Content-Language 实体主体的自然语言 Content-Length 实体主体的大小(单位:字节) Content-Location 替代对应资源的URI Content-MD5 实体主体的报文摘要 Content-Range 实体主体的位置范围 Content-Type 实体主体的媒体类型 Expires 实体主体过期的日期时间 Last-Modified 资源的最后修改日期时间
-
-
非HTTP/1.1首部字段
- Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段
-
端到端首部(End-to-end Header)
-
逐跳首部(Hop-by-hop Header)
HTTP/1.1通用首部字段
- Cache-Control
- 操作缓存的工作机制
- Connection
- 控制不再转发给代理的首部字段
- 管理持久连接
- Date
- 首部字段Date表明创建HTTP报文的日期和时间
- Pragma
- 客户端会要求所有的中间服务器不返回缓存的资源
- Trailer
- 首部字段Trailer会事先说明在报文主体后记录了哪些首部字段
- Transfer-Encoding
- 规定了传输报文主体时采用的编码方式
- Upgrade
- 用于检测HTTP协议及其他协议是否可使用更高的版本进行通信
- Via
- 为了追踪客户端与服务器之间的请求和响应报文的传输路径
- 还可避免请求回环的发生
- Warning
- 告知用户一些与缓存相关的问题的警告
请求首部字段
- Accept
- 可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
- Accept-Charset
- 用来通知服务器用户代理支持的字符集及字符集的相对优先顺序
- 可一次性指定多种字符集
- Accept-Encoding
- 用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序
- Accept-Language
- 告知服务器用户代理能够处理的自然语言集(指中文或英文等)
- Authorization
- 用来告知服务器用户代理的认证信息(证书值)
- Expect
- 客户端使用首部字段Expect来告知服务器,期望出现的某种特定行为
- From
- 告知服务器使用用户代理的用户的电子邮件地址
- Host
- 首部字段Host会告知服务器请求的资源所处的互联网主机名和端口号
- If-Match
- 形如If-xxx这种样式的请求首部字段,都可以称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求
- If-Modified-Since
- 告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理该请求。而在指定If-Modified-Since字段值的日期时间之后,如果请求的资源都没有更新,则返回状态码304 Not Modified的响应
- If-None-Match
- 用于指定If-None-Match字段值的实体标记(ETag)值与请求资源的ETag不一致时,它就告知服务器处理该请求
- If-Range
- 告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理
- If-Unmodified-Since
- 指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求
- Max-Forwards
- 该字段以十进制整数形式指定可经过的服务器最大数目
- 服务器在往下一个服务器转发请求之前,Max-Forwards的值减1后重新赋值。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
- Proxy-Authorization
- 接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息
- Range
- 告知服务器资源的指定范围
- Referer
- 告知服务器请求的原始资源的URI
- TE
- 告知服务器客户端能够处理响应的传输编码方式及相对优先级
- User-Agent
- 将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
- Accept-Ranges
- 用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源
- Age
- 告知客户端,源服务器在多久前创建了响应
- ETag
- 告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值
- 当资源更新时,ETag值也需要更新
- Location
- Location可以将响应接收方引导至某个与请求URI位置不同的资源
- Proxy-Authenticate
- 把由代理服务器所要求的认证信息发送给客户端
- Retry-After
- 告知客户端应该在多久之后再次发送请求
- Server
- 告知客户端当前服务器上安装的HTTP服务器应用程序的信息
- Vary
- 可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令
- WWW-Authenticate
- 用于HTTP访问认证。它会告知客户端适用于访问请求URI所指定资源的认证方案(Basic或者是Digest)和带参数提示的质询(challenge)
实体首部字段
- Allow
- 用于通知客户端能够支持Request-URI指定资源的所有HTTP方法
- Content-Encoding
- 告知客户端服务器对实体的主体部分选用的内容编码方式
- Content-Language
- 告知客户端,实体主体使用的自然语言
- Content-Length
- 表明了实体主体部分的大小(单位是字节)
- Content-Location
- 表示的是报文主体返回资源对应的URI
- Content-MD5
- 是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
- Content-Range
- 告知客户端作为响应返回的实体的哪个部分符合范围请求
- Content-Type
- 说明了实体主体内对象的媒体类型
- Expires
- 会将资源失效的日期告知客户端
- Last-Modified
- 指明资源最终修改的时间
为Cookie服务的首部字段
-
Set-Cookie
-
属性 说明 NAME=VALUE 赋予Cookie的名称和其值(必需项) expires=DATE Cookie的有效期(若不明确指定则默认为浏览器关闭前为止) path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录) domain=域名 作为Cookie适用队形的域名(若不指定则默认创建Cookie的服务器的域名) Secure 仅在HTTPS安全通信时才会发送Cookie HttpOnly 加以限制,使Cookie不能被JavaScript脚本访问 -
HttpOnly属性
- 使JavaScript脚本无法获得Cookie。其主要目的为防止跨站脚本攻击(Cross-site scripting, XSS)对Cookie的信息窃取
-
-
Cookie
其他首部字段
- X-Frame-Options
- 属于HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签内显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击
- X-XSS-Protection
- 属于HTTP响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关
- DNT
- 意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法
- P3P
- 可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的