01_HTTP协议

前言

当前大部分的应用都是基于B/S架构的,而这其中主流的是基于http通信协议的。所以对于一个web开发者来说,http协议的重要性不言而喻。

1. 概述

HTTP协议是一种被大多数web应用程序所使用的的协议

  • HTTP 数据的收发是基于TCP/IP协议的
  • HTTP 数据主要是文本,虽然请求体中的中的数据可以是二进制的

两个步骤

  • 请求: 客户机向服务器请求文档。“文档”可以是任何类型的文件。
  • 响应: 服务器用请求的文档(或备用响应)响应客户机请求。

其整个知识点如下:
在这里插入图片描述

HTTP协议是web应用开发的基石

2. http请求与http响应

2.1 http请求

一个HTTP请求是纯文本内容的。它包含三个部分请求行、请求头、请求体
请求行:这个是http请求的第一行,整个请求行又分为三部分:URL,方法,版本

  • URL:代表请求的文档
  • 方法:有put, get, delete, head, options, post, tract, connect
  • 版本:该http请求使用http协议版本,一般有HTTP/1.0 或者 HTTP/1.1

请求头:允许额外信息的可选行。每一行都是名称-值对

空行:用于将正文与标题分开

请求体:可选字节(一般用来承担业务数据).

2.2 http响应

一个HTTP响应也是由文本行组成
状态行: 第一行,由三个空格分隔的元素组成。.

  • 版本: 响应的HTTP版本
  • 状态码: 一个三位数代码
  • 描述: 状态码的文本描述

响应头:允许在客户机和服务器之间交换数据的可选行。

响应体: 必须用空行与标题分隔的可选行

3. URL(scheme:[//[user:password@]host[:port]][/]path[?query][#fragment])

我们可以把因特网当做一个巨大的,正在扩张的城市。这个城市中所有的东西都应该有一个标准化的名字,以帮助人们能够很块的找到这个城市中的各种资源。当城市中的所有东西都认同并服从这个标准后,大家才能很方便的共享这座城市的资源了。

比如你需要你的朋友A帮你获取到位于xxx大道xxx街的xxx图书馆中二楼计算机室的xxx书架上的xxx书(标准化的名字)的时候。你的朋友A立即就知道你是什么意思了。

而URL就是因特网上的资源的标准化名称。

URL是统一资源定位符的缩写。它是一个具有特殊含义的字符串,其格式如下
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
可以看到整个URL分为以下七个部分

  1. scheme 指定该请求使用协议
  2. user:password 验证用户名和密码,由于安全原因,现在大多数系统已经不再支持这个了。
  3. host:需要请求的目标主机
  4. port:目标主机的端口
  5. path:目标资源在目标主机上的位置
  6. ?query:查询信息
  7. #fragment:锚点定位
3.1 协议(scheme)
  • 定义了URL余下部分的名称空间、用途和语法
  • 不区分大小写

比如你在浏览器地址栏中键入http://example.org:80,浏览器就会通过80端口向主机example.org发送HTTP请求。

如果你在浏览器地址栏中键入mailto:bob@example.com,那么浏览器就会向bob@example.com发送邮件来执行你的指令

再比如你在浏览器中键入ftp://IP/Download/,那么你的浏览器就可以通过ftp协议获取到这个ip指向服务器的资源。

3.2 主机(host)与端口(port)

URL的目标位置,相当于前面的拿书的那个例子中图书馆的位置信息(位于xxx大道xxx街的xxx图书馆)。

这一段字符串的作用是通过它能准确定位到因特网中某台主机。

host字段有两种:ip和域名
域名是ip地址的替代,浏览器会通过使用DNS来获取域名对应的IP地址。
IPV4: 32比特(4组,每组8比特)
IPV6: 128 比特

表示如果省略将接收请求的服务器应用程序,则使用特定于方案的默认值.
3000: HTTP Nodejs server
8080: HTTP Tomcat server
22: Secure Shell (SSH)
80: HTTP default
443: HTTP Secure (HTTPS)

3.3 路径(path)、查询字符串(?query)、锚点(#fragment)

路径:
资源的位置。相当于前面拿书的例子中图书在图书馆中的位置信息(二楼计算机室的xxx书架上的xxx书)
该字段区分大小写(有些服务器不区分大小写).

查询字符串:
还是用拿书的例子来说,比如需要的书有很多种版本(第一版、第二版之类的)。所以在后面加上一些信息(版本为第五版,封面为白色的)。
以?起头,后面跟上键值对,多个键值对之间以&符号区别。
举个例子

https://www.baidu.com/s?wd=htttp协议片段&rsv_spt=1&rsv_iqid=0xf5310479000d154e&issp=1&f=8&rsv_bp=1&rsv_idx=2

后边wd=htttp协议片段&rsv_spt=1&rsv_iqid=0xf5310479000d154e&issp=1&f=8&rsv_bp=1&rsv_idx=2就是查询字段。

锚点
拿前面的拿书的例子来说,如果我需要的东西只是书中的某一段怎么办,按道理是可以放在查询字段中的,但是它与普通查询字段有不一样,因为这时候书(资源)已经找到了。所以可以在后面在加上一个字段,专门用来定位的。

例子:
一个比较常见的例子就是百度百科最右边的目录
在这里插入图片描述

4. Http请求头

由于不能将所有的信息放在请求行中,那样会让请求行显得十分冗长。所以开辟一个空间用来携带额外的信息,那么这个空间就是http请求头。就我目前对http协议的理解,http请求头中的信息是用来描述本次请求以及期待响应的信息,并不涉及业务功能。比如Accept就是向服务器表明浏览器可以接受的文本类型。

由于是用来描述请求与期待响应的,所以请求头中信息的组织形式为键-值。

请求头中常用的键以及其意义

含义
Accept浏览器可以接受的文本类型
Accept-Charset浏览器需要的字符集(接触比较少)
Accept-Encoding浏览器接受的字符编码
Accept-Language浏览器接受的语言
Content-Length请求正文的长度
Content-Type请求正文的类型,文本、html等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值