HTTP权威指南学习笔记(1)-简介及HTTP

HTTPstatus状态码、web应用程序

Posted by zhidaliao on May 22, 2016

把HTTP权威指南重新温习了一遍,同时将一些关键的特性通过笔记的方式记录下来(因为这本书太多重复的东西和冗长的解释)。

简介

URL的组成分三
  • scheme:说明访问资源所使用的协议类型 ; http://
  • 服务器的因特网地址 ; www.baidu.com
  • web服务器上的某个资源 ; home/logo.jpg

URL的通用格式为:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<flag> 其中主要的是 scheme://<host>:<port>/<path>

部分服务器比如FTP需要额外的参数才能正常响应;比如

http://www.baidu.com/home;backgroup=false/index.html;graphics=true
HTTP
  • http事务:是由一条请求命令和一个相应结果组成的
  • HTTP是应用层协议,无须关心网络通信的具体细节。联网细节交给 TCP/IP因特网传输协议
  • HTTP(应用层)-> TCP(传输层) ->IP(网络层): 网络协议IP&地址 -> 在cs之间建立TCP连接 -> HTTP发送请求报文
web应用程序

包括 web客户端和web服务器;以及其他应用程序

  • 代理:位于客户端和服务端的HTTP中间实体 ; 接收客户端的请求,转发给服务器(代表用户访问服务器),代理可对请求和响应进行过滤
  • 缓存:HTTP仓库,将常用副本保存在离客户端更近的地方 ;
  • 网关:连接其他应用程序的特殊web服务器 ; 用于将HTTP流量转换成其他的协议
  • 隧道:对HTTP通信报文进行盲转发的特殊代理 ; 在两条连接之间对原始数据进行盲转发的HTTP应用程序
  • Agent代理:发起自动HTTP请求的半智能web客户端 ;代表用户发起HTTP请求的客户端,比如浏览器、爬虫机器人

HTTP报文

报文由 起始行-首部-主体 三部分组成,起始行和首部是通过 CRLF(一个回车符加一个换行符)来分隔的

  • 起始行:请求报文中说明要做什么 ; 响应报文说明出现的情况
  • 首部:Accept* ; Content-* 等元数据信息
  • 主体:响应报文才有

请求报文格式

<method> <request-url> <version>
<header>
<entity-body>

响应报文格式: reason-phrase是status的可读短语

<version> <status> <reason-phrase>
<header>
<entity-body>
常用的7种方法
GET    
PUT   包含主体
POST   包含主体
DELETE    
HEAD 只获取文档的首部  
TRACE 对可能经过代理服务器上的报文进行追踪,最后的服务器会返回一个Trace响应报文,告知客户端他收到的请求报文是怎样的  
OPTIONS 服务器告知客户端支持什么方法  

GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。

  • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
  • 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

使用Get代替Post的坑:

  • GET与POST都有自己的语义,不能随便混用。

  • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

  • 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

状态码常用
100~199 信息提示
200~299 成功
300~399 重定向:资源已被移走 以及在哪里可以找到,会包括Location:url首部
400~499 客户端错误
500~599 服务器错误

详细状态码:

Code 含义 备注
610 HTTP连接超时 监测点探测您的网站时出现连接超时现象,云监控发出Http请求后5秒内没有回包,会返回610状态码。建议您设置报警规则时增加重试次数、采用组合报警等,以便优化以及提高报警准确率
611 HTTP探测无法访问您的站点 请检测您的服务端是否限制了云监控的探测请求,如有开启防火墙,请添加最新的云监控IP地址
613 DNS无法解析 查询域名解析失败,建议联系您的域名解析服务商协助检查域名解析是否不稳定
615 返回的响应内容与用户设置的期望不符合 您在新建HTTP类型的站点监测时,如果使用了GET或POST请求方式,并在高级设置中填写了“匹配响应内容”,那么当匹配方式不符合您的设置时,就会返回615状态码
631 TCP 连接失败  
650 DNS探测连接超时  
681 FTP探测无法连接您的站点  
200 请求已完成 2XX状态码均为正常状态码返回
3XX   3XX状态码为重定向状态码
300 多种选择 服务器根据请求可执行多种操作。服务器可根据请求者 (User agent) 来选择一项操作,或提供操作列表供请求者选择
301 永久移动 请求的网页已被永久移动到新位置。服务器返回此响应(作为对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码通知 Googlebot 某个网页或网站已被永久移动到新位置
302 临时移动 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置
303 查看其他位置 当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。对于除 HEAD 请求之外的所有请求,服务器会自动转到其他位置
304 未修改 自从上次请求后,请求的网页未被修改过。服务器返回此响应时,不会返回网页内容
305 使用代理 请求者只能使用代理访问请求的网页。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理
307 临时重定向 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置
4XX   客户端类错误
400 错误请求 服务器不理解请求的语法
401 未授权 请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应
403 已禁止 服务器拒绝请求
404 未找到 服务器找不到请求的网页。例如,如果请求是针对服务器上不存在的网页进行的,那么,服务器通常会返回此代码
405 方法禁用 禁用请求中所指定的方法
406 不接受 无法使用请求的内容特性来响应请求的网页
407 需要代理授权 此状态代码与401(未授权)类似,但却指定了请求者应当使用代理进行授权。如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理
408 请求超时 服务器等候请求时超时
409 冲突 服务器在完成请求时发生冲突。服务器必须包含有关响应中所发生的冲突的信息。服务器在响应与前一个请求相冲突的PUT请求时可能会返回此代码,同时会提供两个请求的差异列表
410 已删除 如果请求的资源已被永久删除,那么,服务器会返回此响应。该代码与404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代
411 需要有效长度 服务器不会接受包含无效内容长度标头字段的请求。
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件。
413 请求实体过大 服务器无法处理请求,因为请求实体过大,已超出服务器的处理能力。
414 请求的URI过长 请求的URI(通常为网址)过长,服务器无法进行处理。
415 不支持的媒体类型 请求的格式不受请求页面的支持。
416 请求范围不符合要求 如果请求是针对网页的无效范围进行的,那么,服务器会返回此状态代码。
417 未满足期望值 服务器未满足”期望”请求标头字段的要求。
499 客户端断开连接 服务端处理时间过长,导致客户端关闭了连接造成的
5XX   服务器端发生错误
500 服务器内部错误 服务器遇到错误,无法完成请求。
501 尚未实施 服务器不具备完成请求的功能。例如,当服务器无法识别请求方法时,服务器可能会返回此代码。
502 错误网关 服务器作为网关或代理,从上游服务器收到了无效的响应。
503 服务不可用 目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。
504 网关超时 服务器作为网关或代理,未及时从上游服务器接收请求。
505 HTTP版本不受支持 服务器不支持请求中所使用的HTTP协议版本。
首部:主要由四种组成
  • 通用首部:类似Date、Connection等
  • 请求首部:请求报文特有,主要是客户端的一些要求。Accept、If-*、cookie、Authorization等
  • 响应首部:为客户端提供信息 Age、Server等
  • 实体首部:描述实体的元数据 Content-* / Location / Expires / Last-Modified