10.1 HTTP
1.跨网络的主机间通讯
套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间通信和数据交换
在建立通信连接的每一端,进程间的传输要有两个标志:IP地址和端口号,合称为套接字地址Socket address
客户机套接字地址定义了一个唯一的客户进程
服务器套接字地址定义了一个唯一的服务器进程
Socket API
封装了内核中所提供的socket通信相关的系统调用
Socket Domain:根据其所有使用的地址
AF_INET:Address Familey, IPv4
AF_INET6:IPv6
AF_UNIX:同一主机不同进程之间通信时使用
Socket Type:更具使用的传输层协议
SOCK_STREAM:流,tcp套接字,可靠地传递,面向连接
SOCK_DGRAM: 数据包,udp套接字,不可靠地传递,无连接
SOCK_RAW:裸套接字,无须tcp或udp,app直接通过ip包通信
套接字相关的系统调用:
socket() 创建一个套接字
bind() 绑定IP和端口
listen() 监听
accept() 接收请求
connect() 请求连接建立
write() write
read() read
close() 关闭连接
HTTP相关概念
URL:统一资源定位符 使每个文档在整个因特网的范围内具有唯一的标识符URL
HTTP:应用层协议,超文本传输协议,基于tcp 80和443
HTML:超文本标记语言,将不同风格的文档,统一显示
浏览器工作原理
1.浏览器的指责: 请求并解析服务器返回的html 2.dns解析 为什么进程dns解析 系统缓存查询 路由器缓存,ISP缓存 dns递归查询 3.tcp连接 三次握手 四次断开 4.http 请求 get post 5.浏览器的渲染原理 ...
持久连接:
当连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成
断开条件:
时间限制,请求数量
副作用:
不适用于大并发场景
HTTP协议
http协议:0.9,1.0,1.1,2.0,3.0 协议特点:stateless无状态,无法追踪访问者来源 解决办法: cookie 客户端存放 session 服务器端存放 http事务:一次访问过程 请求 request 响应 response
HTTP请求报文
request 报文格式
<method><request-URL><version>
<headers>
<entity-body>
GET http://10.211.55.4:8000/index.html 状态 200OK 版本 HTTP/1.1 传输 242 字节(大小 8 字节)
HTTP响应报文
response 报文格式
<version><status><reason-phrase>
<headers>
<entify-body>
HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Wed, 07 Apr 2021 06:02:49 GMT Content-Type: text/html Content-Length: 8 Last-Modified: Wed, 07 Apr 2021 06:01:42 GMT Connection: keep-alive ETag: "606d4ac6-8" Accept-Ranges: bytes
HTTP报文详解:
method方法
请求方式,标明客户端希望服务器对资源执行的动作: get:从服务器获取一个资源 head:只从服务器获取文档的响应首部 post:向服务器输入数据 put:将请求的主体部分存储在服务器中,如上传文件 delete:请求删除服务器上制定的文档 trace:追踪请求到达服务器中间经过的代理服务器 options:请求服务器返回对指定资源支持使用的请求方法 connect:建立一个到有目标资源标识的服务器的隧道 patch;用于对资源应用部分修改
verison版本
HTTP/1.1
status状态吗
http协议状态吗分类: 1xx 100-101 信息提示 2xx 200-206 成功 3xx 300-307 重定向 4xx 400-415 错误类信息,客户端错误 5xx 500-505 服务器端错误