【前端技术文档】http相关知识

整    理:曹燕

时    间:2016-03-04

说    明:http的定义、请求响应模型、TCP三次握手、使用wireshark工具抓包

1.定义

http: hypertext transfer protocol(超文本传输协议),是用于从WWW服务器传输超文本到本地浏览器的传送协议。http是互联网上应用最为广泛的网络协议。所有的WWW文件都必须遵守这个标准。它由请求和响应构成,是一个标准的客户端服务器模型。

2.http请求响应模型

http协议永远是客户端发起请求,服务器端回送响应。

http协议是一个无状态的协议,同一个客户端的这次请求和上次请求没有对应关系。图片1

①http客户端发起请求,创建端口;

②http服务器在端口监听客户端的请求;

③http服务器向客户端返回状态和内容。

 

3.访问某个网址的整个流程

(1)建立连接

①chrome搜索自身的DNS缓存(如有没有baidu.com及ip地址,一般缓存1分钟,如果有缓存看是否过期)【方法:chrome://net-internals/#dns】;

②当浏览器没有找到缓存或缓存已经过期,则搜索操作系统自身的DNS缓存;

③如果没找到,则读取本地的host文件;

④如果host文件中没有,则浏览器发起一个DNS的系统调用;

⑤宽带运营商服务器查看自身缓存;

⑥运营商服务器发起一个迭代的DNS解析请求;

⑦运营商服务器把结果返回操作系统内核并缓存起来;

⑧操作系统内核把结果返回给浏览器;

⑨最终浏览器拿到了www.baidu.com的ip地址

⑩浏览器获得对应的ip地址之后,发起三次握手。(详见下文)

(2)浏览器发送请求

TCP/IP连接建立起来之后,浏览器就可以向服务器发送请求了。例如用http中的get方法请求一个根域里的一个域名,采用了http1.0的某个协议;【应用于资源的方法、资源的标识符和协议的版本号】

(3)服务器返回响应

服务器接受这个请求,根据路径参数,经过后端的一些处理,把处理之后的结果数据返回给浏览器(例如百度的html页面)【信息的协议版本号、状态码,MIME信息包括服务器信息、实体信息和可能的内容】

(4)浏览器渲染

浏览器拿到了百度的完整html页面代码,在解析和渲染这个页面的时候,里面的css/js/静态图片等静态资源,同样是一个个http请求,需经过前面的7步。

浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户,然后与服务器断开连接。

 

3.TCP连接中的三次握手

3.1概念

确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效;

同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文;

3.2三次握手

①浏览器:客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认【你能听到我说话吗,我们聊聊?】

②服务器:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态【我能听到你说话,我们可以聊聊】

③浏览器:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手【好的,那我们开始聊吧】

3.3利用工具Wireshark抓http、tcp包结果:图片2

4.http请求头

  • Accept:浏览器可接受的MIME类型;
  • Accept-Charset:浏览器可接受的字符集;
  • Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip;
  • Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;
  • Authorization:授权信息;
  • Connection:表示是否需要持久连接。如果这里的值为“Keep-Alive”,或者请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间;
  • Content-Length:表示请求消息正文的长度;
  • Cookie:这是最重要的请求头信息之一;
  • Host:初始URL中的主机和端口;
  • If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;
  • Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;
  • Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面;
  • User-Agent:浏览器类型。

5.http响应头

  • Allow:服务器支持哪些请求方法(如GET、POST等);
  • Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型;
  • Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据;
  • Content-Type: 表示后面的文档属于什么MIME类型,如text/plain,text/html;
  • Date:当前的GMT时间;
  • Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它;
  • Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态;
  • Location:表示客户应当到哪里去提取文档;
  • Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。

 

相关文档:http 1.1 和 http1.0 主要区别