您的位置:首页 > 文旅 > 美景 > 免费推广论坛_网络架构怎么看_搜索引擎优化的目的是_seo三人行论坛

免费推广论坛_网络架构怎么看_搜索引擎优化的目的是_seo三人行论坛

2024/12/23 14:01:42 来源:https://blog.csdn.net/2203_75565612/article/details/142879685  浏览:    关键词:免费推广论坛_网络架构怎么看_搜索引擎优化的目的是_seo三人行论坛
免费推广论坛_网络架构怎么看_搜索引擎优化的目的是_seo三人行论坛

目录

HTTP协议

1.HTTP是什么?

2.Fiddler抓包查看HTTP协议格式

3.HTTP请求

4.HTTP响应


HTTP协议

1.HTTP是什么?

HTTP ( 全称为 " 超文本传输协议 ")   诞生与 1991 . 目前已经发展为最主流使用的一种应用层协议 .
HTTP 的前几个版本均基于传输层的 TCP 协议实现 . (HTTP1.0, HTTP1.1, HTTP2.0 均为 TCP, HTTP3 基于 UDP实现)。目前市面上主要使用的是HTTP1.1和HTTP2.0,最新的HTTP3.0正在完善中,Google/Meta等公司的产品已经开始支持了。
  • 当我们在浏览器中输入一个 搜狗搜索的 "网址" (URL) , 浏览器就给搜狗的服务器发送了一个 HTTP 请求, 搜狗的服务器返回了一个 HTTP 响应.
  • 这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片, 字体等信息).
  • 所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据

 

       前面我已经分享过TCP/IP协议的运行机制,主要是通过IP+Port(地址+端口号)来解决数据在客户端和服务器之间传输路径选择的问题,当我们把数据从A点传输到B点,还需要保证A,B双方都能对数据准确解读,以保证双方对数据的正常使用,这时我们就需要应用层协议了,这也是HTTP协议主要做的事。

2.Fiddler抓包查看HTTP协议格式

Fidder是开发者常用的抓包工具,用来获取HTTP请求和响应。

Fiddler 相当于一个 "代理". 浏览器访问 sogou.com , 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器. 因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的.

 

 下图所示便是Fiddler的主页面:

 我们能清楚的看到HTTP请求和响应的格式

请求格式:

  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

响应格式:

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

 

 http协议中的空行用来表示请求报头的结束标记。相当于报头和正文的分隔符。

3.HTTP请求

请求方法(Method) 

  • GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源。
  • POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面)。
  • PUT POST 相似,只是具有幂等特性,一般用于更新。
  • DELETE 删除服务器指定资源。
  • OPTIONS 返回服务器所支持的请求方法。
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头。
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个。
  • CONNECT 预留,暂无使用。

 

URL的基本格式

URL 的详细规则由因特网标准RFC1738进行了约定,如下所示:

但是实际上具体的URL网址对有些信息进行了省略。 

https://v.baidu.com/personInf/student?userId=10000&classId=100

 上面是一个具体的URL网址信息。

  • https: 协议方案名. 常见的有 http https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:mysql )。
  • user:pass: 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略。
  • v.baidudu.com: 服务器地址. 此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址
  • 端口号: 上面的 URL 中端口号被省略了. 当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口。
  • /personInf/student: 带层次的文件路径。
  • userId=10000&classId=100: 查询字符串(query string). 本质是一个键值对结构. 键值对之间使 & 分隔. 键和值之间使用 = 分隔.
  • 片段标识: URL 中省略了片段标识. 片段标识主要用于页面内跳转。

在URL中像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下 : 将需要转码的字符转为 16 进制,然后从右到左,取 4 ( 不足 4 位直接处理 ) ,每 2 位做一位,前面加上% ,编码成 %XY 格式。即URLencode。

 

请求报头(header)

header 的整体的格式也是 " 键值对 " 结构 . 每个键值对占一行. 键和值之间使用分号分割。

下面介绍一些常见的报头种类和含义:

  • Host:表示服务器主机的地址和端口。
  • Content-Length:表示 body 中的数据长度。
  • Content-Type:表示请求的 body 中的数据格式。
  • User-Agent (简称 UA):表示浏览器/操作系统的属性。
  • Referer:表示这个页面是从哪个页面跳转过来的。
  • Cookie:Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)。

4.HTTP响应

响应状态码

HTTP状态码表示访问一个页面的结果 . ( 是访问成功 , 还是失败 , 还是其他的一些情况 ...)。
想必大家肯定遇到访问一个网页结果返回结果是404的情况吧。

 

  • 200 OK: 这是一个最常见的状态码, 表示访问成功.
  • 404 Not Found:没有找到资源.
  • 403 Forbidden:表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.
  • 405 Method Not Allowed:前面我们已经学习了 HTTP 中所支持的方法, GET, POST, PUT, DELETE . 但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法).
  • 500 Internal Server Error服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码.
  • 504 Gateway Timeout :当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况.
  • 302 Move temporarily :临时重定向. 在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页. 响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面.
  • 301 Moved Permanently :永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.301 也是通过 Location 字段来表示要重定向到的新地址.

在网上看到过一幅很形象概括HTTP状态码的图:

 

响应报头(header)

响应报头的基本格式和请求报头的格式基本一致。
类似于 Content - Type , Content - Length 等属性的含义也和请求中的含义一致。
响应中的 Content-Type 常见取值有以下几种 :
  • text/html : body 数据格式是 HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com