《图解HTTP》学习笔记之入门

学习HTTP之前,很必要了解一下关于Web网络基础。

TCP/IP协议族

1、应用层:应用层决定了向用户提供应用 服务时的通信活动,比如FTP(文件传输协议)、DNS(域名系统)、HTTP(超文本传输协议)

应用层就像目的地

2、传输层:传输层对上层应用层提供处理网络连接中的两台计算机之间的数据传输,有两个协议TCP(传输控制协议)、UDP(用户数据协议)

传输层就像是马路上的规则

在TCP协议中要通过三次握手才能建立可靠连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

UDP和TCP的区别

最本质的区别就是TCP是面向连接的,而UDP是非面向连接的。

什么叫面向连接呢?事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话,只能两人打,第三人打就显示占线

非面向连接:是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输,就像写信,不管对方有多忙,把信放到邮筒,就与自己无关系了。

TCP支持的服务有FTP、SMTP等,而UDP支持的服务有DNS、SNMP、QQ等

3、网络层:网络层用来处理在网络上流动的数据包。包括IP协议。

网络层就像马路上的车,规定了数据传输的路线

IP地址指明了节点被分配的地址,MAC地址是指网卡所有的固有地址,通俗的理解IP地址就像快递的终点地址,而MAC地址就像快递到终点地址之间的间歇地址。

4、链路层:一些硬件部分,包括驱动、网卡和光纤等

链路层就像是马路

各协议的职责

DNS是为了域名解析。

HTTP是为了生成针对目标Web服务器的HTTP请求报文(用HTTP交互的信息),并判断是哪个报文

TCP是为了方便通信,将HTTP请求报文割成报文段,把每个报文段可靠传给对方,又按照顺序重组接收的报文段。

IP是为了搜索对方地址,一边中转一边传送。

告知服务器意图的HTTP方法

GET:获取资源

POST:传输实体主题

PUT:传输文件

HEAD:获得报文首部

DELETE:删除文件

OPTIONS:询问支持的方法

TRACE:追踪路径

CONNECT:要求用隧道协议链接代理

详细例子可参考http://www.cnblogs.com/six-moon/p/5151562.html

持久连接节省通讯量,持久连接就是只要任意一方没有提出断开连接,就一直连接。持久连接使得多数请求以管线化的方式发送可能,管线化就是从发送请求后需要等待并收到响应,才能发送下一个请求。

HTTP为无状态协议,需要Cookie进行状态管理,比如自己的登陆状态,可以利用cookie控制自己的客户端状态

HTTP编码

有时候我们用百度云下载文件时,给的链接有时候是编码的有时候是未经编码的,编码可提升传输速率。

HTTP常见状态码

HTTP通信数据转发程序

代理:接收由客户端发送的请求并转发给服务器

网关:保证通信安全性

隧道:保证客户端和服务器安全通信

安全的HTTPS

HTTP缺点:通信不加密内容会被窃听

不验证通信方的身份,遭遇伪装

无法证明报名完整性,可能回被篡改

所以引入HTTPS

HTTP+加密+认证+完整性保护=HTTPS

加密:通过SSL(安全套接层)或TLS(安全传输协议)组合使用,加密HTTP的通信内容

HTTPS是采用混合加密机制,共享秘钥+公开秘钥的方式实现加密

认证:

基于HTTP功能的追加协议

什么是HTTP的瓶颈:更新的内容只能显示在客户端

解决方法:AJAX和SPYD

但是SPYD也无法真正消除瓶颈,因为计算机的一些硬件问题的存在,如网卡和CPU等

彻底解决问题的方法是:WebSocket,即web浏览器和web服务器之间全双工通信标准。

优点是,直接发送数据,不用等待客户端请求,一直保持连接状态,且首部信息量少,通信量减少。

使用Cookie来管理Session

客户端把用户IE和密码等登录信息放入报文的实体部分,以POST方式发送给服务器。

