第1章 了解Web及网络基础

  根据Web浏览器(Web客户端)地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面。

  CERN(欧洲核子研究组织)的蒂姆.伯纳斯-李(Tim Berners-Lee)博士提出了一种能让远隔两地的研究者们共享知识的设想。

  最初设想的基本理念:借助多文档之间相互关联形成的超文本(HyperText),连城可相互参阅的WWW(World Wide Web,万维网)。现在已经提出了3项WWW构建技术,分别是:

  •   把SGML作为页面的文本标记语言的HTML;
  •   作为文档传递协议的HTTP;
  •   指定文档所在地址的URL.

  当年HTTP协议的出现只要是为了解决文本传输的难题。由于协议本身非常简单,于是在此基础上设想了很多应用方法并投入了使用。现在HTTP协议已经超出了Web这个框架的局限,被运用到了各种场景里。

  通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。像这样把与互联网相关联的协议集合起来总称为TCP/IP。TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别为:应用层、传输层、网络层和数据链路层。

  •   应用层:决定了向用户提供应用服务时通信的活动。包括FTP服务、DNS服务、HTTP协议等。
  •   传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。包含TCP协议、UDP协议。
  •   网络层:用来处理在网络上流动的数据包。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
  •   链路层:用来处理网络的硬件部分。

  以HTTP协议举例TCP/IP通信传输过程:

  首先作为发送端的客户端在应用层(HTTP协议)发送一个想看某个Web页面的HTTP请求。接着,为了传输方便,在传输层(TCP协议)把从应用层处接收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。

  IP协议的作用是把各种数据包传送给对方。其中两个重要的条件是IP地址和MAC地址。

  TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方(三次握手)。

  DNS服务提供域名到IP地址间的解析服务。

  URI就是由某个协议方案表示的资源的定位标识符,用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。

第2章 简单的HTTP协议

  HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。但为了实现期望的保存状态功能,于是映入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。

  Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

  告知服务器意图的HTTP方法:

  GET:获取资源。用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。(我想访问你的某个资源)

  POST:传输实体主体。GET也可以传输实体的主体,但一般用POST方法传输,POST的主要目的并不是获取响应的主体内容。(我把这条信息告诉你)

  PUT:传输文件。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上场文件,存在安全性问题,因此一般的Web网站不适用该方法。若配合Web应用程序的验证机制,或架构设计采用REST标准的同类Web网站,就可能会开放使用PUT方法。(我要把这份文件传给你)

  HEAD:获取报文首部。与GET方法一样,只是不反悔报文主体部分。用于确认URI的有效性及资源跟新的日期时间等。(把那个相关信息告诉我)

  DELETE:删除文件。与PUT相反的方法。与PUT方法一样不带验证机制,一般网站不适用这个方法。(快把那份文件删掉)

  OPTIONS:查询支持的方法。(你支持哪些方法,我支持GET和HEAD方法)

  TRACE:追踪路径。让Web服务器端将之前的请求通信环回给客户端的方法。可以查询发送出去的请求是怎样被加工修改/篡改的。容易请发XST攻击,通常不会用到。(之后将会发生些什么)

  CONNECT:要求用隧道协议连接代理。要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。(让我通过以下吧)

第3章 HTTP报文内的HTTP信息

  请求报文结构如下:              响应报文结构如下:

                              

  发送邮件时,我们可以在邮件里写入文字并添加多份附件。这是因为采用了MIME机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。而在MIME扩展中会使用一种称为多部分对象集合的方法,来容纳不同类型的数据。相应地,HTTP协议中也采纳了多部分对象集合,发送一份报文主体内可含有多类型实体。通常是在图片和文本文件等上传时使用。多部分对象集合包含的对象如下:multipart/form-data、multipart/byterange。

第4章 返回结果的HTTP状态码

  状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

  状态码如200 OK,以3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。

  

第5章 与HTTP协作的Web服务器

  HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。

  在互联网上,域名通过DNS服务映射到IP地址(域名解析) 之后访问目标网站。可见,当请求发送到服务器时,已经是以IP地址形式访问了。

  HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、 网关和隧道。它们可以配合服务器工作。

  代理

  代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

  网关

  网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

  隧道

  隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

第6章 HTTP首部

  请求被发送至服务器时,请求中的主机名会用IP地址直接替换解决。但如果这时,相同的IP地址下部署运行着多个域名,那么服务器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部字段Host来明确指出请求的主机名。若服务器未设定主机名,那直接发送一个空值即可。

  Cookie的工作机制是用户识别及状态管理。Web网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内。接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie。调用Cookie时,由于可校验Cookie的有效期,以及发送方的域、路径、协议等信息,所以正规发布的Cookie内的数据不会因来自其他Web站点和攻击者的攻击而泄露。

