今天一整天断断续续读了前五章,由于有计算机网络的基础,读起来并不费劲,在此记录一下值得记录的笔记。
1,URL与URI:
以前总是搞不清楚。实际上URI——统一资源标识符,用来表示某一互联网资源;
URL——统一资源定位符表示资源的地点。比如URI是“手机”,URL就可以是位于x市x手机店的手机。
U——Uniform,R——Resource,I——Identifer,L——Locator.
可以说URL是URI的子集。。。
2,HTTP是无状态(stateless)的协议,不保存任何之前发生过的状态,无论是请求还是响应。实现了保存状态的功能是
cookie字段(基本设置方法:1-客户端发送请求到客户端,2-如果客户端需要让客户端保存登录状态,会在响应头部设置一个set-cookie字段,一般是一串字符,3-客户端收到以后会保存这个cookie在以后的请求中会携带cookie字段完成验证)
3,方法集合:
1-GET方法请求资源或一段CGI(common geteway interface 通用网关接口)程序,如果是资源那么会在body里携带资源文件返回给请求端,如果是请求CGI那么会传入参数将运行结果返回。
2-HEAD方法与GET唯一区别是仅返回头部信息。
3-POST方法一般用于表单,与GET区别是它是“提交”,并且参数是隐藏的,不是像GET一样暴露在url中。
4-PUT上传文件,在存在web验证程序以及REST(respresentational state transfer表征状态转移)标准存在时允许操作。
5-DELETE删除文件,规则同4。
6-OPTIONS,顾名思义,选项方法在返回的Allow字段中包含此uri允许的操作方法。
7-TRANCE,追踪轨迹。
8-建立隧道。(个人认为有点像编程语言中的管道概念。)
4,默认连接是持久连接,也就是存在了keep-alive字段,特点是未有一方提出断开,那么一直保持tcp连接。
因为一个页面也许会请求多次资源,每一次都建立一个连接那么三次握手四次挥手会消耗大量流量和时间。
5,管线化:不等待响应便发送下一个连接。(参考滑动窗口模式)
6,报文分请求报文和响应报文,空行是:CR+LF(可能是\n\r吧),报文和实体的区别:一般情况下是等价的,但是经过编码操作以后实体会发生变化。
7,内容编码包含:
gzip GUNzip
compress,unix标准压缩
deflate zlib
identity 不压缩
分块编码一般每一块都记录大小,最后一块是0。与tcp分块是很相似。
8,发送混合对象报文时会用boundary字符串分隔开,详情可见网络编程。
9,Range字段可以让url返回指定范围的字节。如果请求成功,返回206状态码以及内容,否则返回200和全部内容。
10,客户端与服务端有:服务器驱动协商,客户端驱动协商,透明协商。的方法决定适当的返回内容。实际上就是一个哪一方占主导权的问题。
11,常用状态码。
1xx:请求正在处理
200 ok:已经正常处理请求。
204 No Content:成功处理请求但这个响应不包含主体部分(比如if-modified-since条件下)
206 Partical Content:响应Range字段后正确返回指定的部分字节。
301 Moved Permanently:永久重定向。以后要使用新的url了。
302 Found:临时重定向,暂时要使用新的url。
303 See Other:应使用GET方法定向获取资源。
304 Not Modified:带有比如if-modified- since之类的请求时,告知缓存可用。
307 Temporary Redirect:与302 接近,但不会从post变成get
400 Bad Request:请求含语法错误。
401 Unauthorized:需要验证。
402 Forbidden:没有访问权限。
403 Not Found:这可以说是最常见的一个了。找不到资源。
500 Internal Server Error:服务器内部错误。
503 Service Unavailable:服务器正忙。
PS:状态码并不一定正确反应请求结果。
12:代理,网关,和隧道:
代理分缓存代理和透明代理:缓存代理会在一个时间内保存响应以在下一次迅速响应,透明代理不对报文做任何处理(仅仅转发)。
网关是更一般化的代理,可以代理访问数据库之类的操作以及非HTTP服务。
隧道可以与服务器建立一条通信线路,进行加密等手段。