啥都没说之网络篇-网站如何定位自己的位置的

啥都没说之网络篇-网站如何定位自己的位置的其实我们日常接触最多的就是网站了 了解了协议以后 自然要了解网站用到的是什么协议了 其实在浏览器访问网站的时候已经给出了提示 没错就是 HTTP 协议

大家好,欢迎来到IT知识分享网。

@人人能科普,处处有新知

您阅读本文如果觉得符合大人您的口味,请关注一下本君,避免下次想回顾的时候找不到我。创作不易,还请多多支持!点个关注和评论,说一下您的观点。

4.3 网站需要它

其实我们日常接触最多的就是网站了,了解了协议以后,自然要了解网站用到的是什么协议了,其实在浏览器访问网站的时候已经给出了提示,没错就是HTTP协议。

超文本传输协议HTTP,因为为HyperText Transfer Protocol。是互联网上应用最为广泛的一种网络协议。所有的WWW文件,或者说所有网站都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示,正常情况下文本先于图形等显示。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端/服务器模型,更严格的说,它的客户端得是一个浏览器。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443。HTTP协议永远都是客户端发起请求,服务器回送响应。以上的这些就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。HTTP协议还是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

一次HTTP操作称为一个事务,其工作过程可分为四步:

  1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

这里出现一个新东西:URL。

  • URI:A Uniform Resource Identifier,URI,是一个紧凑的字符串用来标示抽象或物理资源。
  • URL:Uniform Resource Locator,URL,是URI的子集, 标识资源的地址
  • URN:URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。

绝对URI格式:

URL格式 大多数URL协的语法都建立在下面9个部分构成的通用格式上: \<scheme>://\<user>:\<password>@\<host>:\<port>/\<path>;<params>?\<query>#\<frag>

其中最重要的3个部分是:方案(scheme)、主机(host)和路径(path)

|组件|描述|默认值| |:-:|:-|:-| |方案|访问服务器以获取资源时要使用哪种协议|无| |用户|某些方案访问资源时需要的用户名|匿名| |密码|用户名后面可能要包含的密码,中间由冒号分隔|E-mail地址| |主机|资源宿主服务器的主机名或点分IP地址|无| |端口|资源宿主服务器正在监听的端口号。很多方案都有默认端口号|每个方案特有| |路径|服务器上资源的本定名,由斜杠将其与前面的URL组件分隔开来。路径组件的语法是与服务器和方案有关。|无| |参数|某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们相互之间以与路径的其余部分之间用分号;隔。|无| |查询|某些方案会用这个组件传递参数以激活因公程序。查询组件的内容没有通用格式。用字符?将其与URL的其余部分分隔开来。|无| |片段|一小片或者一部分资源的名字。引用对象时,不会将frag字段传送给服务器。这个字段是在客户端内部使用的。通过字符#将其与URL的其余部分分隔开来。|无|

URL字符集

URL是可移植的:因为URL要统一地命名因特网上的所有资源,而不同的协议在传输数据时都会使用不同的机制,因此URL可以通过任意因特网协议安全地传输是很重要的。URL是可读的:因此,即使不可见、不可打印的字符能够穿越邮件程序,从而成为可移植的,也不能在URL中使用。URL是完整的:有时候人们会希望URL中包含除通用的安全字母表之外的二进制数据或字符。因此需要一种转移机制,能够将不安全的字符编码为安全字符,再进行传输。

为了避开安全字符集带来的限制,人们设计了“转义”表示法来表示不安全字符,其中包含一个百分号“%”,后面跟2个表示字符ASCII码的十六进制数。例如,~符号转义成%7E,%符号转义成%25,=符号转义成%3D。然而在URL中,有几个字符被保留下来,有特殊意义,不建议使用。如果要用于保留用途以外的场景时,要在URL中对其进行编码。

|字符|保留/受限| |:-|:-| |%|保留作为编码字符的转义标志| |/|保留作为路径组件中分隔路径段的定界符| |.|保留在路径组件中使用| |..|保留在路径组件中使用| |#|保留作为分段定界符使用| |?|保留作为查询字符串定界符使用| |;保留作为参数定界符使用| |:|保留作为方案、用户/口令,以及主机/端口组件的定界符使用| |$,+|保留| |@&=|在某些方案的上下文中有特殊的含义,保留| |{}|\^~[]’ <>”|由于各种传输Agent代理,比如各种网关的不安全处理,使用受限不安全;这些字符在URL范围之外通常是有意义的,所以应该对其进行编码。| |0x00-0x1F,0x7F|受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内。|

下面我们来看看一次完整的HTTP请求所经历的7个步骤:

  1. 建立TCP连接
  2. Web浏览器向Web服务器发送请求行
  3. Web浏览器发送请求头
  4. Web服务器应答
  5. Web服务器发送应答头
  6. Web服务器向浏览器发送数据
  7. Web服务器关闭TCP连接

