Week3 #4Web和HTTP
Web和HTTP
学习书目:《计算机网络 自顶向下方法》
本篇博客用于知识点整理,坚持记录学习第三周!
Web(万维网, World Wide Web): 运行在因特网上的一个应用程序,它有很多组成部分:文档格式的标准(HTML),Web浏览器,Web服务器,HTTP协议
HTTP(超文本传输协议,HyperText Thransfer Protocal): Web的应用层协议,由一个客户程序(浏览器)和一个服务器实现,HTTP定义了报文结构以及客户端和服务器交换报文的方式。
网址URL:网址一般由主机名和对象的路径名组成
E.g: http://www.webhttp.com/nihao/picture.gif
主机名:www.webhttp.com
路径名:/nihao/picture.gif
Web页面是由多个对象组成,一个对象可以是一个HTML文件,一个JPEG图形或一个视频片段等等。大多是Web页面包含一个HTML文件和几个引用文件(JPEG图形,视频片段…).
Web使用客户-服务器应用程序体系结构, Web服务器总是打开的,并且有一个固定IP
采用持续连接的HTTP:
所有的请求和响应使用相同的TCP,减少了时延,增快速度
采用非持续连接的HTTP:
每个请求和响应用不一样的TCP,比如说,对于相同的服务器,每发起一个请求,就产生一个新的TCP连接,得到响应后,立马关闭这个TCP连接,隔几秒,当再次对相同的服务器发起请求时,又重新发起一个TCP连接。
缺点:耗时长,增加时延,给Web服务器造成负担
请求报文:
HTTP请求报文
HTTP报文一般由三部分组成:请求行,首部行,报文体(可有可无)
请求行一般有三部分:方法字段,URL字段和HTTP版本字段
方法字段指的是请求的方法,有GET, POST, DELETE等等方法字段,严格区分大小写。大部分情况使用GET,即获取服务器上的信息,使用GET方法的时候,实体体为空。下图列举了不同方法的作用。
首部行是用来告知额外信息的,下图列举了以些请求头对应的作用。
图片来源于百度
下面展示一个请求报文的通用格式
一般情况下,如果使用GET方法,是没有实体体的,如果使用POST方法,一般用于上传表单,那么一般就有实体体,里面放表单的信息。
响应报文:
一个响应报文也基本分为三部分:状态行,首部行和实体体。状态行有三个字段,协议版本号(HTTP/1.1),状态码(200)和相应状态信息(OK)。
Connection: close表示发送完这个报文后立即断开TCP连接
Date表示发送这响应报文的时间,不是指创建这个对象或者是最后修改这个对象的时间
状态码200表示请求成功,消息已经发回给客户端。下图是一些状态码以及对应的说明
下图是一个响应报文的通用格式:
Cookie:
由于HTTP是无状态的(不在服务器保存关于客户端的任何状态信息),但是Web站点希望能够识别用户的信息,或者说是希望把内容与用户联系起来,因此,HTTP使用cookie,cookie允许站点对用户进行追踪。
cookie流程图
假设HTTP客户端第一次与这个Web站点通信,首先HTTP客户端发送一个请求报文至这个站点,站点生成一个唯一识别码:1978,数据库会以该识别码作为索引。在HTTP响应报文的首部行中会加上一行:
Set-cookie:1978
响应报文返回到浏览器后,浏览器会在它的特定cookie文件中添加一栏,当下次在访问这个站点时,浏览器会在cookie文件中抽出对于这个网站的识别码(即1978),然后在请求报文的首部行加上一行:
Cookie:1978
站点会根据该识别码识别该用户,跟踪该用户的活动记录。比方说,用户在第一次访问这个站点时输入了用户名,信用卡号,电子邮件等信息,那么这些信息就会存在这个站点的数据库里,下次这个用户再访问时,服务器就会根据用户提供的识别码(即1978)将用户与这些数据联系在一起,在后面的访问中,用户就不需要再次输入信用卡号,电子邮件等等这些信息。