热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络协议概念

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

## 概念

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的数据包
          -------------->
&#96;&#96;&#96;

TCP/IP finish: TCP/IP的四次握手:
&#96;&#96;&#96;
                          fin
                    <-------------
                          ack
client(或server)    -------------> server(或client)
                          fin
                    ------------->
                          ack
                    <-------------
&#96;&#96;&#96;

## HTTP 报文

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

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

### 请求报文Start Line

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

#### HTTP Method

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

### 响应报文Start Line

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

#### HTTP Status Code

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

### HTTP Header Fields

常见通用头部

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

常见请求头

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

常见响应头

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

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

## COOKIE/Session

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

## HTTPs

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

&#96;&#96;&#96;
    SSL层
      |
    应用层
      |
    传输层
      |
    网络层
      |
    链路层
      |
    实体层
&#96;&#96;&#96;

HTTPS 认证流程
&#96;&#96;&#96;

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

&#43; 核对证书证书&#xff1a; 证书机构的公开秘钥验证证书的数字签名
&#43; 公开密钥加密建立连接&#xff1a;非对称加密
&#43; 共享密钥加密

## Websocket

&#43; 基于http协议建立连接&#xff0c;header的upgrade字段转化协议为websocket
&#43; 全双工通信&#xff0c;客户端建立连接

## HTTP2

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



推荐阅读
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
author-avatar
旧情人旧往事_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有