万维网概述
万维网WWW(World Wide Web)是一个大规模的联机式的信息储藏场所。万维网以客户-服务器方式工作,浏览器就是在用户主机上的万维网客户程序,万维网文档所驻留的主机运行服务器程序。客户程序向服务器程序发出请求,服务器程序向客户返回客户所需要的万维网文档。
1.用什么样的协议来实现万维网上的各种访问
HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP是应用层协议,使用TCP连接进行可靠的传送。
URL统一资源定位符,URL用来表示从互联网上得到资源的位置和访问资源的方法,URL实际上是互联网上资源的地址,URL的一般形式由四部分组成:
<协议>://<域名>:<端口>/<路径>
协议:指HTTP协议,其次是ftp.
域名:指该主机在互联网的域名。
端口:默认为端口80,可以省略。
路径:表示该资源在互联网主机中的位置。
例如:http://www.tshua.edu.cn/publish/newh/index.html
协议:http
域名:www.tshua.edu.cn
端口号:80
路径:publish/newh/index.html
2.HTTP的操作过程
HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
从层次角度看,HTTP是面向事务的应用层协议,是万维网上能够可靠的交换文件的重要基础。
每个服务器进程,不断地监听TCP的80端口,以便发现是否有浏览器向他发出连接建立请求,一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向服务器发出请求某个页面,服务器返回所请求的页面作为响应,最后释放tcp连接,按照规定的格式和遵循的一定规则。这些格式和规则就是超文本传输协议HTTP。
HTTP使用的是面向连接的TCP作为运输层协议,保证了数据的可靠传输,HTTP协议本身是无连接的,虽然HTTP使用了TCP连接,但通信的双方减缓HTTP报文时不用建立HTTP连接。
HTTP协议是无状态的,即同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,因为服务器不记得该客户,也不记得为该客户服务了多少次。
4.从浏览器请求一个万维网文档到收到整个文档所需要的时间:
用户在点击鼠标链接某个互联网文档时,HTTP协议首先要与服务器建立TCP连接。这需要3次报文握手,当建立TCP连接的三报文握手的前2部分完成后(经过1个RT时间),万维网客户就把HTTP请求报文,作为TCP连接的三报文握手的第三个报文的数据,发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。
从图中可以看出,请求一个万维网文档所需要的时间是:该文档的传输时间+2倍的往返事件RTT(一个RTT用于TCP连接,一个RTT用于请求接收文档)。
5.HTTP的报文结构
一、HTTP有2类报文:
1.请求报文------从客户向服务器发送请求报文
2.响应报文------从服务器到客户的回答
HTTP是面向文本的,请求报文和响应报文都是由三部分组成。
1.开始行,用于区分是请求报文还是响应报文。请求报文的开始行叫做请求行(Request-Line),响应报文的开始行叫做状态行(Status-Line)。CR和LF分别表示回车与换行。
2.首部行,说明浏览器、服务器、报文主体的信息。
3.实体主体,在请求报文中一般不用这个字段,在响应报文中没有这个字段
请求报文的第一行请求行只有三个内容,即方法,请求资源的URL,及HTTP的版本。
方法
是对所请求对象的操作
方法 | 意义 | |
---|---|---|
GET | 请求读取由URL所标志的信息 | |
POST | 给服务器添加信息 | |
PUT | 在指明的URL下存储一个文档 | |
DELETE | 删除指明的URL所标志的资源 | |
CONNECT | 用于代理服务器 |
下面是HTTP的请求报文的开始行(即请求行)的格式。在GET后面有一个空格,接着是某个完整的URL,其后又有一个空格,最后是HTTP/1.1。
表示客户机向地址为http://www.xyz.edu.cn的服务器主机请求一个index.html文档。
GET http://www.xyz.edu.cn/dir/index.html HTTP/1.1
一个完整的HTTP请求报文
GET /dir/index/html HTTP/1.1 请求行使用了相对URL
Host:www.xyz.edu.cn 此行是首部行的开始,给出主机的域名
Connection:close 告诉服务器发送完请求的文档后就可以释放连接
User-Agent:Mozilla/5.0 表明用户代理是火狐浏览器Firefox
Accecpt-Language:cn 用户优先希望获得中文版本文档
第三行告诉服务器不使用持续连接,表示浏览器希望服务器在传送完所请求的对象后关闭tcp连接。
2.响应报文
每一个请求报文发出后,都能收到一个响应报文。
响应报文的第一行为状态行,状态行包括3个内容,即HTTP的版本,状态码,解释状态码的简单用语。
状态码为3位数字,分为5大类。
1xx 表示通知信息,如请求收到了或正在进行的处理
2xx 表示成功,如知道了或收到
3xx 表示重定向,如要完成请求必须采取进一步的行动
4xx 表示客户差错,有错误的语法或不能完成
5xx 表示服务器差错,如服务器失效,无法完成请求
HTTP/1.1 202 Accepted 接受
HTTP/1.1 400 Bad Request 错误的请求
HTTP/1.1 404 Not Found 找不到
6.Cookie:
HTTP是无状态的,服务器不会识别客户,我们可以使用Cookie来实现服务器识别客户这一功能。
当用户A浏览某个网站时,该网站的服务器就为A生成了一个唯一的识别码,并以此为索引在后端数据库中产生一个项目,接着在给A的响应报文中添加一个Set-Cookie的首部行。这里的“首部字段名”就是"Set-cookie",后面的值就是赋予该用户的“识别码”。例如首部行如下:
Set-Cookie:31d4d96e407aad42
当A收到这个响应之后,其浏览器就在特定的cookie文件中添加一行,其中包括这个服务器的主机名和Set-Cookie后面的识别码。
当A继续浏览这个网站时,每发送一个请求报文,浏览器就会从其Cookie文件中取出这个网站的识别码,放到HTTP请求报文的Cookie首部行中:
Cookie:31d4d96e407aad402
这样网站就可以识别追踪用户A了,服务器可以知道用户A什么时间访问了哪些数据,以及访问页面的顺序。
Cookie只是一个小小的文本文件,不是计算机可执行程序,因此不可能传播计算机病毒。