学习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》这本书,讲的真心不错。

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

  1. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  2. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  3. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  4. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  5. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  6. 学习笔记_J2EE_SpringMVC_01_入门

    1.    概述 笔者作为一个不太正经的不专业佛教信仰者,习惯了解事物的因果关系,所以概述就有点BBB...了.如果不喜欢这些的,请自行跳过概述章节,直接进入第二章的操作实践:2 入门示例. 1.1. ...

  7. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  8. SpringBoot学习笔记<一>入门与基本配置

    毕业实习项目技术学习笔记 参考文献 学习视频 2小时学会Spring Boot:https://www.imooc.com/learn/767 学习资料 SpringBoot入门:https://bl ...

  9. 图解HTTP学习笔记——简单的HTTP协议

    简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...

  10. [学习笔记]SiftGPU入门

    当有读者看到我这篇SiftGPU入门的学习笔记时,相信你已经读过了高博那篇<SLAM拾萃:SiftGPU>,那篇文章写于16年,已经过去两年的时间.在我尝试配置SiftGPU的环境时,遇到 ...

随机推荐

  1. 微信小程序内置组件web-view的缓存问题探讨

    前言:博客或者论坛上面,还有自习亲身经历,发现微信小程序的webview组件的页面缓存问题相当严重,对开发H5的小童鞋来说应该困扰了不少.很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探 ...

  2. Nginx学习简记_part1

    内容概览 nginx简介 (1)介绍nginx的应用场景和具体可以做什么事情 (2)介绍什么是反向代理 (3)介绍什么是负载均衡 (4)介绍什么是动静分离 nginx安装 (1)介绍nginx在lin ...

  3. libview关于图片导入并显示

    1 程序框图->图形与声音->图形格式,选择“写入某个格式的图片”,然后在路径处创建输入控件,然后在“图片函数”中选择“绘制平面像素图”,在控件输出端“新图片”创建显示控件.打开前面板,在 ...

  4. windows 下apache开启FastCGI

    1.首先去(http://www.apachelounge.com/download/)下载一个合适的mod_fcgid  文件.     2.将解压后的文件改为mod_fcgid.dll 并复制到a ...

  5. Go interface 操作示例

    原文链接:Go interface操作示例 特点: 1. interface 是一种类型 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为.go 允许不带任何方 ...

  6. pandas 数据库数据的读取

    绝大多数公司都会选择将数据存入数据库中,因为数据库既可以存放海量数据,又可以非常便捷地实现数据的查询.下面以MySQL和SQL Server为例,来练习Pandas模块和 对应的数据库模块. 首先需要 ...

  7. Next Cloud通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享链接地址

    Next Cloud如何通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享的链接地址 本文首发于我的个人博客:https://chens.life/nextcloud-chan ...

  8. Java后台服务慢优化杂谈

    Java后台服务慢优化杂谈 前言 你是否遇到过这样的场景,当我们点击页面某个按钮后,页面一直loading,要等待好几分钟才出结果的画面,有时直接502或504,作为一个后台开发,看到自己开发的系统是 ...

  9. SpringCloud Alibaba Nacos 服务治理中心

    目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...

  10. mybatis逆向工程介绍

    项目的model一旦多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的pojo和mapper,能节省很多精力. MyBatis Generator(MBG)是 MyBati ...