服务器进行身份认证,产生SessionID,加入到Set-Cookie内,返回给客户端。

客户端接收到SessionID后,将其加入Cookie,下次请求时,浏览器会自动发送Cookie。

具体内容大家可以看下《图解HTTP》这本书,讲的真心不错。

时间: 2024-10-12 23:51:34

《图解HTTP》学习笔记之入门的相关文章

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended

springmvc学习笔记(5)-入门程序小结

springmvc学习笔记(5)-入门程序小结 springmvc学习笔记5-入门程序小结 入门程序配置小结 非注解的完整的配置文件 注解的完整配置文件 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法.并附上入门程序的非注解的完整的配置文件,注解的完整配置文件. 入门程序配置小结 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServl

Unity3d_学习笔记_入门

转自:http://blog.csdn.net/zlfxy/article/details/8722437 本文内容来自“编程教父”的视频课程. 1.Unity3d一个游戏引擎,可以用来开发很多游戏. 要利用Unity3d开发游戏,我们首先要下载一个Unity3d软件.下载后,下载一个破解补丁,这样就可以正常进行开发了. 2.Unity3d每次只能开启一个工程项目. (1)Unity3d中比较重要的一个对象就是摄像机了,摄像机就相当于我们人的眼睛,有了摄像机,运行程序后,才能够有视野. (2)U

【慕课网】php工程师学习计划之我的学习笔记——01 入门必学web基础 htmlcss基础课程 篇

为了进一步学习PHP,本周我选定了慕课网的PHP工程师学习计划, 从今天2015-07-06 10:24:47开始从头学习:计划本周尽快学习完成本课程,谨此作为笔记. 有个好的学习计划和思路非常非常重要,非常感谢慕课网提供本套学习计划,希望更多地学习平台能提供像这样全面一条龙学习思路清晰地教程. 计划图:链接 我的学习状况:2015-07-06 10:29:46 开始随记: php工程师学习计划笔记——01 入门必学web基础 htmlcss基础课程 篇 入门篇: text-align:cent

MySQL学习笔记-基础入门

MySQL学习笔记

Sass学习笔记之入门篇

Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样式表.以下是我的学习笔记. Sass安装环境 1.安装sass(mac) ①:Ruby安装 ②:安装sass sudo gem install sass 可以通过 sass -v检测是否完成安装   2.更新sass gem update sass 3.卸载(删除)sass gem uninstal

Visual Studio 2005 学习笔记一 入门

转载自:http://blog.163.com/zm_shichaoren/blog/static/6880234120087211452776/ Visual studio 2005入门记 终于卸掉了Visual C++6.0,换上了全新的Visual C++2005.尽管是简体中文版的,但是功能强大的Visual studio 2005 IDE庞大的开发环境和N多的配置设置,学习起来还不是很简单.C++/CLI通过对ISO C++ 标准的纯粹扩展和新语法,不像传统的MS-DOS 控制台程序,

Elasticsearch 学习笔记1 入门

参考资料 官方学习文档:https://www.elastic.co/guide/index.html 入门中文权威指南: http://es.xiaoleilu.com/ 1 认识es elasticsearch功能: - 全文检索(可以解决DB检索问题(文本检索性能,全文检索等)) - 分布式的实时文件存储,每个字段都被索引并可被搜索(牛逼) - 分布式的实时分析搜索引擎(实时性能好) - 可以扩展到上百台服务器,处理PB级结构化或非结构化数据(容易扩展,支持大数据量) 基于apache l

VS2013中Python学习笔记[基础入门]

前言 在上一节中简单的介绍了在VS2013中如何进行开发Hello World,在VS2013中进行搭建了环境http://www.cnblogs.com/aehyok/p/3986168.html.本节主要来简单的学习一下关于Python的基础. Python基础入门 1.打印一个字符串Hello World. print('Hello World') 2.打印一个路径 print('C:\aehyok\aehyok') 可以发现\a发生了转义.如果不想发生转义,只需要在字符串前添加一个r p