现在就可以看看所谓的请求头和应答头长什么模样了。

请求报文包含四部分:

  • [x] 请求行:包含请求方法、URI、HTTP版本信息
  • [x] 请求首部字段
  • [x] 请求内容实体
  • [x] 空行

响应报文包含四部分:

  • [x] 状态行:包含HTTP版本、状态码、状态码的原因短语
  • [x] 响应首部字段
  • [x] 响应内容实体
  • [x] 空行

常见的首部:

通用首部字段(请求报文与响应报文都会使用的首部字段)

Date:创建报文时间 Connection:连接的管理 cache-Control:缓存的控制 Transfer-Encoding:报文主体的传输编码方式

请求首部字段(请求报文会使用的首部字段)

Host:请求资源所在服务器 Accept:可处理的媒体类型 Accept-Charset:可接收的字符集 Accept-Encoding:可接受的内容编码 Accept-Language:可接受的自然语言

响应首部字段(响应报文会使用的首部字段)

Accept-Ranges:可接受的字节范围 Location:令客户端重新定向到的URI Server:HTTP服务器的安装信息

实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)

Allow:资源可支持的HTTP方法 Content-Type:实体主类的类型 Content-Encoding:实体主体适用的编码方式 Content-Language:实体主体的自然语言 Content-Length:实体主体的的字节数 Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP请求方法:

|方法|描述| |:-:|:-| |GET|从指定的资源请求数据| |POST|向指定的资源提交要被处理的数据| |HEAD|与GET相同,但只返回HTTP报头,不返回文档主体。| |PUT|上传指定的URI表示。| |DELETE|删除指定资源。| |OPTIONS|返回服务器支持的HTTP方法。| |CONNECT|把请求连接转换到透明的TCP/IP通道。|

其中最常见的是GET和POST。

有关GET请求的其他一些注释:

  • GET请求可被缓存
  • GET请求保留在浏览器历史记录中
  • GET请求可被收藏为书签
  • GET请求不应在处理敏感数据时使用
  • GET请求有长度限制
  • GET请求只应当用于取回数据

有关POST请求的其他一些注释:

  • POST请求不会被缓存
  • POST请求不会保留在浏览器历史记录中
  • POST不能被收藏为书签
  • POST请求对数据长度没有要求

如果比较一下GET和POST两种HTTP方法: ||GET|POST| |:-|:-|:-| |后退按钮/刷新|无害|数据会被重新提交(浏览器应该告知用户数据会被重新提交)| |书签|可收藏为书签|不可收藏为书签| |缓存|能被缓存|不能缓存| |编码类型|
application/x-www-form-urlencoded|application/x-www-form-urlencoded或multipart/form-data。为二进制数据使用多重编码。| |历史|参数保留在浏览器历史中。|参数不会保存在浏览器历史中。| |对数据长度的限制|当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL的最大长度是2048个字符)。|无限制。| |对数据类型的限制|只允许ASCII字符。|没有限制。也允许二进制数据。| |安全性|与POST相比,GET的安全性较差,因为所发送的数据是URL的一部分。在发送密码或其他敏感信息时绝不要使用GET。|POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中。| |可见性|数据在URL中对所有人都是可见的。|数据不会显示在URL中。|

还有一个需要罗列一下的就是HTTP状态码

常见的HTTP相应状态码

200:请求被正常处理204:请求被受理但没有资源可以返回206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源301:永久性重定向302:临时重定向303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上304:发送附带条件的请求时,条件不满足时返回,与重定向无关307:临时重定向,与302类似,只是强制要求使用POST方法400:请求报文语法有误,服务器无法识别401:请求需要认证403:请求的对应资源禁止被访问404:服务器无法找到对应资源500:服务器内部错误503:服务器正忙

其实这么说下去,根本不知道都是什么意思,不如用两个图来表示,当然,这两张图是HTTP请求的头部。

第一张是HTTP请求消息:

第二张是HTTP应答消息,也就是HTTP状态响应信息:

这其中有一些头域稍微解释一下,每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符

  • host头域:Host头域指定请求资源的Intenet主机和端口号,必须表示请求URL的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
  • Referer头域:Referer头域允许客户端指定请求URI的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化Cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的URI没有自己的URI地址,Referer不能被发送。如果指定的是部分URI地址,则此地址应该是一个相对地址。
  • User-Agent头域:User-Agent头域的内容包含发出请求的用户信息,一般情况下是浏览器和操作系统信息。
  • Cache-Control头域:Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
  • Date头域:Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

行了,乱七八糟的HTTP知识就到这里吧,有点缺乏逻辑,越写越乱,不过要是参考请求和相应头部,似乎还能明白要说什么。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/145640.html

(0)
上一篇 2024-11-25 22:00
下一篇 2024-11-25 22:15

相关推荐

发表回复

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

关注微信