一、URL格式

http:\\host[:port][abs_path][:parameters][?query]#fragment

例如:http://www.imailtone.com:80/WebApplication1/WebForm1.aspx?name=tom&;age=20#resume

http表示要通过HTTP协议来定位网络资源。

host表示合法的因特网主机域名或者IP地址。

port用于表示在传输层上交换信息的进程端口号,http协议默认端口号为80,当然采用不同的协议默认端口号不同。

abs_path指定请求资源的URI(统一资源定位符)。

parameters参数用于指定特殊参数的可选项。

?query可选,用于给动态网页(使用PHP/JSP等制作的网页)传递参数,可以有多个参数,用“&”符号隔开,每个参数的键值之间用‘=’隔开。

可以这样解析URL地址(Python)

import urlparse

lis = urlparse.urlparse(url)

url ='http://zh.wikipedia.org:80/wiki/Special:Search?search=铁路&Go=go'

URL格式解析_第1张图片

完全按照上面的格式解析了URL地址


http 是协议;

zh.wikipedia.org,是服务器;

80 是HTTP协议默认端口;

/wiki/Special:Search 服务器上存放该资源的目录路径

 query='search=\xcc\xfa\xc2\xb7&go=Go' 是动态网页的查询


二、服务器通过HTTP与浏览器的交互


(1)http请求


客户端通过发送http请求向服务器请求资源的访问

http请求由三部分组成,分别是:请求行、消息报头、请求正文。

请求行的格式如下:

MethodRequest-URIHTTP-VersionCRLF

第一个参数方法符号,详细方法下面将列出

第二个参数是请求URI(统一资源定位符)

第三个参数表示协议版本

第四个是换行符

这四部分均以空格间隔,除了结尾外,其他三部分不允许出现CR或者LF字符

例如 GET /tmp.html HTTP/1.1 (CRLF)


(2)http请求方法


URL格式解析_第2张图片

下面是一些例子:


GET方法: 当我们通过浏览器的地址栏输入网址的方式去访问网页的时候,浏览器就是采用GET方法向服务器获取资源。

   如:GET Request-URL HTTP/1.1 

POST方法:该方法用于向服务器发送请求,这种方法要求服务器接收附在请求后面的数据,多用于提交表单数据

如:POST /login.jsp HTTP/1.1 (CRLF)

注意,在HTML文档中,书写get和post,不区分大小写,但HTTP协议中的GET和POST只能是大写形式。

HEAD方法:HEAD方法与GET方法几乎是一样的,它们的区别在于HEAD方法只是请求消息报头,而不是完整的内容。

利用这个方法,不必传输整个资源的内容,就可以得到Request-URI所标识的资源的信息。

(3)HTTP响应


在接收和解释请求消息后,服务器会返回一个HTTP响应消息。

  与HTTP请求类似,HTTP响应也是由三个部分组成,分别是:状态行,消息报头,相应正文。

  状态行由协议版本,数字形式的状态代码,相应的状态描述组成,各元素之间以空格分隔,除了结尾的CRLF(回车换行)序列外,不允许出现CR或LF字符。格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF

  HTTP-Version表示服务器HTTP协议的版本,Status-Code表示服务器发回的响应代码,Reason-Phrase表示状态代码的文本描述,CRLF表示回车换行。

Status-Code(状态代码):由三位数字组成,表示请求是否被理解或者满足;

状态代码的第一个数字代表的响应的类别:

1xx:指示信息——表示请求已接收,继续处理

   2xx:成功——表示请求已经被成功接收,理解,接受

   3xx:重定向——要完成请求必须进行更进一步的操作

   4xx:客户端错误——请求有语法错误或请求无法实现

   5xx:服务器端错误——服务器未能实现合法的请求

Reason-Phrase(状态描述):关于状态代码的简短文本描述;

URL格式解析_第3张图片

  例如:

  HTTP/1.1 200 OK (CRLF)