HTTP协议

1.HTTP(超文本传输协议,Hypertext Transfer Protocol)

是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。

2.HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)

是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。

3.HTTP 工作原理

HTTP 协议工作于客户端-服务端架构上。(应用层)

HTTP 工作过程通常如下:

  1. 客户端发起请求:用户通过客户端(如浏览器)输入 URL,客户端向服务器发起一个 HTTP 请求。
  2. 服务器处理请求:服务器接收到请求后,根据请求的类型(如GET、POST等)和请求的资源,进行相应的处理。
  3. 服务器返回响应:服务器将处理结果包装成HTTP响应消息,发送回客户端。
  4. 客户端渲染页面:客户端接收到响应后,根据响应内容(如HTML、图片等)渲染页面,展示给用户。

Web 服务器有:Nginx 服务器,Apache 服务器,IIS 服务器(Internet Information Services)等。

HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。

4.HTTP 三点注意事项:

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

  • HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。

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

5.工作流程

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

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是

MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,

后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

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

HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通 信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的三次握手”。

TCP 三次握手之后,建立了 TCP 连接,此时 HTTP 就可以进行传输了。一个重要的概念是面向连接,既 HTTP 在传输完
成之间并不断开 TCP 连接。在 HTTP1.1 ( 通过 Connection 头设置 ) 这是默认行为。

6.http报文组成

HTTP请求报文由3部分组成(请求行+请求头+请求体):

在这里插入图片描述
下面是一个实际的请求报文1:

其中,①,②和③属于请求行;④属于请求头;⑤属于报文体

实例2:

GET /abdr?data=%7B%2qBERtcAmkB%2B%2FXvI786gGpZesvDAMZmnEfuo6RGD1yES4jUHe3ZkfhUujUy%22key_id%22%%3A2%7D&_=0.8572451124963135 HTTP/1.1
Host: miao.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
Accept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br, zstd
Referer: https://zhidao.baidu.com/question/723511025590340285.html
Connection: keep-alive
Cookie: BAIDUID=DC71F2A53F29AE6065A8B4ED0FA870F1:FG=1; 
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-site
Priority: u=5, i

分析:

1. 请求行
  • 方法GET

  • 路径/abdr?data=%7B%aPP22key_id%22%3A%225de04enc%22%3A2%7D&_=0.8572451124963135

  • HTTP版本HTTP/1.1

  • 路径分析:

    • data 参数是一个经过URL编码的JSON字符串,解码后可能包含一些加密或编码的数据。

    • key_id 和 enc 参数可能用于标识加密密钥或加密方式。

    • _ 参数通常用于防止缓存,值为一个随机数。

2. 请求头字段
  • Hostmiao.baidu.com

    • 指定请求的目标服务器。

  • User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0

    • 表示客户端使用的浏览器和操作系统信息。这里使用的是Firefox浏览器,运行在Windows 10系统上。

  • Acceptimage/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5

    • 表示客户端可以接受的MIME类型。优先接受image/avifimage/webpimage/pngimage/svg+xml,其次是其他图片类型,最后是任意类型。

  • Accept-Languagezh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    • 表示客户端优先接受简体中文(zh-CN),其次是其他中文变体(如繁体中文),最后是英文。

  • Accept-Encodinggzip, deflate, br, zstd

    • 表示客户端支持的压缩编码方式,服务器可以选择其中一种来压缩响应数据。

  • Refererhttps://zhidao.baidu.com/question/723511025590340285.html

    • 表示请求是从哪个页面发起的。这里是从百度知道的一个问题页面发起的请求。

  • Connectionkeep-alive

    • 表示客户端希望保持与服务器的连接,以便后续请求可以复用该连接。

  • Cookie:

    • 包含了一系列的Cookie信息,用于标识用户会话和其他状态信息。例如:

      • BAIDUIDBIDUPSIDPSTM 等是百度用于标识用户的Cookie。

      • BDORZ 是百度用于防止CSRF攻击的Cookie。

      • H_PS_PSSID 是百度用于标识用户会话的Cookie。

  • Sec-Fetch-Destimage

    • 表示请求的目标资源类型是图片。

  • Sec-Fetch-Modeno-cors

    • 表示请求的模式是“no-cors”,即不跨域资源共享(CORS)请求。

  • Sec-Fetch-Sitesame-site

    • 表示请求的目标站点与当前站点是同一个站点。

  • Priorityu=5, i

    • 表示请求的优先级,u=5 表示用户触发的请求,i 表示请求的资源类型是图片。

