【计算机网络】2.2 Web和HTTP TCP三次握手详解及释放链接过程

第二章第二节 Web和HTTP

这一章中,咱们须要讨论5种重要的应用:Web、文件传输、电子邮件、目录服务、P2P;这一节中,咱们将讨论Web和它的应用层协议HTTP。css

Outline

Notes

##Web简介

  • Web即World Wild Web(万维网),由Tim Berners-Lee发明,是由网页构成,支持网页互相链接。
  • Web网页(Web Page)包含多个对象(Objects),如:HTML文件、JPEG图片、视频文件、动态脚本等,多数Web页面包含一个HTML基本文件,其中包含对其余对象引用的连接
  • 对象的寻址(adressing)是经过URL(Uniform Resoure Locator)统一资源定位器来进行。
  • 其格式为:Scheme://hostport/path 如:Http://www.somecompany.com/somePic/pic.png (Http 为协议名、www.somecompany.com为 hostname主机、somePic/pic.png为 pathname路径名

## HTTP概况

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
  • HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端
  • HTTP协议工做于客户端-服务端架构为上。浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
  • HTTP是一个基于TCP/IP通讯协议来传递数据(HTML 文件, 图片文件, 查询结果等),链接创建后,浏览器和服务器进程就能经过套接字接口访问TCP;
  • HTTP是一个属于应用层的面向对象的协议,因为其简捷、快速的方式,适用于分布式超媒体信息系统。
  • HTTP是一个无状态协议,服务器向客户发送被请求的文件,而不存储任何关于该用户的信息

  

【HTTP特色】html

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
  • 灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Conten-Type加以标记。
  • 非持续链接:无链接的含义是限制每次链接只处理一个请求、服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
  • 无状态:无状态是指对于事务处理没有记忆能力,服务器向客户发送被请求的文件,而不存储任何关于该用户的信息。缺乏状态意味着若后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时,它的应答就较快。

## 非持续链接与持续链接

【HTTP请求/响应的步骤】java

  HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行做为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。android

  • 客户进程链接到Web服务器:一个HTTP客户进程,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。
  • 发送HTTP请求报文:经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
  • 服务器接受请求并返回HTTP响应:Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
  • 释放TCP链接:若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求;
  • 客户端浏览器解析HTML内容:客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

 

  • 当客户机/服务器的交互运行于TCP协议上时,应用程序的每一个请求/响应对是经一个单独的TCP链接,则该应用程序使用非持久链接,而当应用程序的每一个请求/响应对是经相同的TCP链接发送,则该应用程序使用持久链接。
  • HTTP/1.0 使用非持久链接。     HTTP/1.1 默认使用持久链接

【非持续链接】web

  • 示例:在非持续链接中,若是打开一个HTML文件和10个内联图象对象的网页时,HTTP就要创建11次TCP链接才能把文件从服务机传送到客户机。
  • 再假设该节本HTML文件的URL为:www.yesky.com/sompath/index.html。
    • HTTP客户端与服务器主机www.yesky.com中的HTTP服务器创建一个TCP链接。
    • HTTP客户端发送HTTP请求消息。 包含/sompath/index.html。
    • HTTP服务器接收请求消息,从服务器主机内存或硬盘拿去除对象/sompath/index.html,发出该对象的响应消息。
    • HTTP服务器告知TCP关闭这个TCP链接(TCP要等客户收到这个响应消息后,才会真正终止这个链接)。
    • HTTP客户接收响应消息。TCP链接终止。 该消息标明所拆装的对象是一个HTML文件。客户取出文件,分析后发现10个JPEG对象的引用。
    • 给每个引用到的JPEG对象重复步骤1~4。 

 【非持续链接的串行TCP链接、并行TCP链接和响应时间】数据库

  • 十个JPEG对象,能够经过串行的TCP链接方式前后取到;咱们也能够经过并行的TCP同时取到对象,缩短响应时间
  • 客户端请求一个基本HTML文件,要耗时2个RTT(Round Trip Time)加上服务器服务器
    • RTT:一个短分组从客户端到服务端在返回客户所花费的时间
    • 创建浏览器和Web服务端的TCP链接,须要通过“三次握手”过程(关于三次握手请参考TCP三次握手详解及释放链接过程)
    • 第一次握手发起TCP链接,第三次握手请求文件

  • TCP的缺点
    • 每一个链接,TCP得在客户端和服务端分配TCP缓冲区,并维持TCP变量。 对于同时为来自数百个不一样客户的请求提供服务的web服务器来讲,这会严重增长其负担。
    • 每一个对象有2个RTT
    • 每一个对象都遭受TCP缓启动,由于每一个TCP链接都起始于缓启动阶段。

