HTTP一、HTTP介绍与套接字
目录
一、套接字
1、HTTP与Apache
2、应用层协议:HTTP
3、套接字(IP+协议端口的组合)
4、套接字图示
5、套接字相关知识点
二、HTTP
一、套接字
1、HTTP与Apache
HTTP:软件包的包名
Aapache:软件名
2、应用层协议:HTTP
HTTP协议是应用层协议,同层的协议还有FTP、SMTP、DNS、RPC等
3、套接字(IP+协议端口的组合)
套接字地址:IP地址和端口号,合称为套接字地址-socket address
在建立通信连接的每一端,进程间的传输要有两个标志:
客户机套接字地址:定义了一个唯一的客户进程
服务器套接字地址:定义了一个唯一的服务器进程
套接字:IP地址+端口的组合
每个应用程序在同一台主机上,各自有各自的端口号,不会出现两个进程使用同一个端口号的情况。
因此,通过IP地址,我们可以找到网络中具体的主机。通过协议对应的端口,我们就唯一地确定了这台主机上应用程序。
进而,通过IP地址+协议端口号组成socket,就可以唯一的标识网络通信中双方的地址了,这其中一个是客户端套接字地址,
另一个就是服务器套接字地址。
4、套接字图示
从图中可以看出,位于应用层有多个用户进程,处理这些进程的Socket套接字层如何区分它是哪个应用程序能?
靠的就是协议加端口号。如,当用户访问TCP的80端口,很容易就得出用户的请求响应该回给HTPP还是DNS。
5、套接字相关知识点
Socket:
套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上,不同进程之间 进行通信和数据交换。
Socket API于1983年在BSD 4.2上出现。
Socket API:
封装了内核中所提供的aocket通信相关的系统调用
Socket Domain:
根据其所使用的地址分为以下三类
AF_INET: 主要用于IPV4
AF_INET6: 主要用于IPV6
AF_UNIX: 同一主机上,不同进程之间通信使用
6、套接字函数
建立连接前
1)服务器端开启创建一个socket对象;
2)创建好的socket绑定一个协议、端口、本地地址等信息;(如ipv4某地址绑定tcp80的端口)
3)将socket置于监听listen状态; (准备开张营业接待用户)
4)客户端也创建一个socket,不同于服务器它不需要绑定端口,因为客户端使用的是随机端口。
5)客户端调用connect函数,发起请求去连接服务器。connect里写入了要连接的对象信息,如服务器ip、端口信息等;
建立连接后(双方都处于可发可收)
6)服务收到客户端的请求,将对该请求做出响应,如给他发送数据,或接收数据。
同时,客户端也是可以做出接收或发送数据的action.
关闭连接
7)数据收发完后,双方可以断开连接
7、套接字相关系统调用
socket(): 创建一个套接字
bind(): 绑定IP和端口
listen(): 监听
accept(): 接收请求
connect(): 请求建立连接
write(): 发送
read(): 接收
closed(): 关闭连接
8、Socket模块代码赏析
import socket #
HOST='127.0.0.1' #
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
sock.send('hello, tcpServer!') #
recv=sock.recv(BUFFER) #
print('[tcpServer said]: %s' % recv) #
sock.close()
9、HTTP通信过程
二、HTTP相关术语
1、HTTP相关术语
http: Hyper Text Transfer Protocol,超文本传输协议, 80/tcp
html: Hyper Text Markup Language 超文本标记语言,编程语言
html示例:
<html>
<head>
<title>html语言</title>
</head>
<body>
<h1>标题1</h1>
<p><a href=http://www.magedu.com>马哥教育</a>欢迎你</p>
<h2>标题2</h2>
</body>
</html>
CSS: Cascading Style Sheet 层叠样式表
js: javascript
MIME: Multipurpose Internet Mail Extensions (最早来源于邮件传输技术)
多用途互联网邮件扩展 /etc/mime.types
格式:major/minor
text/plain
text/html
text/css
image/jpeg
image/png
video/mp4
application/javascript
2、URI、URL和URN
URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
URN: Uniform Resource Naming,统一资源命名
示例: P2P下载使用的磁力链接是URN的一种实现
magnet:?xt=urn:btih:660557A6890EF888666
URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
URN与URL区别:(人名与住址)
URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查
找该事物的方法。URN仅用于命名,而不指定地址
URL的组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
schame: 方案,访问服务器以获取资源时要使用哪种协议(http、ftp、trsp等)
user: 用户,某些方案访问资源时需要的用户名。(一般匿名不写)
password: 密码,用户对应的密码,中间用:分隔。
Host: 主机,资源宿主服务器的主机名或IP地址
port: 端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号(系统默认端口可省略)
path: 路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params: 参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query: 查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag: 片段,锚点。一小片或一部分资源的名字,此组件在客户端使用,用#分隔
url中的查询
如电商购物网站搜索产品,在url中会产生查询后台数据库的keyword,这就是查询
url中的锚点
如网页内容太长,选中该字母则跳转到该字母所在区域,url中以#标识
URL示例
http://www.magedu.com:8080/images/logo.jpg
ftp://mage:password@172.16.0.1/pub/linux.ppt
rtsp://videoserver/video_demo/
Real Time Streaming Protocol
http://www.magedu.com/bbs/hello;gender=f/send;type=title
https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
http://apache.org/index.html#projects-list
3、HTTP协议介绍
持久连接:建立连接以后三次握手建立连接后不断开,在连接里可以持续发起请求。持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
管道机制(pipelining):即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
队头堵塞:同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)
头信息帧和数据帧:头信息和数据体都是二进制,称为头信息帧和数据帧
多工(Multiplexing):复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
头信息压缩机制(header compression):头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
服务器推送(server push):HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)