HTTP协议 简介

时间:2022-11-25 07:57:28

HTTP协议 简介

HTTP概述

HTTP协议(Hypertext Transfer Protocol,超文本传输协议),是一个客户端请求和响应的标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可以从服务上取得所需要的网页信息。

通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫:请求协议;服务器发送给客户端的格式叫:响应协议

HTTP协议 简介

Respose Headers 是响应头;Request Headers 是请求头


浏览器中的书写格式

服务端资源需要通过浏览器进行,此时由浏览器将我们给出的请求解析为满足 HTTP 协议的格式并发出。 我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器中书写格式如下:

HTTP协议 简介

协议: http://;

地址: 127.0.0.1;  或 www.baidu.com  www.51cto.com 等;

端口: 8080; 默认是 80;

项目:myweb/;  项目目录;

页面: servlet01/ ; 具体的文件;

参数: name=zhangsan ;  

当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照 HTTP 协议进行解析获取到各个数据,最后按照特定格式展示给用户。


HTTP协议的特点

1)支持“客户/服务器”模式。

2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的 “GET、POST”。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

3)灵活: HTTP 允许传输任务类型的数据对象。传输的类型由 “Content-Type” 加以标记。

4)无连接: 无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

HTTP1.1 版本后支持可持续连接(keep-alive 长连接)。通过这种连接,就有可能在建立一个 TCP 连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应。通过把建立和释放 TCP 连接的开销分摊到多个请求上,则对于每个请求而言,由于 TCP 而造成的相对开销被大大地降低了。而且,还可以发送流水线请求,也就是说在发送请求 1 之后的回应到来之前可以送请求 2。也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

5)无状态:HTTP 协议是无状态协议。无状态是指协议协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须和重传,这样可能导致每次连接传送的数据量增大。另一个方面,在服务器不需要先前信息时它的应答就较快。


HTTP之URL

HTTP 是一个基于请求与响应模式的、应用层的协议,常基于 TCP 的连接方式,绝大多数的 WEB 开发,都是构建在 HTTP 协议之上的 Web 应用。

HTTP URL(URL是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息)的格式,如下:

http://host[:port]/[abs_pach]
http://IP(主机名/域名):端口/访问的资源路径

http:表示要通过 HTTP 协议来定位网络资源;

host:表示合法的 internet 主机域名或者IP地址;

port:指定一个端口号,为空则使用默认的端口 80;

abs_pach:指定请求资源的 URI;如果 URL 中没有给出 abs_path ,那么它作为请求 URI 时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。 


HTTP 请求

HTTP 请求由三部分组成,分别是:请求行、请求头、请求正文。

通过 chrome 浏览器,F12 -> Network 查看。 


Get请求(没有请求体)

GET请求,只有请求头和请求行;

HTTP协议 简介

上面方框是指请求行:  GET /s01/ser01?uname=zhangsan  HTTP / 1.1 ; 

请求行也有三个部分组成:请求方式 / 请求路径 / 请求协议版本

请求方式: GET

请求路径: /s01/ser01?uname=zhangsan;  如果是网站的根目录, 那就只有一个 / ; 

协议版本: HTTP / 1.1

下面方框是指请求头:都是由键值对组成的;


POST 请求

POST请求,包括 请求行、请求头和请求体;

HTTP协议 简介

请求行: POST /s01/ser01  HTTP / 1.1

请求行,同样也是三部分:请求方式,请求路径和协议版本;

请求头,也是有很多键值对组成;

请求体:这里的 Form Data 就是请求体;


格式

请求行
请求头1
请求头2
....
请求空行(看不到而已)
请求体

请求行以一个方法符号开头,以空格分开,后面跟着请求的 URI 和协议的版本。

请求行格式: Method Request-URI HTTP-Version CRLF

Method: 表示请求方法;

Request-URI: 是一个统一资源标识符;

HTTP-Version: 表示请求的HTTP协议版本;

CRLF: 表示回车换行;

请求头格式: 键: 值    冒号后有个空格;如:

Host: www.baidu.com                 -> 主机域名

Connection: keep-alive               -> 长连接(保持存活)

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36       -> 用户客户端浏览器信息 6 sec


HTTP响应

在接收和解释请求消息后,服务器返回一个 HTTP 响应消息。

HTTP 响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

HTTP协议 简介

状态行(响应行): HTTP/1.1 200 OK    有时候访问不到页面会显示: HTTP/1.1  404 Not Found

状态行也由三部分组成: 协议版本(HTTP/1.1)、状态码(200)、状态码说明(OK)

消息报头(响应头):键值对组成;

响应正文:就是看到的内容,Respones里面


格式

状态行(或叫响应行)
响应头1
响应头2
....
响应空行
响应体(response)

响应头(消息报头)的部分键值含义:

Content-Type: text/html; charset=utf-8                 -> 响应的数据类型和编码格式

Server: BWS/1.1                                                    -> 响应的服务器


消息头

HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。

请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行)消息报头(可选)空行(只有CRLF的行)消息正文(可选)组成。

每一个报头域都是由  名字+":"+空格+值  组成(就是常说的键值对),消息报头域的名字是大小写无关的。

请求头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

Referer:该请求头指明请求从哪里来。

如果是地址栏中输入地址访问的都没有该请求头,地址栏输入地址,通过请求可以看到,此时多了一个 Referer 的请求头,并且后面的值为该请求从哪里发出。比如:百度竞价,只能从百度来的才有效果,否则不算;通常用来做统计工作、防盗链

Referer: https://www.douban.com/      --> 表示当前页面是从豆瓣首页来的
// 当前面是:https://www.douban.com/note/809971804

当我们在这个页面中点了另外一个页面后:

Referer: https://www.douban.com/note/809971804   --> 表示当前页的上一页是这个
// 当前面是:https://www.douban.com/gallery/topic/3371433/

如果直接输入的地址,那就没有 Referer 了,因为他就是个初始入口;


响应头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对 Request-URI 所标识的资源进行下一步访问的信息。

Location: Location响应报头域用于重定向接受者到一个新的位置。Location 响应报送域,常用在更换域名的时候。

response.sendRedirect("http://www.baidu.com");

有些网站换成了域名,比如:从原来的 www.abc.com​​ 换成了 ​www.abc.cn​ ;访问前面域名后又掉到后个域名了;这就是重定向;

Refresh: 自动跳转或自动刷新本页(单位秒),可以在页面通过 meta 标签实现,也可在后台实现。

<meta http-equiv="refresh" content="3;url=http://www.baidu.com"

这个响应头的意思是,3秒后跳转到 百度;

<meta http-equiv="refresh" content="3"

如果不加地址,或者地址写自己的,那么 3 秒后就刷新自己;