网站想自己做怎么弄,中国建设银行网站股份结构变化,上市公司,中国最好的猎头公司目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层#xff0c;因为其他层#xff1a;传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的#xff0c;我们只能使用… 目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层因为其他层传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的我们只能使用人家的。应用层我们可以使用别人已经创建好的协议(HTTP等)也可以自己定义应用层协议 自定义应用层协议要做的事情
1、明确前后端交互的过程中需要传递哪些信息
2、明确组织这些信息的格式前后端要是同一种方式
网络通信常见的数据格式有xml、JSON、yml
1、xml
采用成对的标签,类似于HTML,但是xml的标签可以自定义,例如 userID 1011 userID/
2、JSON
采用键值对的形式键和值使用冒号分开例如 {“userID”1011,“username”:“zhangsan”}
3、yml
强制了数据组织的格式要求键值对必须占据一行
DNS
DNS是一个应用层协议DNS就是域名解析系统。域名对应一个或者多个IP地址或者多个域名对应一个IP地址。由于IP地址不方便记忆并且不能显示地址组织的名称和性质人们设计出了域名并通过域名系统DNSDomain Name System来将域名和IP地址相互映射使人更方便地访问互联网而不用去记住能够被机器直接读取的IP地址数串把域名转换成IP地址这样的系统就叫域名解析系统。
当某个电脑需要进行域名解析直接会访问DNS服务器。全世界有非常多设备上网一个服务器是顶不住的所以有了镜像服务器。当服务器数据有变更只需要修改基准的服务器也叫根服务器其他镜像服务器从根服务器中同步数据。
HTTP/HTTPS
HTTP全称HyperTransferProtocol超文本传输协议这里的文本指的是字符串而超文本是在文本的基础上的扩展也就是说HTTP不仅可以传输文本也可以传输图片、音频等其他数据HTTP是最广泛使用的应用层协议。HTTPS可以认为是HTTP的升级版安全性比HTTP高。除了安全性外其他部分都是一样的。HTTP是一问一答模型的协议客户端发一个请求服务器就返回一个响应。
HTTP应用场景
1、使用浏览器打开网页
2、打开手机App加载相关的信息
3、服务器之间的调用大概率也是使用的HTTP
现在HTTP已经更新至3.0版本3.0基于UDP但是我们最常使用的还是HTTP/1.1(基于TCP)
HTTP协议报文
在学习HTTP协议报文格式前我们可以借助抓包工具来了解HTTP请求响应的详细情况。
选择Fiddler进行抓包
下载网址
选择Fiddler Classic 选择Try For Free
邮箱随便填一个国家随便填一个然后点击Download For Windows 打开软件后
点击Tools然后点击Options 点击HTTPS以上4个选项全部勾选
工具的使用
在使用前先选中左边ctrladelete清除列表 然后再随便打开一个网页在网页中点击刷新,这里拿CSDN网页举例
此时会显示抓取到的数据报列表双击CSDN的数据报列表
右上方部分是请求右下方部分是响应
选择Raw此时列出的是原始的HTTP请求
如果想要更清楚的观察可以点击View in Notepad在记事本中打开 但是响应的文本显示的是乱码因为这里的数据是压缩后的二进制数据 此时点击如下按钮即可
很容易发现响应其实就是HTML
HTTP协议的请求
1首行
GET https://www.csdn.net/ HTTP/1.1GET表示HTTP请求的方法(method) 中间部分是URL表示访问的资源HTTP/1.1指的是HTTP的版本是1.1版本
2请求头红框框部分
请求头的每一行都是一个键值对键和值用冒号分割。
3空行请求头的结束标记
4正文(body)
有的请求是没有body的有的有body
如抓取gitee HTTP请求的基本格式
HTTP协议的响应 1首行
HTTP/1.1 200 OKHTTP/1.1表示版本200表示状态码OK是状态码的描述
2响应头
响应头的每一行也是一个键值对键值对之间用冒号分割
3空行
4正文(body)
响应的正文通常是HTML、CSS、JS等
HTTP响应的基本格式
URL
URL是唯一资源定位符网络上的资源可以是一个网页、一个图片、一个文件
协议名://ip地址:端口号/带层次的路径/资源名称?查询字符串#片段标识符协议方案名指使用的是哪种协议
登录信息进行身份认证现在已经见不到了
服务器地址要访问的资源的服务器地址可以是IP也可以是域名
服务器端口号IP是确定唯一的主机端口号是确定主机上的程序如果不写端口号浏览器会根据协议类型自动分配端口如果是HTTP端口号是80如果是HTTPS端口号是443
带层次的文件路径确定服务器上的具体资源
查询字符串查询字符串是程序猿自定义的键值对结构是针对访问的资源进行补充说明键值对之间使用分割键和值之间使用分割等号两边不能有空格
片段标识符标识页面中的某个部分常见于文档类文件。例如某个文档网站中点开目录每个章节会对应一个片段标识符
URL encode
查询字符串是键值对结果但是它的值里面可能包含特殊符号而URL中有的特殊符号是有重要意义的如果值出现了特殊符号在解析的时候可能会出现问题所以需要转义URL encode的作用就是把这些特殊意义的字符进行转义。
例如在浏览器搜索c 此处把 字符转义成 %2B 了
转义规则把要转义的字符或者汉字每个字节以16进制的形式表示出来然后给每个字节前面加上%
例如在浏览器中搜索 你好复制地址栏的URL
得到如下内容
https://cn.bing.com/search?q%E4%BD%A0%E5%A5%BDqsnformQBREsp-1lq0pq%E4%BD%A0%E5%A5%BDsc10-2skcvidA7357277519D4F10A61D2542BB754587ghsh0ghacc0ghpl根据utf编码查得你好这两个字的16进制编码 HTTP的方法
方法描述了HTTP请求的动作想要干什么HTTP的方法如下
方法说明支持的HTTP协议版本GET获取资源1.0 、1.1POST传输实体主体1.0 、1.1PUT传输文件1.0 、1.1HEAD获取报文首部1.0 、1.1DELETE删除文件1.0 、1.1OPTIONS询问支持的方法1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINK断开连接关系1.0
常用的方法有GET、POST重点掌握这两个
**GET**直接在浏览器中输入一个URL就会触发GET请求
打开Fiddler在CSDN主页按住Ctrl点击刷新Fiddler会获取到如下的内容
这里说明了访问一个网页并不是一个HTTP请求就能完成的而是需要多个HTTP请求得到的结果。
上述带有csdn的都是这个页面触发的请求其实就是css文件、JavaScript文件、图片文件、字体文件等在你的浏览器第一次访问这个网页时会把这些资源保存到你的电脑上以后再访问的时候就不需要再次获取这些内容了这个机制就叫浏览器缓存这样的机制加快了页面展示速度节省服务器宽度。直接点击刷新是从缓存中读取数据按住Ctrl再点刷新可以强制忽略缓存重新从服务器读取数据。
POST
通常出现在登录、注册以及上传文件的场景
例如登录Gitee的请求
POST和GET的区别
首先这两个方法没有本质区别POST能用的GET也能用但是在使用习惯上有区别
1、语义不同一般来说GET用于表示从服务器获取数据POST表示提交数据给服务器。
2、传递数据的方式不同一般来说GET传递数据通过是通过query string把自定义的数据提交给服务器POST是通过body把自定义数据交给服务器。
3、GET方法对应的请求通常设计成幂等的POST方法对幂等性没有要求。幂等 是其任意多次执行所产生的影响均与一次执行的影响相同牛今天吃草今天挤出来的是奶明天吃草明天挤出来的也是奶结果非常稳定就是幂等的如果今天吃草今天挤出来的是史那就是不幂等。这个区别在今天不是非常合适了实际开发中还是需要看具体的业务要求但是http标准文档中建议这么做
4、GET如果设计成幂等性此时GET的结果可以缓存POST不设计成幂等性一般不会缓存
请求报头、响应报头(header)
header是键值对格式的常见的报头
1、Host
表示服务器主机的地址和端口
2、Content-Length、Content-Type
Length表示body中数据的长度单位字节Type表示body中数据的格式。如果请求、响应中没有body也就没有这两个字段。HTTP是基于TCP的1.1版本TCP是面向字节流存在粘包问题有了Length、Type就能知道HTTP数据包从哪开始从哪结束。Content-Length和Content-Type在响应和请求中都会存在
常见的Content-Type的取值
Content-Type:text/html;charsetutf8Content-Type:text/cssContent-Type: application/javascript;charsetutf8Content-Type: application/jason3、User-Agent
例如
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0主要包含了操作系统信息(版本)和浏览器信息(版本)表述了你用的什么设备上网
4、Referer
描述了当前页面是从哪个页面跳转过来的例如在搜狗搜索主页中搜索哔哩哔哩打开哔哩哔哩的主页 5、Cookie
Cookie也是键值对结构的使用分割键值对使用分割键和值键值对的含义是程序员自定义的 Cookie是浏览器给网站提供的一种“客户端存储数据”的机制
浏览器禁止网页直接访问咱们的硬盘但是浏览器允许网页通过键值对的方式存储数据这样的键值对数据是浏览器负责存储到咱们的硬盘中网页不能干涉。
浏览器在第一次访问某个网站时浏览器中可能没有Cookie服务器返回的响应会带有Set-CookieCookie中的键值对就会写到浏览器中浏览器收到Cookie就会存储到本地硬盘中。接下来浏览器访问网站时就会带有Cookie
如何查看Cookie 可以选择删除Cookie删除之后本地存储的Cookie也会删除掉在下一次访问这个网站时服务器返回的响应会带有Set-Cookie浏览器会根据这个重新存储Cookie。
总结
Cookie是什么
浏览器本地持久化存储数据的机制按照键值对方式存储键值对内容程序员可以自定义按照域名为维度分别进行存储每个网站都有自己的Cookie互不影响。
Cookie从哪里来
服务器返回的响应数据中会包含Set-Cookie字段。
Cookie到哪里去
Cookie虽然会存储到本地但是目的并不如此存储好之后后续浏览器再次访问同一个网站的服务器时会把之前存储的Cookie带上发送给服务器。为什么发回来还要再发回去Cookie中的数据在客户端中需要使用到在服务器这边也要使用到。
Cookie中存储的键值对是程序员自己定义的
Cookie经典使用场景
总结
常见的HTTP响应头属性
Content-Type: 指定返回的资源的MIME类型。Content-Length: 指定返回的资源的长度单位是字节。Cache-Control: 控制响应的缓存行为。Connection: 控制持久连接。Date: 消息发出的时间。ETag: 资源的版本/修订号。Expires: 资源的过期时间。Last-Modified: 资源最后被修改的时间。Server: 服务器软件名称。Set-Cookie: 设置客户端的cookie。WWW-Authenticate: 用于HTTP认证。Access-Control-Allow-Origin: 跨域资源共享CORS策略。X-Frame-Options: 控制资源是否可以在iframe中显示。Content-Disposition: 控制内容的下载方式。Content-Encoding: 指定内容的编码格式。Content-Language: 指定内容的语言。Content-Security-Policy: 定义了网页的资源加载策略。Strict-Transport-Security: 告诉浏览器仅通过HTTPS连接。X-Content-Type-Options: 防止MIME类型混淆攻击。X-XSS-Protection: 启用浏览器的XSS过滤和阻断功能。Location: 用于重定向的URL。Retry-After: 告诉客户端在多长时间后再次发起请求。Vary: 告诉缓存服务器何时需要重新请求。Accept-Ranges: 指定服务器是否支持范围请求。Allow: 指定允许的HTTP方法。Cross-Origin-Embedder-Policy: 控制跨源嵌入策略。Cross-Origin-Opener-Policy: 控制跨源窗口行为。Cross-Origin-Resource-Policy: 控制跨源资源的加载策略。
常见的HTTP请求属性
Accept: 客户端能够处理的媒体类型。Accept-Language: 客户端能够接受的语言。Accept-Encoding: 客户端能够接受的编码格式。Authorization: 客户端发送的认证信息。Cache-Control: 客户端的缓存指令。Connection: 控制持久连接。Content-Length: 请求体的长度。Content-Type: 请求体的媒体类型。Cookie: 客户端发送的cookie信息。Host: 请求的服务器域名和端口。Origin: 请求的源。Referer: 请求的来源URL。User-Agent: 客户端的用户代理信息。X-Requested-With: 通常用于标识Ajax请求。
请求头用于向服务器提供额外的信息以帮助服务器正确处理请求。
状态码
状态码表示访问一个页面请求是否成功以及请求失败的原因
常见的状态码
200 OK 表示成功
404 Not Found 表示浏览器根据url访问的资源在服务器上没有找到url的路径不对
403 Forbidden 访问被拒绝没有权限
405 Method Not Allowed 方法不支持
500 Internal Server Error 服务器内部错误一般是服务器端代码出bug抛出异常但是没有catch
504 Gateway Timeout 超时响应没有在规定时间内返回
302 Found 重定向访问A网站时会自动跳转到B网站此时响应中返回的状态码就是302并且在响应头中Location属性(包含B网站的地址)。浏览器收到302状态码后会自动跳转到Location中的网站。
构造HTTP请求
使用工具Postman下载链接 点击next 这样就可以自己构造HTTP请求了
HTTPS
HTTP协议内容是以文本的形式明文传输传输的数据容易被黑客、运营商劫持和篡改HTTPS在HTTP的基础上引入了加密机制解决了上述的问题。
明文传输的原始数据
密文对明文进行加密后的数据
加密明文–密文
解密密文–明文
密钥进行加密、解密的工具
对称加密加密和解密都使用同一个密钥
非对称加密使用一对密钥使用A加密就使用B解密使用B加密则使用A解密。这两个密钥一个公开一个私藏公开的叫公钥私藏的叫私钥。
关于HTTPS的工作过程
这里只介绍加密过程因为HTTPS是在HTTP基础上引入了加密机制其他内容都是一样的。
未加密客户端明文传输数据很容易被黑客入侵获取到请求的内容并进行篡改
1、引入对称加密 一个服务器对应多个客户端每个客户端的密钥都不同要求每个客户端连上服务器的时候自己随机生成一个对称密钥服务器拿到这个密钥才能进行解密因此密钥也需要进行传输。
但是密钥是明文传输的黑客很容易获取到密钥。
2引入非对称加密
通过非对称加密对要传输的密钥进行加密而传输的数据还是使用对称加密。 上述流程看似安全实则存在缺陷
3引入证书
问题的关键是能让客户端辨别出拿到的公钥是不是正确的。如何证明公钥是正确的引入第三方公证机构想搭建服务器使用HTTPS就需要在公证机构申请证书。申请证书时就要向机构提供信息网站的域名备案号公钥等公证机构根据这些信息生成一个证书(电子版)证书的内容包含了证书发布机构、证书有效期、公钥、证书所有者、签名等。签名则是保证证书合法性的重要内容。
服务器申请到证书后后续客户端从服务器拿公钥就不是拿公钥而是拿整个证书。客户端可以根据证书的签名来验证证书的合法性。
签名的生成校验和加密把证书中的所有字段综合在一起计算校验和然后公证机构生成一对公钥私钥公证机构持有私钥公钥分发给客户端公证机构拿着私钥对校验和进行加密得到数字签名。数字签名其实就是加密后的校验和。
客户端验证数字签名
1、客户端把证书中各个字段再计算一次校验和得到checksum1
2、客户端使用公证机构发的公钥对数字签名进行解密得到checksum2
3、比较如果checksum1checksum2证明当前证书和服务器发出的证书是一样的如果checksum1!checksum2说明证书的内容被黑客篡改过。
客户端手里的公证机构的公钥是操作系统内置的而不是通过网络获取的所以不存在公证机构的公钥是黑客伪造的。
另外黑客不能做到篡改数据后让数字签名解密出来的checksum1和篡改后的checksum2相等因为黑客篡改数据后需要使用公证机构的私钥来加密。如果黑客自己生成一个私钥这时客户端拿着公证机构的公钥也解密不了。
总结HTTPS工作流程
1、引入对称加密
2、传输对称密钥
3、对 对称密钥进行加密引入非对称加密
4、中间人攻击
5、引入证书解决中间人攻击