HTTP简介
HTTP协议主要工作在客户端-服务端的架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即 WEB服务器发送请求,服务器根据接受到的请求,向客户端发送相应信息 超文本传输协议
超文本(Hyper Text)
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
URL
URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件名几部分构成。
例:http://www.aspxfans.com:8080/news/index.asp?boardID=5ID=24618page=1#name
一个完整的URL包括以下几个部分
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5ID=24618page=1”。参数可以允许有多个参数,参数与参数之间用“”作为分隔符。
超文本传输协议
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
HTTP工作原理
请求响应模型
在用户点击URL为http://www.sxtyu.com/index.html的链接后,浏览器和Web服务器执行以下动作:
1.浏览器分析超链接中的URL
2.浏览器向DNS请求解析www.sxtyu.com的IP地址
3.DNS将解析出的IP地址202.2.16.21返回浏览器
4.浏览器与服务器建立TCP连接(80端口)
5.浏览器请求文档:GET /index.html(发送HTTP请求)
6.服务器给出响应,将文档 index.html发送给浏览器
7.释放TCP连接
8.浏览器显示index.html中的内容
连接方式
1.非持久性连接
2.持久性连接
无状态性
> 是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知 道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。
HTTP报文结构
请求报文
即从客户端(浏览器)向Web服务器发送的请求报文。报文的所有字段都是ASCII码。
返回报文
即从Web服务器到客户机(浏览器)的应答。报文的所有字段都是ASCII码。
请求报头中的方法
方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:
常见的有
GET
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制,一般最多只能识别1024个字符,如果需要传送大量数据的时候,也不适合使用GET方式。
GET方式的请求一般不包含”请求内容”部分,请求数据以地址的形式表现在请求行
POST
POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。
HEAD
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
响应报文中的状态码
状态码(Status-Code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:
- 1xx:指示信息--表示请求已接收,继续处理。
- 2xx:成功--表示请求已被成功接收、理解、接受。
- 3xx:重定向--要完成请求必须进行更进一步的操作。
- 4xx:客户端错误--请求有语法错误或请求无法实现。
- 5xx:服务器端错误--服务器未能实现合法的请求。
常见状态代码、状态描述的说明如下
- 200 OK:客户端请求成功。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
首部字段方法
常见的请求头
报文结构实例
请求 www.beidu.com时的请求头文件
请求 www.beidu.com时的返回头文件。