格式:html
http://host[:port][abs_path]浏览器
其中http表示要经过HTTP协议来定位网络资源。服务器
host表示合法的Internet主机域名或IP地址(以点分十进制格式表示);网络
port用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP链接。app
若是port是空,则使用缺省的端口80。当服务器的端口不是80的时候,须要显式指定端口号。dom
abs_path指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),若是URL中没有给出abs_path,那么当它做为请求URI时,必须以“/”的形式给出。一般这个工做浏览器就帮咱们完成了。jsp
浏览器与服务器链接的通常过程:工具
(以sohu网站为例):post
URI纯粹是一个符号结构,用于指定构成Web资源的字符串的各个不一样部分。测试
URL是一种特殊类型的URI,它包含了用于查找某个资源的足够的信息。
其余的URI,例如:mailto:zhanglong217@yahoo.com.cn,则不属于URL,由于它里面不存在根据该标识符来查找的任何数据。这种URI称为URN(通用资源名)。
客户端经过发送HTTP请求向服务器请求对资源的访问。
HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文。
请求行以一个方法符号开头,后面跟着请求URI和协议的版本,以CRLF做为结尾。
请求行以空格分隔。除了做为结尾的CRLF外,不容许出现单独的CR或LF字符,格式以下:
Method Request-URI HTTP-Version CRLF
Method表示请求的方法,Request-URI是一个统一资源标识符,标识了要请求的资源,HTTP-Version表示请求的HTTP协议版本,CRLF表示回车换行。
例如:
GET /test.html HTTP/1.1 (CRLF)
GET方法
GET方法用于获取由Request-URI所标识的资源的信息,常见形式是:
GET Request-URI HTTP/1.1
当咱们经过在浏览器的地址栏中直接输入网址的方式去访问网页的时候,浏览器采用的就是GET方法向服务器获取资源。
最多见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的连接或者经过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)表明URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind,这样经过GET方式传递的数据直接表示在地址中,因此咱们能够把请求结果以连接的形式发送给好友。以用google搜索domety为例,Request格式以下:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
能够看到,GET方式的请求通常不包含”请求内容”部分,请求数据以地址的形式表如今请求行。地址连接以下:
<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp
&q=domety&aq=f&oq=</a>
地址中”?”以后的部分就是经过GET发送的请求数据,咱们能够在地址栏中清楚的看到,各个数据之间用”&”符号隔开。显然,这种方式不适合传送私密数据。另外,因为不一样的浏览器对地址的字符限制也有所不一样,通常最多只能识别1024个字符,因此若是须要传送大量数据的时候,也不适合使用GET方式。
POST方法
POST方法用于想服务器发送请求,这点和GET方法没有区别。可是POST方法要求服务器接收附在请求后面的数据。
POST方法在表单提交的时候用的最多。
采用POST方法提交表单的例子
POST /login.jsp HTTP/1.1 (CRLF)
Accept: image/gif (CRLF) (…)
Host: www.sample.com (CRLF) (…)
…
Cache-Control: no-cache (CRLF)
(CRLF)
username=hello&password=123456
当咱们在HTML中提交表单时,浏览器会根据你的提交方法是get仍是post,采用相应的在HTTP协议中的GET或POST方法,向服务器发出请求。
注意,在HTML文档中,书写get和post,不区分大小写,但HTTP协议中的GET和POST只能是大写形式。
对于上面提到的不适合使用GET方式的状况,能够考虑使用POST方式,由于使用POST方法能够容许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,能够传输大量数据,这样POST方式对传送的数据大小没有限制,并且也不会显示在URL中。还以上面的搜索domety为例,若是使用POST方式的话,格式以下:
POST /search HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r hl=zh-CN&source=hp&q=domety
能够看到,POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。POST方式大多用于页面的表单中。由于POST也能完成GET的功能,所以多数人在设计表单的时候一概都使用POST方式,其实这是一个误区。GET方式也有本身的特色和优点,咱们应该根据不一样的状况来选择是使用GET仍是使用POST。
HEAD方法
HEAD方法与GET方法几乎是同样的,它们的区别在于HEAD方法只是请求消息报头,而不是完整的内容。
对于HEAD请求的回应部分来讲,它的HTTP头部中包含的信息与经过GET请求所获得的信息是相同的。
利用这个方法,没必要传输整个资源的内容,就能够获得Request-URI所标识的资源的信息。
这个方法一般用于测试超连接的有效性,是否能够访问,以及最近是否更新等。
在接收和解释请求消息后,服务器会返回一个HTTP响应消息。
与HTTP请求相似,HTTP响应也是由三个部分组成,分别是:状态行,消息报头,相应正文。
状态行由协议版本,数字形式的状态代码,相应的状态描述组成,各元素之间以空格分隔,除告终尾的CRLF(回车换行)序列外,不容许出现CR或LF字符。格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服务器HTTP协议的版本,Status-Code表示服务器发回的响应代码,Reason-Phrase表示状态代码的文本描述,CRLF表示回车换行。
例如:
HTTP/1.1 200 OK (CRLF)
状态代码由三位数字组成,表示请求是否被理解或被知足,状态描述给出了关于状态代码的简短文本描述。
状态代码的第一个数字定义了响应的类别,后面两个数字没有具体的分类。
1xx:指示信息——表示请求已经接受,继续处理 2xx:成功——表示请求已经被成功接收、理解、接受。 3xx:重定向——要完成请求必须进行更进一步的操做 4xx:客户端错误——请求有语法错误或请求没法实现 5xx:服务器端错误——服务器未能实现合法的请求。 常见状态代码、状态描述、说明: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 403 Forbidden //服务器收到请求,可是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
状态行由协议版本,数字形式的状态代码,相应的状态描述组成,各元素之间以空格分隔,除告终尾的CRLF(回车换行)序列外,不容许出现CR或LF字符。格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。
请求消息和响应消息都是由开始行,消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
对于请求消息,开始行就是请求行,对于相应消息,开始行就是状态行。
实验工具:Telnet
HTTP协议与TELNET协议都是基于TCP协议。
转载地址:http://www.cnblogs.com/mengdd/archive/2013/05/26/3099776.html