第7章 确保Web安全的HTTPS

  HTTP+加密+认证+完整性保护=HTTPS

  所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。

【图解HTTP】笔记摘要的更多相关文章

  1. Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!

    Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...

  2. 图解 HTTP 笔记(七)——HTTPS

    本章主要讲解 HTTPS 的基本原理,以及如何利用 HTTPS 防范 HTTP 通信过程中存在的伪装.窃听.篡改等问题 一.HTTP 的缺点 HTTP 在通信过程中会面临以下三种安全问题: 通信使用明 ...

  3. 图解 HTTP 笔记(六)——HTTP 首部

    本章主要讲解了 HTTP 首部的结构,已经首部中各字段的用法. 一.HTTP 报文首部 上图是 HTTP 请求报文的结构. HTTP 请求报文由方法.URI.HTTP 版本.HTTP 首部字段等组成. ...

  4. <算法图解>读书笔记:第1章 算法简介

    阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...

  5. 「图解HTTP 笔记」Web 基础

    Web 基础 三项构建技术: HTML:页面的文本标记语言 HTTP:文档传输协议 URL:指定文档所在地址 一些概念 HTTP(HyperText Transfer Protocol):通常被译为& ...

  6. 《图解 HTTP》 摘要一

    学习过程对书本的内容的摘要以及总结,逐步完善,带有个人理解成分. Web 及网络基础 使用 HTTP 协议访问 Web 客户端:通过获取请求获取服务资源的 Web 浏览器等 HTTP 全称:Htype ...

  7. 【5】图解HTTP 笔记

    坚持.聪明.不畏困难,我将取得最后的胜利. 第一章 了解 Web 以网络基础 1. HTTP ( HyperText Transfer Protocol ): 超文本传输协议. 2. 通讯方式: 3. ...

  8. 【CSS Cookbook】笔记摘要(二)

     页面元素 使用text-align性质可以居中显示块级元素中的文字.把margin-left和margin-right设为auto时,该元素则会相对于父元素居中显示.但是现在流行的一些较低版本的浏览 ...

  9. 【CSS Cookbook】笔记摘要(一)

    概要 CSS的优点:将表现和内容相分离:更好地控制页面布局:大大减少了文件尺寸:缩短了改版时间:提高了易用性. CSS全称层叠式样表(Cascading Style Sheets). 1.问题:如何最 ...

随机推荐

  1. 老李分享:《Linux Shell脚本攻略》 要点(五)

    老李分享:<Linux Shell脚本攻略> 要点(五)   //1.打包.解包 [root@localhost program_test]# tar -cf output.tar 11. ...

  2. Hibernate基础学习(二)—Hibernate相关API介绍

    一.Hibernate的核心接口      所有的Hibernate应用中都会访问Hibernate的5个核心接口.      (1)Configuration接口: 配置Hibernate,启动Hi ...

  3. Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题

    前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...

  4. java 基础知识五 数组

    java  基础知识五  数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...

  5. java 基础知识四 流程控制

    java   基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...

  6. git教程(简单的带你学好git)

    刚开始使用的时候没有找到好的资源学习,下面这个资源不错,大家可以参考学习. http://www.liaoxuefeng.com/wiki/0013739516305929606dd183612485 ...

  7. webpack搭建服务器,随时修改刷新

    前提:1.对webpack有一定了解,本文不做介绍 2.安装node.js 手把手操作: 1.创建一个名为webpack-server的文件夹(随便取的) 2.cd到当前文件夹:cd webpack- ...

  8. Jax-ws 开发webService ,并使用spring注入service类

    由于使用myeclipse自动生成的Delegate,所以在使用service实现层的时候,默认创建的时候都是使用new的方法: 这样就导致每一次请求过来都得new一个新的:如果service有注入其 ...

  9. ue4竖排文本显示

    最近发现中国风游戏中,经常会遇到旁白文字竖着显示的需求. 于是我首先找了找控件蓝图中的text有没有相关类似横竖文本框的选项,然而并无所获. 突然间灵机一动! 竖着显示不就是每个字一换行嘛! 说干就干 ...

  10. PTA自测-3 数组元素循环右移问题

    自测-3 数组元素循环右移问题  一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M≥0)个位置,即将A中的数据由(A0A1···A​N-1​​)变换为 ...