阅读 131

http请求发送后从客户端到服务端的详细过程

  1. 首先http请求是基于tcp/ip协议的,所以要通过DNS服务器将域名解析为相应ip地址如果url里不包含端口号,则会使用该协议的默认端口号。DNS解析详细过程参考https://blog.csdn.net/qq_39393899/article/details/80405979

  2. 建立一个socket连接,socket相当于tcp/ip协议的接口,便于我们去使用这个协议(比如create,listen,accept,connect,read和write等等)。socket还有心跳机制,用于保持客户端服务端的连接,按照一定的时间间隔发送一个自己命名的包给对方。由于socket连接基于tcp/ip协议,所以要经过三次握手。

  3. HTTP请求格式分别是请求行、请求头、空行、消息体,每部分内容占一行。

    请求行 :由三部分组成:分别是请求方法( GET/POST/DELETE/PUT/HEAD )、 URI 路径、 HTTP 版本号。
    请求头:缓存相关信息(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)等键值对信息。

    空行。

    主体:客户端发给服务端的请求数据,这部分数据并不是每个请求必须的。

  4. 服务器响应HTTP请求

    服务器接收处理完请求后返回一个HTTP响应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行。
    状态行 :有 HTTP 协议版本号, 状态码 和状态说明三部分构成。
    响应头:用于说明数据的一些信息,比如数据类型、内容长度等键值对。

    空行。

    消息体:服务端返回给客户端的HTML文本内容。或者其他格式的数据,比如:视频流、图片或者音频数据。

  5. 浏览器解析html代码,并请求html代码中的资源

    浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,向服务器端发起一个HTTP请求,如果服务器端返回304状态码(告诉浏览器服务器端没有修改该资源),那么浏览器会直接读取本地的该资源的缓存文件。否则开启新线程向服务器端去请求下载。(这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源。)

    最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,再呈现给用户。

原文:https://www.cnblogs.com/crisliu/p/14899106.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