专栏首页程序手艺人[ 后端篇 ] 04 - 一次完整的HTTP连接

[ 后端篇 ] 04 - 一次完整的HTTP连接

为了了解HTTP 具体的传输协议,花时间阅读了MDN 上的的HTTP协议说明,写的很详细,中英文版本都有。 这里把看完的一些知识点重点记录

超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。 它被设计用于Web浏览器和Web服务器之间的通信。

HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。

主要特点如下:

  • C/S架构,就是平时说的服务器/客户端模型
  • 无状态协议,简单说就是每次的连接不会记录状态,举个购物车的例子,用户选中商品,加入购物车,其实无状态的协议并不知道用户选中的是什么商品的。
  • 有会话

其中比较重要的两个概念是:

客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。

由像浏览器这样的客户端发出的消息叫做 requests被服务端响应的消息叫做 responses。

这个在编程中怎么体现的呢,比如使用Node编写的Web服务器中:

var http = require("http"); 
// 创建server,指定处理客户端请求的函数
http.createServer(
    function(request, response) { 
        response.writeHead(200, {"Content-Type": "text/plain"}); 
        response.write("Hello World!"); 
        response.end(); 
    }
).listen(8000); 

可以看到其中的两个参数,其中request代表了客户端发过来的请求,response代表了要回写给客户端的响应。
一次完整的HTTP连接

当客户端想要和服务端进行信息交互时(服务端是指最终服务器,或者是一个中间代理),过程表现为下面几步:

  1. 打开一个TCP连接:TCP连接被用来发送一条或多条请求,以及接受响应消息。客户端可能打开一条新的连接,或重用一个已经存在的连接,或者也可能开几个新的TCP连接连向服务端.
  2. 发送一个HTTP报文:HTTP报文(在HTTP/2之前)是语义可读的。在HTTP/2中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。发送一个HTTP报文:HTTP报文(在HTTP/2之前)是语义可读的。在HTTP/2中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
  1. 读取服务端返回的报文信息:
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
  1. 关闭连接或者为后续请求重用连接。

可以详细看一下请求的具体格式:

  • Method : 经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为。通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单值(POST方法),虽然在一些情况下也会有其他操作。
  • 要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP一般在80端口)。
  • HTTP协议版本号。
  • 为服务端表达其他信息的可选头部headers。
  • 对于一些像POST这样的方法,报文的body就包含了发送的资源,这与响应报文的body类似。

响应的具体格式:

  • HTTP协议版本号。
  • 一个状态码(status code),来告知对应请求执行成功或失败,以及失败的原因。
  • 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
  • HTTP headers,与请求头部类似。
  • 可选项,比起请求报文,响应报文中更常见地包含获取的资源body。

实际通信过程中,还有其他参数,就不一一解释,这里实际抓取了一次浏览器访问网页的通信过程

本文章只是总结了HTTP一次简单的连接,详细的可以查看HTTP协议

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 看了CES之后,跳槽到朝阳行业有着落了

    国际消费类电子产品展览会(International Consumer Electronics Show,简称CES),由美国电子消费品制造商协会(简称CTA)...

    程序手艺人
  • [ 系统篇 ] 嵌入式系统中磁盘空间占用率100%

    系统OTA升级之后,发现/etc/config 分区占用率100%,着实郁闷,/etc/config 分配20M空间,实际占用的配置文件<1M, 怎么会磁盘占用...

    程序手艺人
  • [ 后端篇 ] 05 - AWS DynamoDB 入门教程

    DynamoDB 属于AWS 专有的 NoSQL 数据库服务。其实和Mongod类似。

    程序手艺人
  • HTTP概述

    发现很多同学想学安全,上手就是一堆工具直接堆,成了就成了没成就拉到,个人感觉安全不仅仅是表面上的干进去了到索然无味!其中终端操作系统、网络架构、协议、...

    用户2202688
  • HTTP权威指南(图灵程序设计丛书)

    超文本转移协议(Hypertext Transfer Protocol,HTTP)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于w...

    用户3157710
  • HTTP 实战(二)-协议基础及发展史1 5层网络模型介绍2 HTTP协议的发展历史3 HTTP的三次握手

    公众号-JavaEdge
  • Rest Notes-将REST应用于HTTP

    itliusir
  • 什么是HTTP / 2,它如何有益于SEO?

    黄伟SEO
  • HTTP 协议漫谈

    简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 H...

    小小科
  • HTTP协议漫谈

    简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

    李海彬

扫码关注云+社区

领取腾讯云代金券