HTTP请求过程

作者: 闫正阳 | 来源:发表于2017-09-02 23:05 被阅读30次

请求过程

一个HTTP请求,从浏览器中输入网址到浏览器显示内容,一共会有这么几个过程:

  • DNS解析
  • 建立连接
  • 发送请求
  • 接收请求
  • 页面渲染

DNS解析

主要是将URL翻译为具体的IP地址的过程。
浏览器访问DNS服务器(UDP:53),然后DNS服务器通过递归的方式调用根服务器,返回对应的DNS解析结果。

建立连接

服务器端常驻一个服务用以监听80(443)端口,通过TCP的三次握手,可以在服务器和客户端之间建立一个TCP/IP连接:

  • 客户端通过自己的某个端口发送TCP建立连接的请求{SYN:1,ACK:0,seq:x},
  • 服务器端返回{SYN:1,ACK:1,seq:x+1}
  • 客户端回发{ACK:1,seq:x+1,ack=y+1}

当成功建立了连接之后,客户端开始发送HTTP请求

发送请求

HTTP的请求包含了HTTP请求头和body(GET类请求没有body)
一个最简单的HTTP请求:

GET / HTTP/1.1
Host: www.baidu.com
  • GET 代表请求方法 其他的例如POST DELETE UPDATE ...
  • / 代表请求资源路径(uri) 是相对于host主机的一个路径
  • HTTP/1.1 代表HTTP协议版本号 目前通用的是HTTP/1.1 HTTP/2实现了一些新的特性,能够让网页加载速度更快
  • Host: 请求主机

除此之外还有另一些常用的请求字段:

  • User-Agent 代表请求客户端标识 通常以此区分客户端的类型(Chrome|火狐|IE、桌面端|移动端)
  • Cache-Control 指定请求和响应遵循的缓存机制
  • Cookie 服务器端据此区分不同的客户端(保存登陆信息)

接收请求

使用telnet模拟一次HTTP请求的结果:

banixc@ubuntu:~$ telnet www.baidu.com 80
Trying 14.215.177.38...
Connected to www.a.shifen.com.
Escape character is '^]'.
GET / HTTP/1.1
HOST:www.baidu.com

HTTP/1.1 200 OK
Date: Sat, 02 Sep 2017 14:32:09 GMT
Content-Type: text/html
Content-Length: 14613
Last-Modified: Thu, 31 Aug 2017 03:03:00 GMT
Connection: Keep-Alive
Vary: Accept-Encoding
Set-Cookie: BAIDUID=D04B686C680A1398ABD46F732D220667:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=D04B686C680A1398ABD46F732D220667; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1504362729; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
Pragma: no-cache
Cache-control: no-cache
Accept-Ranges: bytes

<!DOCTYPE html><!--STATUS OK-->
<html>
<head>
...

可以看到
返回的内容中包含了一个很长的头部:

  • HTTP/1.1 200 OK 协议版本 状态码 状态描述
  • Content-Type: text/html 正文类型 这里是html
  • Set-Cookie: 告知浏览器需要为这个域设置一个Cookie

然后空一行后是返回体

页面渲染

页面渲染部分主要由浏览器来实现:

  • 解析HTML
  • 请求本页的其他资源
  • 加载 CSS 图片 以及其他内容
  • 执行JavaScript

然后一次HTTP请求就算完成了。

关于长连接

在HTTP/1.0中需要在请求头设置 Connection: Keep-Alive 并设置超时时间 Keep-Alive: timeout=20 或超时次数,在HTTP/1.1中则不需要。若要在HTTP/1.1中设置短连接则需要设置 Connection: close
然而在请求中声明长连接后只是起到通知服务器端的作用,具体是否为长连接还需要服务器的支持。

相关文章

  • HTTP请求过程

    一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服...

  • HTTP请求过程

    这篇文章简单描述一下HTTP请求的过程。 当我们在浏览器输入网址之后都发生了什么呢? 以访问http://www....

  • http请求过程

    http协议即为超文本传输协议,http协议建立在tcp之上,tcp为传输层协议,而http则为应用层协议。 ht...

  • HTTP请求过程

    关键词:HTTP HTTP协议是无状态协议,依赖瞬间或者近乎瞬间的请求处理。请求信息被立即发送,理想的情况是没有延...

  • HTTP请求过程

    请求过程 一个HTTP请求,从浏览器中输入网址到浏览器显示内容,一共会有这么几个过程: DNS解析 建立连接 发送...

  • http请求过程

    第一步:浏览器生成http请求信息(第五层) 1.分解url 当用户输入网址时,浏览器会以一定的规则分解网址, 以...

  • HTTP通信过程 - 请求

    请求行:包含了请求方法、请求资源路径、HTTP协议版本 GET /MJServer/resources/image...

  • *HTTP*的请求过程

    来自:http://www.cnblogs.com/lanyueff/p/6231867.html HTTP的请求...

  • HTTP请求的过程

    1、浏览器根据域名解析IP地址浏览器根据访问的域名找到其IP地址。DNS查找过程如下: (1)浏览器缓存:首先搜索...

  • Spring HTTP请求过程

    1.Spring Http请求全过程 (1)浏览器的http请求,被Tomcat容器的监听器监听到 (2)请求通过...

网友评论

    本文标题:HTTP请求过程

    本文链接:https://www.haomeiwen.com/subject/kiuwattx.html