【持续链接】(关于持续链接、非持续链接请参考HTTP协议:持久链接、非持久链接后端

  • 持续链接:服务器在发送响应后,保持该TCP链接打开。在相同的客户机与服务器之间的后续请求和响应报文经过相同的链接进行传送。不须要再次创建tcp链接 
  • 不带流水线(without pipelining):客户只在收到前一个请求的响应后,才发出新的请求。
    • 与非持续链接的2个RTT延迟相比,不带流水线每一个引用到的对象各有1个RTT的延迟
  • 带流水线(with pipelining):HTTP客户每碰到一个引用就当即发送一个请求,即HTTP客户能够一个接 一个挨着发送各个引用对象的请求。服务器收到这些请求后,也能够一个接一个的发送各个对象的响应。
    • 带流水线的持久链接中服务器空等请求的时间较少,全部引用到的对象一共只经历1个RTT的延时。

 

## HTTP请求协议

HTTP协议包括:请求消息 与 响应消息浏览器

【请求信息】缓存

 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行请求数据4个部分组成,下图给出了请求报文的通常格式。服务器

         

  • HTTP请求报文的第一行叫作请求行(request line),请求行由 方法字段URL字段 和 HTTP协议版本字段 3个字段组成,它们用空格分隔。
    • HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
  • 后继的行叫作请求头部行:
    • 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
    • User-Agent:产生请求的浏览器类型。
    • Accept:客户端可识别的内容类型列表。
    • Host:请求的主机名,容许多个域名同处一个IP地址,即虚拟主机。
    • Connection:告诉服务器是否须要持续链接
  •  空行:最后一个请求头以后是一个空行,发送回车符和换行符,通知服务器如下再也不有请求头。
    • 回车符:cr;换行符:lf;空格:sp

【Get请求方法】

  最多见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的连接或者经过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)表明URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind,这样经过GET方式传递的数据直接表示在地址中,因此咱们能够把请求结果以连接的形式发送给好友。(转自:http://www.javashuo.com/article/p-kiyvktgz-da.html下例为请求打开本博客中莫伊照片的请求方法头:

GET /images/upup.gif HTTP/1.1 Host: static.cnblogs.com
Connection: keep-alive
If-Modified-Since: Sun, 17 Dec 2017 20:47:09 GMT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 Accept: image/webp,image/apng,image/*,*/*;q=0.8 Referer: https://www.cnblogs.com/bundles/blog-common.css?v=PX31qVjOE47mNaZI9JUSFK-ajuzMnpXA9PeteRNR1Qw1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
  • 地址中”?”以后的部分就是经过GET发送的请求数据,咱们能够在地址栏中清楚的看到,各个数据之间用”&”符号隔开。显然,这种方式不适合传送私密数据。另外,因为不一样的浏览器对地址的字符限制也有所不一样,通常最多只能识别1024个字符,因此若是须要传送大量数据的时候,也不适合使用GET方式。
  • HTTP默认的请求方法就是GET
    •  没有请求体
    •  数据量有限制!
    •  GET请求数据会暴露在浏览器的地址栏中
  • GET请求经常使用的操做:
    •  在浏览器的地址栏中直接给出URL,那么就必定是GET请求
    •  点击页面上的超连接也必定是GET请求
    •  提交表单时,表单默认使用GET请求,但能够设置为POST
  • 请求头:  
一、Host:请求的web服务器域名地址
二、User-Agent:HTTP客户端运行的浏览器类型的详细信息。经过该头部信息,web服务器能够判断出http请求的客户端的浏览器的类型。
三、Accept:指定客户端可以接收的内容类型,内容类型的前后次序表示客户都接收的前后次序
四、Accept-Lanuage:指定HTTP客户端浏览器用来展现返回信息优先选择的语言
五、Accept-Encoding:指定客户端浏览器能够支持的web服务器返回内容压缩编码类型。表示容许服务器在将输出内容发送到客户端之前进行压缩,以节约带宽。
而这里设置的就是客户端浏览器所可以支持的返回压缩格式。
六、Accept-Charset:HTTP客户端浏览器能够接受的字符编码集
七、If-modified-since:记录网页最后更新的时间,以容许缓存器证实它的对象是否是最新的 七、Content-Type: 显示此HTTP请求提交的内容类型。通常只有post提交时才须要设置该属性 有关Content-Type属性值有以下两种编码类型: (1)“application/x-www-form-urlencoded”: 表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”。 然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。 (2)“multipart/form-data”: 在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既能够发送文本数据,也支持二进制数据上载。 当提交为表单数据时,可使用“application/x-www-form-urlencoded”;当提交的是文件时,就须要使用“multipart/form-data”编码类型。

【Post请求方法】

使用POST方法能够容许客户端给服务器提供信息较多。POST方法将 请求参数封装在HTTP请求数据中,以名称/值的形式出现,能够传输大量数据,这样POST方式对传送的数据大小没有限制,并且也不会显示在URL中。下例为登录邮箱时请求方法头:

POST /contacts/call.do?uid=hithongming@163.com HTTP/1.1
Host: mail.163.com
Connection: keep-alive
Content-Length: 36
Origin: https://mail.163.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Content-type: application/x-www-form-urlencoded
Accept: */*
Referer: https://mail.163.com/js6/main.jsp?sid=rAraHhmcZFpASRsJRyccJovqsYPSLZYL&df=mail163_letter
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7

【响应格式】

  通常状况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

  HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

  

HTTP/1.1 200 OK 
Connection: close
Date: Thu, 06 Aug 1998 12:00:15 GMT 
Server: Apache/1.3.0 (Unix) 
Last-Modified: Mon, 22 Jun 1998 ...... 
Content-Length: 6821 
Content-Type: text/html

(data data data data……)
  • 第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
    • 第一行为状态行,(HTTP/1.1)代表HTTP版本为1.1版本,状态码为200,状态消息为(ok)
  • 第二部分:消息报头,用来讲明客户端要使用的一些附加信息
    • Date:生成响应的日期和时间;
    • Content-Type:指定了MIME类型的HTML(text/html)
  • 第三部分:空行,消息报头后面的空行是必须的
  • 第四部分:响应正文,服务器返回给客户端的文本信息

【响应状态码】

  状态码分类:

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操做
4xx:客户端错误--请求有语法错误或请求没法实现
5xx:服务器端错误--服务器未能实现合法的请求

  常见状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 
403 Forbidden                 //服务器收到请求,可是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正

  更多的状态码连接:http://www.runoob.com/http/http-status-codes.html

【GET与POST请求的区别】(参考:https://blog.csdn.net/javandroid/article/details/29884033

## Cookie

  • 因为HTTP协议无状态,没法知道客户的相关信息,使得一些应用难以实现,如网上购物(你须要掌握好客户端的状态),故引入Cookie技术来解决这个问题。
  • Cookie是在远程浏览器端存储数据并以此跟踪和识别用户身份的机制,即Cookie是存储在客户端的一小段数据,浏览器(即客户端)经过HTTP协议和服务器端进行Cookie的交互。
  • cookie容许站点对用户进行跟踪。
  • Cookie技术有4个组件:
    • 在HTTP响应报文中的一个cookie首部行
    • 在HTTP请求报文中的一个Cookie首部行
    • 在用户端系统中保留有一个Cookie文件,并由用户的浏览器进行管理
    • 位于web站点的一个后端数据库

栗子:

 

## Web缓存

  • Web缓存器(Web cache),也叫代理服务器(proxy server),是可以表明初始Web服务器来知足HTTP请求的网络实体。
  • Web cache有本身的磁盘存储,并在存储空间中保存最近请求过的对象的副本。经过配置客户端浏览器,使得用户的全部HTTP请求首先指向Web缓存器。
  • proxy server既是服务器同时又是客户:当它接收客户端的请求并响应时,它是一个服务器;当它向初始服务器发出请求并接收响应时,它是一个客户。
  • 使用Web缓存的缘由:
    • Web缓存器能够大大减小客户端请求的响应时间;
    • Web缓存器可以大大减小一个组织机构的接入链路到因特网的通讯量而下降带宽费用。
  • 经过使用内容分发网络(Content Distribution Network,CDN),Web缓存器正在Internet中发挥着愈来愈重要的做用。

 

相关文章
相关标签/搜索