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 服务器端错误

10.1 HTTP的更多相关文章
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- 10个最好用的HTML/CSS 工具、插件和资料库
大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误
1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: -1ubu1604-amd64.deb 提示: ...
- Ubuntu 16.10 安装byzanz截取动态效果图工具
1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
随机推荐
- 求字符串长度之递归与非递归的C语言实现
在上一篇中介绍了字符串拷贝的递归与非递归的实现,这里就不在赘述递归原理. 递归求字符串长度_strlen: 1 int _strlen(const char *src) 2 { 3 if( src = ...
- 终于搞懂了PR曲线
PR(Precision Recall)曲线 问题 最近项目中遇到一个比较有意思的问题, 如下所示为: 图中的PR曲线很奇怪, 左边从1突然变到0. PR源码分析 为了搞清楚这个问题, 对源码进行了分 ...
- Go版本管理--处理不兼容
目录 1. 简介 2.能否引起不兼容的包 3.如何处理incompatible 1. 简介 Go module的版本选择机制,其中介绍了一个Module的版本号需要遵循v<major>.& ...
- 删除mysql数据库后django重建数据库
问题:由于表的结构设计的不太合理,后来要添加列,但是在django中使用makemigrations一直失败. 解决:索性就把mysql中对于django的数据库删了(其实也不用删除),在django ...
- 如何攻击Java Web应用
越来越多的企业采用Java语言构建企业Web应用程序,基于Java主流的框架和技术及可能存在的风险,成为被关注的重点. 本文从黑盒渗透的角度,总结下Java Web应用所知道的一些可能被利用的入侵点. ...
- MySQL密码重置方法
MySQL数据库的安装和配置,配置Mysql按照bin目录到Path中 使用命令行窗口连接MYSQL数据库:mysql –u用户名 –p密码 对于密码的重置有以下两种方法(卸载重新安装当然也可以): ...
- python库--pandas--部分实例
>>> pd.pivot( index=np.array(['one', 'one', 'one', 'two', 'two', 'two']), columns=np.array( ...
- 【分布式微服务企业快速架构】SpringCloud分布式、微服务、云架构快速开发平台源码
鸿鹄云架构[系统管理平台]是一个大型 企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于 模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术 (Sprin ...
- 使用vsCode开发vue项目格式化通用配置
{ "editor.tabSize": 2, "editor.fontSize": 18, "editor.wordWrap": ...
- C#动态构建表达式树(三)——表达式的组合
C#动态构建表达式树(三)--表达式的组合 前言 在筛选数据的过程中,可能会有这样的情况:有一些查询条件是公共的,但是根据具体的传入参数可能需要再额外增加一个条件.对于这种问题一般有两种方法: a. ...