超文本&超链接&HTTP协议

超文本

所谓超文本,是指包含指向其他文档的链接的文本。
一个超文本由多个信息源链接而成,而这些信息源可以分布到世界各地,并且数目也不受限制。
超文本是万维网的基础。

HTTP协议概述

超文本传输协议。
HTTP的出现是为了接收和发布HTML页面,经过不断的发展也可以用于接收一些音频,视频,文件等内容。
HTTP协议定义了浏览器(万维网客户端进程)怎么样向万维网服务器请求万维网文档,以及服务器怎么样把文档传送给浏览器。它是万维网上能够可靠交换文件(包含文本、声音、图像等各种多媒体文件)的重要基础。
HTTP协议是面向事务的应用层协议。(事务:一系列的信息交换,是一个不可分割的整体。要么所有的信息交换都完成,要么一次交换都不进行。
HTTP协议是一个简单的请求-响应协议。是一个标准的客户端服务器模型。
是无状态的,应用层的协议。
常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议。如果承载与TLS或者SSL协议之上就是常说的HTTPS协议。
它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
其客户端的实现程序主要是Web浏览器,Web服务器需要监听TCP端口,使得客户端浏览器和Web服务器之间可以通过HTTP协议进行通信。
默认HTTP的端口号为80,HTTPS的端口号为443。

HTTP协议的无状态

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
HTTP 是一个无状态协议,这意味着每个请求都是独立的。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。

应用场景

最初主要是应用于WEB端内容获取,但随着互联网的发展更多的内容开始被展示,也有更复杂的交互场景,更复杂的排版。用户打开一个网站首页所加载的数据总量和请求的个数也在不断增加。
另一个广泛的应用是在移动互联网的客户端APP。

长连接&短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接(引入了Cookie技术),用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

// 不用声明:
Connection: keep-alive
 
// 发送关闭
Connection: close
// 要求服务器关闭TCP连接

HTTP请求的消息结构

我们可以把HTTP协议当做是一种客户端和服务器端相互沟通交流的语言,一个HTTP客户端在向服务器发送请求时会携带请求的消息,服务器端会根据客户端发送过来的请求消息了解客户端的需求,从而服务器端做出响应,发送响应消息给客户端。
一个请求消息是由请求行,请求头字段,一个空行和消息主体构成。

请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URL和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF

  1. Method:请求方法;
  2. Request-URI:统一资源表示符;
  3. HTTP-Version:请求的HTTP协议版本;
  4. CRLF:回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

常用的请求方法:

  1. GET :请求获取Request-URI所标识的资源。将请求参数追加在url后面,不安全;url长度限制get请求方式数据的大小;没有请求体。
  2. POST:在Request-URI所标识的资源后附加新的数据。请求参数在请求体处,较安全;请求数据大小没有显示;
  3. HEAD:请求获取由Request-URI所标识的资源的响应消息报头,HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
  4. PUT:请求服务器存储一个资源,并用Request-URI作为其标识,PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
  5. DELETE:请求服务器删除Request-URI所标识的资源。
  6. TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。
  7. CONNECT:保留将来使用。CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
  8. OPTIONS:用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

请求头字段

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
请求头从第二行开始,到第一个空格结束。请求头和请求体之间存在一个空格。

常用的请求报头:

  1. Accept:用于指定客户端接受哪些类型的信息(专业术语称为MIME 类型,MIME格式:大类型/小类型[;参数])。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。
  2. Accept-Charset请求报头域:用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
  3. Accept-Encoding:请求报头域类似于Accept,但是它是用于通知浏览器支持的数据压缩格式。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器,则假定客户端对各种内容编码都可以接受。
  4. Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
  5. Authorization请求报头域:主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
  6. Host(发送请求时,该报头域是必需的)请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。
  7. User-Agent:
    我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。
  8. Referer:表示这个请求是从哪个url跳过来的,通过百度来搜索淘宝网,那么在进入淘宝网的请求报文中,Referer的值就是:www.baidu.com。如果是直接访问就不会有这个头。no-referrer-when-downgrade表示从https协议降为http协议时不发送referrer给跳转网站的服务器。
    在这里插入图片描述
  9. Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭。
  10. Content-Length:请求体的长度。
  11. Cache-Control:指定请求和响应遵循的缓存机制。对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。eg:Cache-Control: no-cache。
  12. Status Code是状态码。
    请求消息举例:
    在这里插入图片描述
    在这里插入图片描述

请求体

当请求方式是post的时,请求体会有请求的参数。例如:username=zhangsan&password=123
在这里插入图片描述

HTTP响应消息结构

HTTP的响应报文也由三部分组成(响应行+响应头+响应体)。
在这里插入图片描述

响应行

  1. 报文协议和版本号
  2. 状态码以及状态描述:状态码由三位数字组成,第一个数字定义了响应的类别。
    1xx:指示信息,表示请求已接收,继续处理;
    2xx:成功,表示请求已被成功接受,处理。比如:
    200 OK:客户端请求成功
    204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
    206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容。
    3xx:重定向
    301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
    302 Found:临时重定向,表示请求的资源临时搬到了其他位置
    303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
    307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
    304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有。
    4xx:客户端错误
    400 Bad Request:客户端请求有语法错误,服务器无法理解。
    401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    403 Forbidden:服务器收到请求,但是拒绝提供服务
    404 Not Found:请求资源不存在。比如,输入了错误的url
    415 Unsupported media type:不支持的媒体类型
    5xx:服务器端错误,服务器未能实现合法的请求。
    500 Internal Server Error:服务器发生不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

响应头

  1. 响应报文头,响应头也是用键值对k:v来显示。服务器通过响应头来控制浏览器的行为,不同的头浏览器操作不同。
    在这里插入图片描述
    Content-Type详解:
    在这里插入图片描述

响应体

响应报文体,服务器发送给浏览器的正文。浏览器讲正文加载到内存,然后解析渲染,显示页面内容。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值