计算机网络第二章 -Web和HTTP -应用层
一、Web和HTTP之间的关系
Web在计算机中是一种应用程序。HTTP是Web这种应用在应用层的一种协议,该协议确定了信息在两台计算机间的规则。 在Web中遵循这个原则才可以与其他计算机间正常通信。
二、HTTP需要使用TCP作为他运输信息的道路(交通工具)
此时,我们可以想象Web客户端、HTTP报文(HTTP协议规定格式下的信息)、TCP、Web服务端的关系。
现在我将使用Web服务器响应Web客户端这个流程来做比喻。
Web服务器(淘宝店家)接到你的订单(HTTP报文),打包好你的物品(将响应页面或信息写入到HTTP报文)通过快递公司(TCP)送到你家(Web客户端)。
三、HTTP是无状态协议
何为无状态协议?无状态协议指的是不会保存关于客户的任何信息,所以每次通信服务器都是没有记忆的,就算他上一次通信的人是你也不会记得。
虽然HTTP是没有记忆的,但是我们经常听说要无痕上网,还有清除cookie等的,在下面我们会再进行说明。
四、HTTP的2种连接 -持续性连接和非持续性连接
4.1 非持续性连接
非持续性连接是指 每一次请求一个对象(每个对象有不同的URL)都得重新申请一条TCP(路) 。比如一个页面中有一个HTML的基本文件和10个JPG文件。(这里的11个对象都是拥有不同的URL)。所以我们可以从以上描述中得知在串行传输中这样子的网页需要的时间会更多,也使得Web服务器的访问次数成倍数增加。
== 往返时间== 指的是客户端请求到客户端接收到服务器的响应信息所花费的时间。
== 三次握手中的第三次有客户端发送的信息包含反馈的确认信息以及请求的文件信息==
4.2 持续性连接
与非持续性连接不同,持续性连接对每一个客户在 一定的时间 长度内只使用一条TCP(路) 超过一段时间未被使用,HTTP服务器就会关闭该连接。
五、HTTP报文格式
5.1 HTTP请求报文
HTTP请求报文一般是Web客户端向Web服务端发送的一种报文。
报文包含请求行 和头部行 。
-
请求行:他由三部分组成,第一部分为你想要做什么操作的方法字段,一般为GET(请求对象)、POST(隐性提交表单)、HEAD(对报文进行响应但不返回请求对象)、PUT(上传对象到指定的URL)、DELETE(删除对象)。第二部分是请求地址的相对地址(也就是网址后面的一场场类似文件索引的小屁股)。第三部分是当前使用的HTTP版本。
请求行格式例子:GET /tree/index.html HTTP/1.1
-
头部行:头部行一般是一些与传输属性的设置(一条请求可以有多行)。有Host(服务器域名)、Connection(设定持续性连接(open)或者非持续性连接(close))、User-agent(浏览器版本)、Accept-language(使用的语言)。
-
每一个属性名、方法、参数间都需要一个空格,在换行时需要一个回车和换行。
5.2 HTTP响应报文
- 状态行:格式如下:
HTTP/1.1 200 OK
第一个位置是啥我也不用说啦,第二个是状态码(那些个404(Not Found) 400 (Bad Request该请求无法被服务器理解) 505(HTTP Version Not Supported HTTP格式不对) 301(Move Permanently 该对象已经被移除了) 200(OK)就是在这里被返回的),可以看到状态码后面的每一个英语短句都是第三部分的返回。 - 首部行:首部行也有挺多的,所以我在这里写2个比较常见到的:Last-Modified(网页最后的修改日期,这个东西在后面的Web缓存中有用!),Content-Type(实体体中的对象的类型)
- 实体体:他是报文的主体。他包含了所请求的对象本身。
六、cookie -用户与服务器的交互
前面说过,HTTP是无状态协议,但是有些网站想要用户的信息提升用户的体验或者限制用户的权限。这个时候Web服务器就需要cookie了。
具体的操作就是在你第一次访问的时候给你一个用户标识码,并在以后通过这标识码来识别你这位用户,他并不知道你的其他信息,只是知道这位标识码用户在自己的网站中做了什么。
cookie在自己网站中可以说并没有大碍。主要是担心这些信息被人为贩卖。
七、Web缓存
Web缓存可以说是客户端和服务端之间的桥梁,通过Web缓存可以实现快速的对网页进行访问(前提是该网页在Web缓存中)。
Web缓存在其下方的客户端请求网页的时候,会将请求对象进行检查,查看在本地是否存储了该对象的副本,如果有就直接返回给客户端,没有就打开一个与该对象的初始服务器的TCP连接。返回给客户端并在自己的缓存中存储该对象的副本。
优点:1. 大大减少对服务器的访问量。2. 减少与上级网络的通信量,减少带宽费用。
八、条件GET方法
如果上一步中的Web缓存网页已经过时了(版本落后了),怎么办?
这个时候就有条件GET方法对Web服务器进行条件GET请求。如果一个网页存放过久,Web缓存就会使用:
GET XXX HTTP/1.1
Host: xxx
If-modified-since:日期格式
向初始服务器发送请求报文。当响应报文返回304状态码的时候,表示该对象还未过期。
注意: 服务器返回的304状态码中没有实体体,也就是没有返回对象!!