【HTTP】Web及网络基础&HTTP基础
HTTP协议访问Web
一、大体访问过程
1. 浏览器地址栏输入URL
2. 浏览器从服务端获取文件资源
3. 浏览器显示Web页面
二、HTTP的版本历史
1. HTTP/0.9 没有作为正式的标准被建立
2. HTTP/1.0 初期正式标准,至今仍广泛使用。
3. HTTP/1.1 目前主流的HTTP协议版本。(RFC2616)
4. HTTP/2.0 正在制定,目前覆盖率低。
HTTP的出现是为了解决了文本传输的难题。
三、TCP/IP协议族
TCP/IP是与互联网相关的协议的集合。通常使用的网络是在TCP/IP的协议族的基础上运作的。HTTP是TCP/IP的一个子集。
TCP/IP的层次:应用层、传输层、网络层、数据链路层。
分层的好处:对于需要变动的设计,只需要替换需要变动的层,把各层之间的接口部分规划好之后,每个层次内部的设计可以自由改动。
应用层:决定了向用户提供应用服务时通信的活动。TCP/IP协议族中预存了各类通用的应用服务:FTP文件传输协议、DNS域名系统、HTTP超文本传输协议。
传输层:对上层应用层提供处于网络连接中的两台计算机之间的数据传输。TCP传输控制协议、UDP用户数据报协议。
网络层:用于处理在网络上流动的数据包。数据包是网络传输的最小数据单位,在网络层规定了传输路线,通过传输路线将数据包传给对方。
数据链路层:用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡、光纤等物理可见部分。(硬件范畴均在数据链路层的作用范围)
TCP/IP协议族进行网络通信:通过分层顺序与对方进行通信。
发送端:应用层-->传输层-->网络层-->数据链路层。
接收端:数据链路层-->网络层-->传输层-->应用层。
HTTP上的传输过程:
客户端在应用层(HTTP协议)发出Web页面的HTTP请求。传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)分割,并在各个报文上打上标记序号及端口号后转发给网络层。网络层(IP协议)增加作为通信目的地的MAC地址后转发给数据链路层。
服务器在数据链路层接收到数据,向上传输数据,直到应用层。
层与层之间传输数据时,发送端每经过1层会加上该层的首部信息。接收端会把首部信息消去。数据信息的包装就是封装。
四、HTTP相关协议
1. IP【负责传输】
IP网际协议位于网络层。作用是根据IP地址和MAC地址传输数据包。IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。
在多台计算机间设备中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标,ARP协议可以根据通信方的IP地址解析出对于的MAC地址。
2. TCP【确保可靠】
TCP位于传输层,作用是提供可靠的字节流服务。
字节流服务:为了方便传输,大块数据会被分割成以报文段为单位的数据包进行管理。
TCP为了容易传输大数据会把数据进行分割,并确保数据是否送达目的地。
如何确保数据准确送达?
【三次握手策略】
①发送端发送【SYN】标志的数据包给接收端
②接收端回传【SYN/ACK】标志的数据包给发送端
③发送端回传【ACK】标志的数据包给接收端。【握手结束】
3. DNS【域名解析】
DNS是应用层协议,作用是提供域名到IP地址之间的解析服务。
用户通过主机名/域名访问目标计算机,DNS通过域名查找IP地址(还可以通过IP地址反查域名),访问目标计算机
4. 举例总结协议之间的关系
------------------------客户端----------------------------------
①客户端访问www.xxxx.com/index页面
②DNS解析到域名对应的IP地址是XXX.XXX.XXX.XXX
③HTTP生成针对目标服务器的HTTP请求报文
④TCP为了方便传输将报文分割成报文段
⑤IP搜索对方地址,在路由器之间中转并传输。
------------------------服务端----------------------------------
①TCP将接收到的报文按序号重组
②HTTP对web服务器请求的内容进行处理(页面资源)
③将处理的结果通过TCP/IP进行回传。
五、URI和URL
URI:统一资源标识符
URL:统一资源定位符
URL=协议方案(http:)+资源路径+标识符(URL),URI是URL的一个子集。
HTTP协议基础
一、HTTP实现两端通信
HTTP协议用于客户端和服务端之间的通信。
客户端:发送请求
服务端:响应回复
请求报文的组成:请求方法、请求URI、协议版本、可选的请求首部字段、资源内容实体。
GET /URI HTTP/1.1
Host: XXXXXX
Connection:keep-alive
Content-Type: xxxxxxxxx
Content-Length: 16
name=name&age=18
响应报文的组成:协议版本、状态码、状态码原因短语、可选的响应首部字段、实体主题
HTTP/1.1 200 OK
Date: Sat, 16 May 2020 17:45:33 GMT
Content-Length: 666
Content-Type: text/html <html>
........
</html>
二、HTTP是无状态协议。
无状态:不保存状态。
HTTP自身不对请求和响应之间的通信状态进行保存,协议对于发送过的请求或响应不做持久化的处理。
每当有新的请求发送时,就会有对应的新响应产生。不保存之前的状态是为了更快的处理大量事务,确保协议的可伸缩性。
在业务处理中,这种无状态会造成问题,当用户跳转到其他页面,也需要保持登录状态。所以为了掌握是谁送出的请求,需要保存用户的状态。
Cookie技术可以管理需要保持的状态。
三、HTTP请求URI定位资源
HTTP通过URI定位互联网上的资源。所以当客户端请求资源时,URI需要作为请求报文的请求URI包含在内。
四、HTTP方法
1. GET【获取资源】
GET用于请求访问已被URI识别的资源。指定的资源经服务器解析后返回响应内容。如果请求的资源是文本就原样返回。如果是CGI(通用网关接口),返回经过执行后的输出结果。
通用网关接口:是Web服务器将用户请求提交给应用程序并从用户处接收和返回数据的标准方法。当用户请求一个网页(例如,点击加亮的词或者输入一个网站的地址)时,服务器将返回所请求的页面。然而,当用户在网页上填写一张表格并将其发送出去后,它通常需要经应用程序处理。Web服务器常将表格中的信息转发给一个小应用程序,由它处理数据并返回确认信息。这种在【服务器和应用程序之间交换信息的接口】被称作【通用网关接口】。它是互联网上的超文本传输协议(HTTP)的一部分。”
2. POST【传输实体主体】
GET也可以传输实体的主题,但一般不用GET来传输。
原因:虽然GET和POST都是明文传输。但是GET的会把提交的URL数据存放在web日志和浏览器历史记录中。
3. PUT【传输文件】
PUT用来传输文件。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
但是HTTP/1.1的PUT自身无验证机制,任何人都可以上传文件,存在安全问题。所以一般web网站不使用。若配合web应用程序的验证机制或采用REST(表征状态转移)标准的网站,可能会开放PUT方法。
4. HEAD【获取报文首部】
和GET方法一样,但不返回报文主体部分。一般用于确认URI的有效性和资源更新的日期。
5. DELETE【删除文件】
与PUT相反,按请求的URI删除指定的资源。同样没有验证机制,一般不使用DELETE方法。若配合web应用程序的验证机制或采用REST(表征状态转移)标准的网站,可能会开放DELETE方法。
6. OPTIONS【询问支持的方法】
用来查询针对请求URI指定的资源支持的方法
7. TRACE【追踪路径】
让服务器将之前的请求通信还回客户端。客户端通过TRACE可以查询发送的请求时怎么被加工修改的。请求连接目标服务器可能会通过代理中转。TRACE用来确认连接过程中发生的一系列操作。容易引发XST跨站追踪,通常不会用。
8. CONNECT【要求用隧道协议连接代理】
实现用隧道协议进行TCP通信,主要使用SSL安全套接层和TLS传输安全协议把通信内容加密后经过网络隧道传输。
五、持久连接节省通信量
只要任意一端没有明确断开连接,就保持TCP连接状态。
【三次握手】
C--------> SYN -------->S
C<-----SYN/ACK <-----S
C--------> ACK -------->S
【请求响应】
C----> HTTP请求 ---->S
C<---- HTTP响应 <----S
......
C----> HTTP请求 ---->S
C<---- HTTP响应 <----S
【断开连接】
C<-------- FIN <--------S
C--------> ACK-------->S
C--------> FIN -------->S
C<-------- ACK<--------S
持久连接的优点:减少了TCP连接的重复建立和断开的开销,减轻服务端负载,提高页面响应速度。
【管道化】:持久连接使得管道化发送数据成为可能。可以并行发送多个请求,不需要一个一个的等待响应。使得请求时间更快结束。
六、使用Cookie的状态管理
管理用户的登录认证状态可以使得页面跳转后无需再次登录。
实现:在请求报文中附加参数来管理登录状态。Cookie会从根据响应报文的Set-Cookie的首部字段信息,通知客户端保存Cookie。下次客户端请求时,自动在请求报文中加入Cookie值发送出去。服务端根据Cookie找到之前的状态信息。
【HTTP】Web及网络基础&HTTP基础的更多相关文章
- 了解web及网络基础
了解web及网络基础 以下内容简单的说明了一下TCP/IP协议族中HTTP协议.DNS服务.IP协议的一些概念和关系.笔者只是对知识点进行了总结,仅供参考: ) 转载请注明出处:了解web及网络基础 ...
- 【图解HTTP】第一章 了解web及网络基础
[图解HTTP]了解Web及网络基础 Web页面是如何呈现的?根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面. 这种通过 ...
- http基础(1.了解web及网络基础,2.简单的http协议)
第一章:了解web及网络基础 1.http:超文本传输协议 2.tcp/ip协议族:通常使用的网络是在tcp/ip协议族的基础上运作的,而http属于它内部的一个子集. 3.tcp/ip协议族按层次分 ...
- 第一章 了解Web及网络基础
第一章 了解Web及网络基础 Web建立基础.HTTP如何诞生发展 1.使用HTTP协议访问Web 在浏览器地址栏中输入URL之后过程: 1)DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地 ...
- java第九节 网络编程的基础知识
/** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...
- linux基础-第十四单元 Linux网络原理及基础设置
第十四单元 Linux网络原理及基础设置 三种网卡模式图 使用ifconfig命令来维护网络 ifconfig命令的功能 ifconfig命令的用法举例 使用ifup和ifdown命令启动和停止网卡 ...
- Python开发【第二十一篇】:Web框架之Django【基础】
Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- 网络工程师岗位基础面试题【适用于CCNA/CCNP基础】
网络工程师岗位基础面试题[适用于CCNA/CCNP基础] 1: 交换机是如何转发数据包的?交换机通过学习数据帧中的源MAC地址生成交换机的MAC地址表,交换机查看数据帧的目标MAC地址,根据MAC地址 ...
- hadoop搭建一:虚拟机网络配置和基础(未完成)
基于VMware 15+CentOS 7+Hadoop 2.6,hadoop的搭建主要用于个人学习,水平有限. hadoop搭建一:虚拟机网络配置和基础 hadoop搭建二:hadoop全分布搭建 h ...
随机推荐
- 图论--最长路--基于SPFA的调整模板
#include<iostream> #include<queue> #include<algorithm> #include<set> #includ ...
- 10 微信小程序路由跳转
一.四种跳转方式 API路由详解 除了tabBar这种底部跳转的方法,我们还有路由跳转,以下四种方式: 1. wx.switchTab() :跳转到 tabBar 页面,并关闭其他所有非 tabBar ...
- linux关于suid提权笔记
suid全称是Set owner User ID up on execution.这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执 ...
- LeetCode--Array--Container With Most Water (Medium)
11. Container With Most Water (Medium)# Given n non-negative integers a1, a2, ..., an , where each r ...
- Java return 关键字
一.基本概念 return一方面用在循环语句中来结束循环,另一方面用来终止函数的执行或者退出类的方法,并把控制权返回该方法的调用者.如果方法有返回类型,则return的返回该类型的值:如果没有返回值, ...
- 高性能mysql第三版读书笔记3
innodb以前不支持高并发,在搞病房下就是悲剧,全部卡在mutex(缓冲池mutex)上,现在通过线程调度器控制线程怎么进入内核访问数据,参数为innodb_thread_concurrency,它 ...
- Spring JDBC 框架使用JdbcTemplate 类的一个实例
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- Redis学习笔记(二) 链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度. redis中链表应用广泛,如list中就使用了链表. 每一个链表节点使用listNode结构标识( ...
- 在ef core中使用postgres数据库的全文检索功能实战之中文支持
前言 有关通用的postgres数据库全文检索在ef core中的使用方法,参见我的上一篇文章. 本文实践了zhparser中文插件进行全文检索. 准备工作 安装插件,最方便的方法是直接使用安装好插件 ...
- HDU 2016 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016 题目大意:给你 n 个数,把最小的数和第一个数字互换,然后输出 解题思路: 很水,开数组,遍历并 ...