网络协议 概念

网络协议 概念

## 概念

Hypertext Transfer Protocol, 超文本传输(转移)协议,是客户端和服务端传输文本制定的协议。构建WWW的具体的三项技术如下:

WWW: world wide web, 万维网
    
    – HTML: Hypertext Markup Language, 超文本标记语言
    – HTTP: Hypertext Transfer Protocol, 超文本传输(转移)协议 (HTTP是TCP/IP的应用层协议)
    – URL: Uniform Resource Locator, 统一资源定位符号

> URI: Uniform Resource Identitier, 统一资源标示符号,URL是URI的子集

## TCP/IP

“`
    应用层(http/https/websocket/ftp…) => 定义:文本传输协议
      |
    传输层(tcp/udp) => 定义:端口
      |
    网络层(ip) => 定义:IP
      |
    链路层(mac&数据包) => 定义:数据包,MAC地址
      |
    实体层(光缆/电缆/交换机/路由/终端…) => 定义:物理
“`

TCP/IP:

– 解释一:分别代表tcp协议和ip协议
– 解释二:如果按照网络五层架构,TCP/IP代表除了应用层其他层所有协议簇的统称

TCP/IP connect: TCP/IP的三次握手:
“`
          标有syn的数据包
          ————->
          标有syn/ack的数据包
  client  <————-  server
          标有ack的数据包
          ————–>
“`

TCP/IP finish: TCP/IP的四次握手:
“`
                          fin
                    <————-
                          ack
client(或server)    ————-> server(或client)
                          fin
                    ————->
                          ack
                    <————-
“`

## HTTP 报文

HTTP 报文由三部分组成:
– Start Line
– Headers
– Entity Body

HTTP 报文分为两类:
– 请求报文
– 响应报文

### 请求报文Start Line

语法 : <方法> <请求URL> <版本>

#### HTTP Method

+ get: 获取资源,不携带http body,支持查询参数,大小2KB
+ post: 传输资源,http body, 大小默认8M,1000个input variable
+ put: 传输资源,http body,资源更新
+ delete: 删除资源,不携带http body
+ patch: 传输资源,http body,存在的资源局部更新
+ head: 获取http header,不携带http body
+ options: 获取支持的method,不携带http body
+ trace: 追踪,返回请求回环信息,不携带http body
+ connect: 建立隧道通信

### 响应报文Start Line

语法 : <方法> <状态码> <原因短语>

#### HTTP Status Code

+ 200: ok
+ 301: 永久重定向
+ 302: 临时重定向
+ 303: 临时重定向,要求用get请求资源
+ 304: not modified, 返回缓存,和重定向无关
+ 307: 临时重定向,严格不从post到get
+ 400: 参数错误
+ 401: 未通过http认证
+ 403: forbidden,未授权
+ 404: not found,不存在资源
+ 500: internet server error,代码错误
+ 502: bad gateway,fastcgi返回的内容web server不明白
+ 503: service unavailable,服务不可用
+ 504: gateway timeout,fastcgi响应超时

### HTTP Header Fields

常见通用头部

+ Cache-Control:
  – no-cache: 不缓存过期的缓存
  – no-store: 不缓存
+ Pragma: no-cache, 不使用缓存,http1.1前的历史字段
+ Connection:
  – 控制不在转发给代理首部不字段
  – Keep-Alive/Close: 持久连接
+ Date: 创建http报文的日期

常见请求头

+ Accept: 可以处理的媒体类型和优先级
+ Host: 目标主机域名
+ Referer: 请求从哪发起的原始资源URI
+ User-Agent: 创建请求的用户代理名称
+ Cookie: cookie信息  

常见响应头

+ Location: 重定向地址
+ Server: 被请求的服务web server的信息
+ Set-Cookie: 要设置的cookie信息
  – NAME: 要设置的键值对
  – expires: cookie过期时间
  – path: 指定发送cookie的目录
  – domain: 指定发送cookie的域名
  – Secure: 指定之后只有https下才发送cookie
  – HostOnly: 指定之后javascript无法读取cookie
+ Keep-Alive:

HTTP协议初期每次连接结束后都会断开TCP连接,之后HEADER的connection字段定义Keep-Alive(HTTP 1.1 默认 持久连接),代表如果连接双方如果没有一方主动断开都不会断开TCP连接,减少了每次建立HTTP连接时进行TCP连接的消耗。

## Cookie/Session

