HTTP超文本传输协议目前最主流的一种应用层协议大多数基于TCP协议实现当我们浏览器中输入一个bing“网址”URL时浏览器就给必应的服务器发送了一个HTTP请求必应的服务器返回了一个HTTP响应。这个响应被浏览器解析之后就展示成我们看到的页面内容这个过程中浏览器可能会给服务器发送多个HTTP请求服务器对应返回多个响应这些响应里就包含了页面格式等信息协议格式抓包工具的使用左侧窗口显示了所有的HTTP请求/响应可以选中某个请求来查看详情右侧上方显示了HTTP请求的报文内容切换到Raw标签页可以看到详细信息右下侧显示了HTTP响应的报文内容切换到Raw标签页可以看到详细信息抓包工具的原理正向代理Fiddler相当于一个代理浏览器要访问www.baidu.com时就会把HTTP请求发给FiddlerFiddler再发给百度的服务器当百度服务器返回数据时Fiddler拿到返回数据再把数据交给浏览器反向代理Fiddler不直接访问百度服务器而是访问中间服务器通过百度服务器通过中间服务器与Fiddler进行请求和响应抓包结果请求首行请求方法URL版本号请求头Header请求的属性冒号分隔的键值对每组属性之间使用\n分隔。遇到空行表示Header部分结束Body空行后面的内容都是BodyBody允许为空字符串如果Body存在则在Header中会有一个Content-Length属性来标识Body的长度响应首行版本号状态码状态码解释Header响应的属性冒号分隔的键值对每组属性之间使用\n分隔。遇到空行表示Header部分结束Body空行后面的内容都是BodyBody允许为空字符串如果Body存在则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html界面那么html页面的内容就在body中HTTP请求URL协议方案名常见的有http和https也有其他类型比如访问mysql的jdbc:mysql。省略后默认http://登录信息用户名密码现在的网络一般不通过URL 进行验证一般都会省略服务器地址可以是域名也可以是IP域名会被DNS系统解析成一个具体的IP地址。在HTML中可以省略省略后表示服务器的域名与当前HTML所属的域名一致端口号一般省略浏览器会根据协议类型自动决定使用哪个端口号http默认80端口https默认443端口带层次的文件路径表示要访问主机上哪个资源(可以是一个硬盘上的文件也可以是虚拟的资源)每一层就相当于一个目录。可以省略省略后默认/.一些服务器发现是/.会自动访问/index.html查询字符串对要访问的资源补充说明也是键值对结构键值对之间使用分隔键和值之间使用分隔可以省略片段表示符区分当前这个页面的哪个部分用于页面内的跳转可以省略URL encode像/ ? :这样的字符已经被url当成特殊意义理解的因此这些字符不能随意出现。所以说出现这些字符就要进行转义汉字由UTF-8或者GBK这样的编码方式构成也需要进行转义防止浏览器把某个字节当作URL的特殊符号转义规则将需要转码的字符转为16进制然后从右到左取四位不足四位直接处理。每二位做一位前面加上%编码成%XY格式方法methodGET方法用于获取服务器上的某个资源在浏览器中直接输入url此时浏览器就会发送出一个GET请求。HTML中的link,img,script等标签也会触发GET请求POST方法用于提交用户输入的数据给服务器区别本质没有区别可以混用使用方法和习惯上有区别1.语义不同GET一般用于获取数据POST一般用于提交数据2.GET的body一般为空需要传输的数据通过query string传递POST的query string一般为空需要传递的数据通过body传递3.GET的请求一般为幂等POST一般是不幂等的多次请求得到的都是一样的结果则为幂等4.GET可以被缓存POST一般不能被缓存补充1.语义GET完全可以用于提交数据POST也可用于获取数据2. 幂等标准建议GET实现为幂等实际开发中不完全遵循这个原则个性化推荐其他方法PUT与POST相似只是具有幂等特性一般用于更新DELETE删除服务器指定的资源OPTIONS返回服务器所支持的请求方式HEAD类似于GET不返回响应体只返回响应头报头headerheader的整体的格式也是键值对结构每个键值对占一行键和值之间使用冒号分隔Host服务器地址和端口Content-Length表示body中数据的长度单位是字节Content-Type表示请求的body中的数据格式提示接收方如何解析body中的数据User-Agent(简称UA)表示浏览器/系统的属性Referer表示这个页面是从哪个页面跳转过来的Cookie存储一个字符串里面通过键值对的方式存储数据浏览器展示页面的过程中页面里虽然可以通过JS实现一些逻辑但是JS无法访问硬盘文件。cookie就是浏览器允许网页在本地硬盘存取数据的一种机制- 不是网页代码直接访问文件系统而是访问cookie来源服务器自行通过JS写入或者服务器在HTTP响应中通过Set - Cookie字段返回给浏览器HTTP响应状态码status code状态码表示访问一个页面的结果以下是常见结果200 OK常见状态码表示访问成功404 Not Found浏览器输入一个URL目的就是访问对方服务器上的一个资源如果这个URL标识的资源不存在就会出现404403 Forbidden表示访问被拒绝有的页面需要用户具有一定权限才能访问405 Method Not Allowed表示对方服务器不支持某种方法500 Internal Server Error服务器出现内部错误一般是服务器的代码执行过程中抛出异常但是没有catch到504 Gateway Timeout当服务器负载比较大的时候服务器单条请求的时候消耗的时间就会很长就会出现超时情况302 Move temporarily临时重定向重定向类似于呼叫转移功能打某个号码自动转到另一个号码总结HTTPSHTTPS也是一个应用层协议是在HTTP协议的基础上引入了一个加密层。HTTP协议的内容都是按照文本的方式明文传输的这就导致传输过程中出现一些篡改情况加密就是把明文进行一系列变换生成密文由于服务器是对多个客户端提供服务的所以每个客户端都需要一个单独的密钥对称加密加密和解密使用同一个对称密钥但是如果密钥明文传输就会被截获这就引入非对称加密运算速度快开销小非对称加密客户端使用公钥加密加密内容只有服务器中的私钥能够解密。运算速度慢开销大所以在应用中只会通过非对称加密传输客户端生成的对称密钥后期通过这个密钥进行对称加密传输公钥公开出的密钥密钥公司内部不公开的密钥中间人攻击客户端无法区分收到的公钥是服务器真实的公钥还是被黑客篡改的公钥引入证书引入证书的目的就是让服务器判断收到的公钥是服务器的公钥还是被串改过后的公钥服务器在使用HTTPS前需要向CA机构申请一份数字证书1. 服务器在搭建时向有关机构申请证书2.因为证书里包含公钥所以客户端先获取服务器的证书如果对比结果相同则证明信息没有被篡改后续传输对称密钥使用公钥进行加密中间人篡改证书如果黑客对证书进行了篡改1. 对公钥篡改计算的校验和与数字签名解密后的校验和不一致2. 对数字签名篡改黑客服务器没有认证机构的密钥无法打包数字签名中间人掉包证书黑客证书中的URL与客户端访问的URL不匹配