专业的编程技术博客社区

网站首页 > 博客文章 正文

HTTP协议浅谈(http协议上报)

baijin 2024-09-27 06:36:09 博客文章 5 ℃ 0 评论

HTTP协议,只要上网基本都会接触到的一个网络应用层协议,今天也就继续聊聊这个HTTP协议,巩固下对他的认识。

1、概念

HTTP协议中文翻译为超文本传输协议,在概念中提到3个词,超文本、传输、协议。简单聊下其中2个词超文本和协议。

超文本:

相对于普通文本(信息描述)来说,超本文多了一个重要的功能点:关联。网络上的文档通过超文本实现联系,各自可以跳转,慢慢从独立的点扩展为一个网,如下图。

所以在百度上的解释称 :超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联

在前端超文本的概念,我们可以简单理解为HTML中的a标签


协议

在计算机网络中,协议是指通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议很重要的一点就是定义了数据的封装。

2、协议特点

上面我们提到协议是一种规定,HTTP协议里就规定了怎么去获取资源和信息传输。

资源定位

资源的定位HTTP协议是根据URL(统一资源定位符(uniform resource locator;URL))来标识的,通过URL可以定位资源的网络位置

下图是URL的结构:

注意:

1、端口不说明是指80端口

2、Hash也称为锚点,可以通过锚点快速定位到文档节点(节点ID)

信息传输

HTTP传输的报文,不管是请求报文还是响应报文,格式都包含着起始行,请求头和请求体,如下

不同的是请求时,起始行是说明请求方法 请求路径 和协议版本

响应时,起始行是说明响应的状态编码

3、应用场景

防盗链

盗链的情况如下:

假设B站点作为一个商业网站,有很多自主版权的图片,自身展示用于商业目的。而A站点,希望在自己的网站上面也展示这些图片,直接使用图片地址 这样,大量的客户端在访问A站点时,实际上消耗了B站点的流量,而A站点却从中达成商业目的。从而不劳而获。这样的A站点着实令B站点不快的

为了防止这种行为,除了可以为资源增加权限验证(可能需要经过一层代码处理),另外一个方便的方法就是判断referrer返回403,这样子当外部网站使用我们的资源时就无法访问正常资源

当然这种方法很容易通过设置不传递referrer绕过 <meta name='referrer' content='no-referrer'>,可看具体情况使用。

POST数据格式

Post提交数据主要有三种,我们最常使用的是urlencoded,当上传文件时会使用form-data

对于JSON格式的,如果传递的数据带JSON格式,前端JSON.stringify后后端难解析,可以考虑通过json的数据格式,例子如下:

跨域

跨站点请求数据时,因为浏览器的同源策略,会禁止请求,也就是我们常说的跨域。

遇到跨域的情况下,可以通过CORS方案 通过设置Access-Control-Allow-Origin来允许跨域请求站点,有些特殊的报文如下:

请求报文

说明

Access-Control-Allow-Origin

可取为*表示允许任何站点

或直接写站点地址如:https://www.baidu.com

注:无法同时声明2个站点

Access-Control-Allow-Credentials

默认下跨站点访问是不带cookies,如果需要带cookies,可以按如下:

Access-Control-Allow-Origin不能为*

通过设置Access-Control-Allow-Credentials为 true

并在AJAX请求中打开withCredentials属性

Access-Control-Expose-Headers

如果跨域时需要附带一些特殊的请求报文头,需要通过该属性说明,如需要附带Toekn报文头时

Access-Control-Expose-Headers:Token

Access-Control-Allow-Methods

表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求

特别注意的是跨域的情况下有可能会有预检请求,此时在正式发送时会先发送OPTIONS请求,后端需要处理改请求,默认返回200,并返回允许跨域的报文(如上文档)即可

非下述情况就有可能发送预检请求

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表