+ Cookie: 工作机制是用户识别和状态管理,服务端为了管理用户的状态会通过客户端,把一些临时的数据写入到设备中Set-Cookie,当用户访问服务的时候,服务可以通过通信的方式取回之前存放的cookie。
+ Session: 由于http是无状态的,请求之间无法维系上下文,所以就出现了session作为会话控制,服务端存放用户的会话信息。

## HTTPs

概念:在http协议上增加了ssl(secure socket layer)层。

“`
    SSL层
      |
    应用层
      |
    传输层
      |
    网络层
      |
    链路层
      |
    实体层
“`

HTTPS 认证流程
“`

                              发起请求
                     —————————>  server
                              下发证书
                      <—————————   server
                      证书数字签名(用证书机构公钥加密)
                     —————————>  证书机构
                          证书数字签名验证通过
client(内置证书机构证书) <—————————   证书机构
                      公钥加密随机密码串(未来的共享秘钥)
                     —————————>  server私钥解密(非对称加密)
                        SSL协议结束 HTTP协议开始
                      <—————————   server(对称加密)
                            共享秘钥加密 HTTP
                     —————————>  server(对称加密)
“`

+ 核对证书证书: 证书机构的公开秘钥验证证书的数字签名
+ 公开密钥加密建立连接:非对称加密
+ 共享密钥加密

## Websocket

+ 基于http协议建立连接,header的upgrade字段转化协议为websocket
+ 全双工通信,客户端建立连接

## HTTP2

+ 多路复用:多个请求共享一个tcp连接
+ 全双工通信
+ 必须https://
+ 头部压缩
+ 二进制传输

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113826.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Ubuntu 12.04 下安装RabbitVCS

    Ubuntu 12.04 下安装RabbitVCSWindows下常用的SVN管理工具是TortoiseSVN,而它不支持Linux。如果你想在linux下也使用同样的图形化界面来管理SVN,那么RabbitVCS是一个不错的选择。它支持和TortoiseSVN同样的操作。Ubuntu 12.04下安装方法如下:官方的wiki上指出了安装方法:http://wiki.rabbitvcs.org/wiki/install/ubuntu…

    2022年7月18日
  • PyCharm + Anaconda + QT

    PyCharm + Anaconda + QT前言:我已经安装了Anaconda和Pycharm(教程网上有很多)配置过程:1、cmd中运行:pipinstallPyQt5-ihttps://pypi.douban.com/simple安装常用工具:pipinstallPyQt5-tools-ihttps://pypi.douban.com/simple然后,在D:\Anaconda3\Lib\site-packages路径下可以看到新安装的工具包和qt5:…

    2022年8月27日
  • MySQL索引及视图

    MySQL索引及视图MySQL索引及视图文章目录MySQL索引及视图索引设计索引的原则索引分类创建索引删除索引索引对数据查询的影响视图视图的作用创建视图使用视图检查视图查看视图的定义删除视图索引索引是一种特殊的文件(INNODB数据表上的索引是表空间上的一个组成部分),它们包含着对数据表里所有记录的引用指针.索引可以加快数据检索性能,但会使数据修改操作变慢,每修改一次数据记录,索引就必须刷新一次.另外,索引会在硬盘上占用相当大的空间.为了弥补这一缺点,许多SQL命令引入了delay_key_write项,.

    2022年7月22日
  • 交流转直流降压、稳压电路「建议收藏」

    交流转直流降压、稳压电路「建议收藏」目录目录降压稳压原理图设计思路电路图及原件原理图理解成果展示降压稳压原理图桥式整流电容滤波电路(最常用电路,本博客电路):全波整流电容滤波电路:-二倍压整流电容滤波电路:设计思路电路图及原件原件:PCB洞洞板、220V~12V变压器、7805稳压管、二极管*4、1000uF电解电容、10uF电解电容*2、…

    2022年6月20日
  • 远程控制木马原理_安卓远程控制木马

    远程控制木马原理_安卓远程控制木马 导读:刘东发(http://www.codelive.net)的杰作——–远程控制木马”偷窥者”VC6.0编译通过。2001年是中国的木马大丰收的一年. 首先是灰鸽子的诞生.灰鸽子早期版本开放源代码,灰鸽子的作者葛军(俺安徽的老乡,呵呵可不是拉关系),开始还倒不错,开放了源代码,后来功能齐全后,葛军开始翻脸了,不但不公开源代码,还收费.灰鸽子是delphi版的,本人愚

    2022年10月31日
  • all in all是什么意思啊_22449.1000安装失败

    all in all是什么意思啊_22449.1000安装失败apache 无法启动 (98)Address already in use: AH00072 make_sock: could not bind to address 0.0.0.0:80…

    2022年4月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号