7.请求方法

序号方法描述
1GET从服务器获取资源。用于请求数据而不对数据进行更改。例如,从服务器获取网页、图片等。
2POST向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。
3PUT向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。
4DELETE从服务器删除指定的资源。请求中包含要删除的资源标识符。
5PATCH对资源进行部分修改。与 PUT 类似,但 PATCH 只更改部分数据而不是替换整个资源。
6HEAD类似于 GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。
7OPTIONS返回服务器支持的 HTTP 方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。
8TRACE回显服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。
9CONNECT建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。
GET POST 的区别:
1 GET 提交的数据会放在 URL 之后,以 ? 分割 URL 和传输数据,参数之间以 & 相连,如 EditPosts.aspx? name=test1&id=123456. POST方法是把提交的数据放在 HTTP 包的 Body 中。
2 GET 提交的数据大小有限制,最多只能有 1024 字节(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据没
有限制。
3 GET 方式需要使用 Request.QueryString 来取得变量的值,而 POST 方式通过 Request.Form 来获取变量的值。
4 GET 方式提交数据,会带来安全问题,比如一个登录页面,通过 GET 方式提交数据时,用户名和密码将出现在 URL
上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

8.HTTP 响应信息

客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有 的响应都有实体内容。


HTTP的响应报文也由三部分组成(响应行+响应头+响应体):

以下是一个实际的HTTP响应报文:

①报文协议及版本;
②状态码及状态描述;

(响应行)
③响应报文头,也是由多个属性组成;(响应头)
④响应报文体(响应正文)

常见状态码

200OK请求成功。一般用于GET与POST请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
500Internal Server Error服务器内部错误,无法完成请求

 9.常见相应头

以下是一些常见的 HTTP 响应头信息:

响应头信息(英文)响应头信息(中文)描述
Date日期响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT
Server服务器服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)
Content-Type内容类型响应体的媒体类型(MIME类型),如text/html; charset=UTF-8application/json等。
Content-Length内容长度响应体的大小,单位是字节。例如:3145
Content-Encoding内容编码响应体的压缩编码,如 gzipdeflate等。
Content-Language内容语言响应体的语言。例如:zh-CN
Content-Location内容位置响应体的 URI。例如:/index.html
Content-Range内容范围响应体的字节范围,用于分块传输。例如:bytes 0-999/8000
Cache-Control缓存控制控制响应的缓存行为, 如 no-cache 表示必须重新请求。
Connection连接管理连接的选项,如keep-aliveclose,keep-alive 表示连接不会在传输后关闭。。
Set-Cookie设置 Cookie设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure
Expires过期时间响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT
Last-Modified最后修改时间资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT
ETag实体标签资源的特定版本的标识符。例如:"33a64df551425fcc55e6"
Location位置用于重定向的 URI。例如:/newresource
Pragma实现特定的指令包含实现特定的指令,如 no-cache
WWW-Authenticate认证信息认证信息,通常用于HTTP认证。例如:Basic realm="Access to the site"
Accept-Ranges接受范围指定可接受的请求范围类型。例如:bytes
Age经过时间响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24
Allow允许方法列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等
Vary变化告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept
Strict-Transport-Security严格传输安全指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains
X-Frame-Options框架选项控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN
X-Content-Type-Options内容类型选项指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff
X-XSS-ProtectionXSS保护控制浏览器的 XSS 过滤和阻断。例如:1; mode=block
Public-Key-Pins公钥固定HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值