HTTP协议
HTTP协议 - 状态响应码(续)
4**:请求包含错误语法或不能完成
– 400——错误请求,如语法错误
5**:服务器执行一个完全有效请求失 败
–
– – – – –
–
– – – – – – – – – – – – – – –
401——未授权(请求需要用户认证)
402——保留,有效ChargeTo 头响应 403——禁止访问 404——没有发现文件、查询或URl 405——方法不允许(Method Not Allowed) 406——根据用户发送的Accept 拖,请求资源不可访问 407——类似401,用户须先在代理服务器上得到授权 408——客户端没有在用户指定的时间内完成请求 409——对当前资源状态,请求不能完成 410——服务器上不再有此资源且无进一步的参考地址 411——服务器拒绝自定义的Content-Length 属性请求 412——一个或多个请求头字段在当前请求中错误 413——请求的资源大于服务器允许的大小 414——请求的资源URL 长于服务器允许的长度 415——请求资源不支持请求项目格式 416——请求中包含Range 请求头字段,在当前请求资 源范围内没有range 指示值,请求也不包含If-Range 请 求头字段 417——服务器不满足请求Expect 头字段指定的期望值
• HTTP规范:GET用于信息获取,而且应该是安全(非修改信息)的和幂等(对同一URL 的多个请求应该返回同样的结果)的;POST表示可能修改变服务器上的资源的请求。
• • • • GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数 之间以&相连;POST把提交的数据则放置在是HTTP包的包体中。 GET方式提交的数据最多只能是1024字节;理论上POST没有限制,可传较大量的数据 jsp中用request.getQueryString() 可获得GET后参数;request.getParameter()来获取 GET方法参数出现在浏览器地址栏中,POST方法的参数则不会
and consisting of either *TEXT or combinations of token, separators, and quoted-string>
HTTP协议 – 报文组成(续)
HTTP消息
– 消息体(Message Body)
HTTP协议 – 请求消息
– 请求消息格式
– 消息头(Message Headers):
message-header = field-name ":" [ field-value ] field-name = token field-value = *( field-content | LWS ) field-content = <the OCTETs making up the field-value
HTTP协议 - 头部信息(实体Header)
Allow :客户端指出对URI的资源允许的方法 Content-Encoding : 用作对media-type的修饰符,其值将必须应用到实体body上的额外内容编码。 主要用来允许压缩而不丢失下层媒体类型标识 Content-Language : 客户端指出自己所选的语言,指出目标观众对所封装实体的自然语言。这可能 与实体body内所有语言相同 Content-Length :指出实体body按十进制数的字节流的尺寸 Content-Location :如果实体能从独立于请求URI的位置访问,则服务器可以提供该实体自己的位置 Content-MD5 :是实体body的MD5摘要,以便提供端到端的完整性检查 Content-Range :与实体body的一部分一起发送,用来指定该部分body应用到全部body的哪个地方 Content-Type :指出发送给接收方的实体body的媒体类型,媒体类型参见IANA Expires :指出响应被认为过期的日期/时间 Last-Modified :指出原始服务器认为该变量最后修改的日期和时间,确实意思取决于原是服务器的 实现和资源的属性。对文件,可能只是文件系统内最后修改时间 extension-header :
HTTP协议 – 通讯过程
客户机与服务器建立连接。只要单击某个超级链 接,HTTP 的工作开始。 客户机发送一个请求给服务器,请求方式的格式 为:统一资源标识符(URL)、协议版本号,后 边是MIME 信息包括请求修饰符、客户机信息和 可能的内容。 服务器接到请求后,处理并返回响应信息,其格 式为一个状态行,包括信息的协议版本号、一个 成功或错误的代码,后边是MIME 信息包括服务 器信息、实体信息和可能的内容。 客户端接收服务器所返回的信息通过浏览器显示 在用户的显示屏上,然后客户机与服务器断开连 接。
Host : 客户端指出要请求的资源的因特网主机 和端口号 If-Match : 用于与方法一起使其条件化 If-Modified-Since : 用于方法使其条件化,如果 请求的变量在本域指定的时间从来不曾修改过 ,则实体将不会从服务器返回,改为304
Referer : 允许服务器为感兴趣的资源、日志、优化 缓存等生成向后链接清单
Proxy-Authenticate :该header必须作为407响应的一部分,指出认证方案和可应用到代理的URI上的参数 Retry-After :能与503响应一起用于指出希望该服务对客户端可以维持多久,
Server :指出服务器使用的软件信息
Vary : WWW-Authenticate :必须包括在401中,值至少有challenge组成,它指出认证方案和可应用到URI的参数
500 - 内部服务器错误
501 - 未实现(服务器不提供所需的功能) 502 - 网关错误,网关代理的服务器无有效响应 503 - 服务不可用(应用程序重新启动) 504 - 网关超时,网关代理的服务器响应超时 505 - HTTP版本不支持(应用程序无效)
PUT:创建或更新资源 DELETE:删除资源
•
• •
OPTIONS:由Request-URI标识的请求/响应链上有效通讯选项信息的请求
TRACE:用于调试服务端接到请求信息的内容. CO道 (e.g. SSL tunneling [44]).
– GET vs POST
请求行(Request-Line = Method SP Request-URI SP HTTP-Version CRLF)
通用信息头|请求头|实体头 CRLF(回车换行) 实体内容
– 请求消息示例
使用浏览器访问/的请求示例 使用telnet访问/的请求示例(telnet 80?为什么)
– 响应消息示例
HTTP协议 - 头部信息(请求Header)
Accept :客户端指出响应可以接受的媒体类型 Accept-Charset :客户端指出响应可以接受的 字符集 Accept-Encoding :客户端指出响应可以接受的 字符编码 Accept-Language :客户端指出允许的语言
HTTP协议 – 报文组成
HTTP消息
– 消息类型(Message Types):请求/响应。
generic-message = start-line *(message-header CRLF)
CRLF
[ message-body ] start-line = Request-Line | Status-Line
请求的关键信息:
GET / HTTP/1.1 Host: Connection: Keep-Alive (回车换行)
HTTP协议 – 请求方法(GET/POST/…)
– HTTP 的请求的几种方法:
•
• •
• •
GET:获取资源
HEAD:获取资源的HTTP头部信息,除不返回报文体外与GET方法相同 POST:创建资源
HTTP协议 - 状态响应码
1**:请求收到,继续处理
– 100——客户必须继续发出请求
3**:完成此请求必须进一步处理
– 300——请求的资源可在多处得到
–
101——客户要求服务器根据请求转换HTTP 协议版本
–
– – – – –
301——请求的资源永久重定向
302——在其他地址发现了请求数据 303——建议客户访问其他URL 或访问方式 304——客户端已经执行了GET,但文件未变化 305——请求的资源必须从服务器指定的地址得到 306——前一版本HTTP 中使用的代码,现行版本中不再 使用 307——请求的资源临时重定向
核心平台技术培训
HTTP & HTTPS
核心平台 2010年11月
HTTP协议
1 http协议概述 2 报文组成 3 HEAD/GET/POST/… 4 http重定向 5 Http会话保持机制
HTTP协议 – 概述
HTTP:超文本传输协议(HyperText Transfer Protocol)
Authorization :客户端在受到401后,需要向服务器标 明身份,包括此header即可
Expect : 客户端指出要求的特殊服务器行为。若服务器 无法满足,可以返回417 From :
If-None-Match : 用于与方法一起使其条件化 If-Range : 用于与方法一起使其条件化 If-Unmodified-Since : 用于与方法一起使其条件化 ,如果请求的资源自header值时间以来未改变,则 服务器执行该请求