HTTP认识-HTTP学习
【HTTP 官方定义】
超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的 协议。
The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems.
HTTP协议是一种请求/响应协议。 与服务器建立连接后,客户端以请求方法,URI和协议版本号,然后紧接着跟随一个类MIME(MIME-like)消息,这个类MIME消息包括请求修饰 符,客户信息和可能的消息主体。服务器以一个状态行并跟随一个类MIME(MIME-like)消息响应,状态行包含消息的协议版本和成功出错的状态码, 类MIME消息包含服务器信息,实体元信息,和可能的实体。
The HTTP protocol is a request/response protocol. A client sends a request to the server in the form of a request method, URI, and protocol version, followed by a MIME-like message containing request modifiers, client information, and possible body content over a connection with a server. The server responds with a status line, including the message's protocol version and a success or error code, followed by a MIME-like message containing server information, entity metainformation, and possible entity-body content.
【个人的理解】
实际上就是网络消息传递的规则,信息交换的规则。还是参照实际例子学习比较直接,深入。用firebug查看一下,请求头和响应头如下:
橘黄色就是请求方法,协议版本号,状态码,红色标记的就是MIME消息,具体的每个字段的含义下次再介绍啦!
【HTTP URL 格式】
The "http" scheme is used to locate network resources via the HTTP protocol. This section defines the scheme-specific syntax and semantics for http URLs.
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
http 表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口 80;abs_path指定请求资源的URI;query就是请求参数。
eg:
http://www.onccc.com/search/product/%E9%A5%B0%E5%93%81_1.html?goodsTypeId=&productProperty=&displayMode=default&supplyType=0&markeyId=&probativeFlag=1&idInfoFlag=1&orderInformation=0
分解如下:
scheme =http
host =www.onccc.com
port =80
abs_path =search/product/%E9%A5%B0%E5%93%81_1.html
query =goodsTypeId=&productProperty=&displayMode=default&supplyType=0&markeyId=&probativeFlag=1&idInfoFlag=1&orderInformation=0
其中要注意的点:
-
url中的scheme和host大小写不区分;
-
abs_path中是以"/"做为分割符号,而且必须是ASCII,对于非ASCII,可对其encode编码,例如上面的“%E9%A5%B0%E5%93%81”就是“饰品”的utf-8转码,以十六进制显示
-
URL字符长度理论上是没限制,如果过长服务器会返回414状态码,URL长度主要影响浏览器和后台服务器,其中ie6最长2047,因此最好不要超过2047个字符
【URI URL URN区别】
A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URI that identify resources via a representation of their primary access mechanism (e.g., their network "location"), rather than identifying the resource by name or by some other attribute(s) of that resource. The term "Uniform Resource Name" (URN) refers to the subset of URI that are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable. 可以这样理解URI就是一个人的唯一标识,URL就是人的地址,URN是人的身份证 至于网上所说得URL和URI的区别,目前意义不大的。现在只需要知道一下几点就可了 1.URI的语法 [scheme:] scheme-specific-part eg:http://www.onccc.com/ 其中 scheme=http;scheme-specific-part=//www.onccc.com/ kefu@onccc.com 其中scheme=null,scheme-specific-part=kefu@onccc.com 2.URI又分不透明的(opaque)和分层(hierarchical)的两类。 不透明的URI指scheme-specific-part不是以‘/’开头的绝对的URI; eg:kefu@onccc.com 分层的URI是scheme-specific-part以‘/’开头的绝对的URI或相对的URL,eg:http://www.onccc.com/product/index.html, /product/index.html 分层的URI的scheme-specific-part符合[//authority] [path] [?query] [#fragment] eg:http://www.onccc.com/product/index.html?v=t authority又分基于服务器和授权机构,授权机构就不论述了,基于服务器以‘//’开头的,格式<userinfo>@<host>:<port> 其他的更详细的,可参看http://www.ietf.org/rfc/rfc2396.txt (3.2.2. Server-based Naming Authority) 3. URI的标准化normalize和分解resolution,实际意思就是把相对路径转换成绝对简单路径以及反转 假定目录product直接位于根目录之下,product有子目录list和detail,detail有文件title.html,list是当前目录。 为了显示title.html中的内容,你可能输入type \product\.\detail\title.html。这种不是最简单的。 实际上只要输入\product\detail\title.html,就是最简单标准的。反之就是反解。 4. 其他更多的请参看http://eastsun.iteye.com/blog/37013
【参考学习】
在线了解http协议 http://www.w3.org/Protocols/rfc2616/rfc2616-sec1.html#sec1.4
【后续】
主要是介绍常见的消息头含义以及web开发中常见的问题
推荐阅读