前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ 后端篇 ] 04 - 一次完整的HTTP连接

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

作者头像
程序手艺人
发布2019-03-15 15:05:18
4790
发布2019-03-15 15:05:18
举报
文章被收录于专栏:程序手艺人程序手艺人

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

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

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

主要特点如下:

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

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

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

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

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

代码语言:javascript
复制
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中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。
代码语言:javascript
复制
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
  1. 读取服务端返回的报文信息:
代码语言:javascript
复制
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协议

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一次完整的HTTP连接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档