【读书笔记】图解HTTP

Posted by wml on April 19, 2019

背景

最近在阅读学习《图解HTTP》这本书,仅以此做一些记录和个人理解。

TCP/IP协议族

互联网中相关联的协议总称TCP/IP协议族,层级分为: 应用层(如http,ftp,dns),传输层(如TCP,UDP),网络层(IP协议,数据包在网络上的流动),链路层(以太网,Wi-Fi等硬件部分)

各个协议之间的关系

HTTP协议,位于应用层,它是客户端与服务端之间请求和应答的一种方式和标准。
DNS服务,是用于域名到ip地址间的解析服务,也是位于应用层。
TCP协议,位于传输层,提供数据之间的可靠传输,将大块数据分割为报文段为单位的数据包进行管理。使用三次握手的策略用SYN和ACK标志确保数据的准确传输。若握手过程莫名中断,会以相同顺序重新发送相同数据包。
IP协议,位于网络层,通过ip地址和mac地址将数据传送给对方。

附图一张

1

HTTP方法

根据RESTful架构规范,HTTP方法(GET,POST,PUT,PATCH,DELETE)对应CRUD增删改查操作,PATCH通常指部分更新。关于RESTful规范参见理解RESTful架构

  • GET: 获取资源;
  • POST: 处理资源;
  • HEAD:获得报文首部,与get方法一样,只是不返回报文主体内容
  • PUT:传输文件;
  • DELETE:删除文件;
  • OPTION:查询支持方法;
  • TRACE:追踪路径
  • CONNECT:要求用隧道协议连接代理。要求在代理服务器通信时建立隧道,主要使用SSL,TLS加密后经网络隧道传输。
get和post区别:

get和post都是http请求的方法,都是基于tcp传输数据,只不过在语义上的定义有区别;

get方法是用来获取资源,请求访问已经被uri标识的资源,返回经由服务端解析后响应的内容。 post方法是根据请求主体对指定资源做出处理。post主要目的并不是获取指定资源的响应内容。

简单来说,这是http协议在定义这两个方法时语义上的区别。get的语义就是“获取资源”,而post的语义是“处理资源”。

在这种语义上,语法实现的区别就是网上说的那些:

  • GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
  • GET书签可收藏,POST为书签不可收藏。
  • GET能被缓存,POST不能缓存 。
  • GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
  • GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
  • GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
  • GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
  • 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
  • GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。