HTTP协议

前言:OSI七层模型

 应用层的协议:HTTP协议,HTTPS协议,DNS协议,TELNET协议,FTP协议,SMB协议,RDP协议

传输层的协议:例如TCP、UDP、RTP、SCTP、SPX、ATP、IL

网络层的协议:例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25  

数据链路层的协议:主要是一些MAC子层协议,例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP

物理层:这一层主要说的是电信号,例如线路、无线电、光纤、信鸽

Socket在哪一层:应用层和传输层之间

TCP和UDP区别:

主要理解就是TCP是可靠传输,UDP是不可靠传输;TCP在接到响应收到后,才会发送下一条数据;UDP则不会关注接受端是否接收到数据;TCP应用于需要高可靠的场景下,如打电话,而UDP则是需要保证传输速率的场景,如视频,游戏等,我们游戏中所称的画面"闪现"就是由于UDP传输过程中,网络不稳定导致接收端没有接收到数据引起的。

一.HTTP概念:

  • HTTP协议全称超文本传输协议,是基于TCP/IP协议之上的应用层协议,是基于请求-响应的通信模式

在浏览器地址栏键入网址,按下回车之后会经历以下流程:

1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2. 解析出 IP 地址后,根据该 IP 地址和HTTP协议默认端口 80,和服务器建立TCP连接;

3. 浏览器发出读取服务端资源的HTTP请求,比如请求一个网站页面,我们知道我们在浏览器上看到的每一个 页面其实都是对应着服务端的某个HTML代码文件

4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5. 客户端收到数据之后释放TCP连接;

6. 浏览器将该html文件代码程序解析执行,展示页面效果;

HTTP协议特点:

  • 无状态保存:

HTTP协议是无状态的,即服务器不会保留客户端的状态信息。每个请求都是独立的,服务器不会记住之前的请求。这导致服务器无法区分不同的客户端,需要使用其他机制(如Cookie)来维护状态。

  • 无连接:

HTTP协议是无连接的,即每个请求和响应都是独立的,服务器不会保留客户端的状态信息。这意味着每个请求都需要建立一个新的连接,处理完后立即关闭连接,节省了服务器的资源。

二:请求数据格式:

  • 格式分为:请求行、请求头、空行、请求数据(请求正文、请求体)
  • 图形化说明:

 举例:

GET /?tn=85070231_25_hao_pg HTTP/1.1
Host: 网址或IP
Cookie: *****
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
  • 请求行中的URL:包含两个内容路径URI+查询参数
  • 请求方法:

一般: POST、GET、HEAD、PUT、PATCH、OPTIONS、DELETE、CONNECT、TRACE

常用: GET、POST、PUT、DELETE

最常用: GET、POST

  • GET和POST区别:

1.GET请求用于向服务端获取数据;POST请求用于向服务端提交数据,主要用于添加数据,但是在很多公司的项目中,更新和删除数据也都在使用 post请求。如果按照restful规范来说的话,更新数据用put\patch方法,删除数据用delete方法。

2. 数据所在位置不同,能携带的数据长度不同 由于get方法携带的数据在url上,那么携带的数据大小就有长度限制了,因为url长度有上限,比如IE 限制url长度不能超过2083个字符,不同浏览器上限不同,但是都有上限。RFC 标准明确说明,不对URL进行 长度限制,但是浏览器一般都会做限制。 post方法携带的数据在请求数据部分,理论上是没有大小限制的 但是其实get请求的也是可以在请求正文的地方来携带数据的,只是一般都不这样用而已,所以即便是看 到了这样的情况,也不要感觉意外。

3. 安全性不同 由于get方法携带的数据在url上,那么数据就会在浏览器地址栏显示出来,如果没有对数据进行加密的 话,直接就可以在地址栏看到明文信息,安全性低  HEAD 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的 好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元 信息或称元数据)。 PUT 向指定资源位置上传其最新内容,主要用于上传文件、更新整体数据。 PATCH 用来更新局部资源 DELETE 请求服务器删除请求所标识的资源。 

4. 使用场景不同 post请求多用于给服务端提交数据,比如注册、上传文件、提交评论、修改密码等等 get请求多用于去服务端获取数据,查看商品信息、查看个人信息等等 敏感数据操作的场景都使用post,比如登录注册等场景一般都使用post,因为最起码数据隐蔽一些。

5. 可传输的数据格式不同 GET只能传输文本数据 POST可以传输文本和二进制数据 但是其实GET完全可以传输文本和二进制数据,只需要对二进制数据urlencode即可,也就是URL编码一 下。

6. 幂等性不同 GET 请求的处理,实现成"幂等"(不管操作多少次,实现的都是相同的结果:如查询,删除等,就属于幂等)的 POST 请求的处理,不要求实现"幂等"。

  • 常见的HTTP请求头
  1. Accept:指定客户端能够接受的响应内容类型,使用MIME类型来表示。

  2. Accept-Charset:指定客户端能够接受的响应内容的字符集。

  3. Accept-Encoding:指定客户端能够接受的响应内容的压缩编码方式。

  4. Accept-Language:指定客户端能够接受的响应内容的语言。

  5. Authorization:用于在请求中发送身份验证凭据,通常是用户名和密码的Base64编码。

  6. Cache-Control:指定请求和响应的缓存行为。

  7. Connection:指定是否保持持久连接。

  8. Content-Length:指定请求体的长度。

  9. Content-Type:指定请求体的媒体类型。

  10. Cookie:用于在请求中发送服务器保存的cookie。

  11. Host:指定目标服务器的主机名和端口号。

  12. If-Match:指定条件请求的匹配标头。

  13. If-Modified-Since:指定条件请求的修改时间标头。

  14. If-None-Match:指定条件请求的非匹配标头。

  15. If-Range:指定条件请求的范围标头。

  16. If-Unmodified-Since:指定条件请求的未修改时间标头。

  17. Origin:指定请求的来源。

  18. Referer:指定请求的来源页面。

  19. User-Agent:标识客户端的用户代理软件,通常是浏览器的名称和版本号。

三.响应数据格式:

  • 格式:响应行、响应头、空行、响应数据(响应正文或者响应体) 
  • 图形化说明

  •  举例:
HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0x8b0ad00700011615
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Wed, 02 Aug 2023 15:39:27 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=54; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1690990767033350529010019049049522509333
X-Ua-Compatible: IE=Edge,chrome=1
Connection: close
Content-Length: 387422

<!DOCTYPE html></html>
  • 状态码:由3为数字组成,五大分类 

1xx消息——请求已被服务器接收,继续处理

2xx成功——请求已成功被服务器接收、理解、并接受

3xx重定向——需要后续操作才能完成这一请求

4xx客户端请求错误——请求含有词法错误或者无法被执行

5xx服务器错误——这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误是服务器本身的错误,而 不是请求的错误

  • 常见响应头:
  1. Access-Control-Allow-Origin:指定允许访问资源的域名。

  2. Cache-Control:指定响应的缓存行为。

  3. Content-Encoding:指定响应内容的压缩编码方式。

  4. Content-Length:指定响应内容的长度。

  5. Content-Type:指定响应内容的媒体类型。

  6. Date:指定响应的日期和时间。

  7. ETag:指定响应内容的实体标签,用于缓存验证。

  8. Expires:指定响应内容的过期时间。

  9. Last-Modified:指定响应内容的最后修改时间。

  10. Location:指定重定向的目标URL。

  11. Server:指定响应的服务器软件。

  12. Set-Cookie:用于在响应中设置cookie。

  13. Strict-Transport-Security:指定使用HTTPS访问的严格传输安全策略。

  14. Vary:指定响应内容的变化因素,用于缓存控制。

  15. X-Content-Type-Options:指定响应内容的类型选项。

  16. X-Frame-Options:指定响应内容的嵌入选项。

  17. X-XSS-Protection:指定响应内容的跨站脚本攻击保护选项。

四.HTTP和HTTPS区别:

  1. 安全性:HTTP是明文传输的协议,数据在传输过程中不加密,容易被窃听和篡改。而HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密,确保数据在传输过程中的安全性和完整性。

  2. 数据传输方式:HTTP使用TCP(Transmission Control Protocol)作为传输协议,数据传输是明文的,不进行加密。而HTTPS在HTTP的基础上加入了SSL/TLS协议,使用加密的SSL/TLS连接进行数据传输。

  3. 端口号:HTTP默认使用80端口进行通信,而HTTPS默认使用443端口进行通信。

  4. 证书:HTTPS需要使用SSL/TLS证书来验证服务器的身份,并确保通信的安全性。这些证书由受信任的第三方机构颁发,用于证明服务器的身份和加密通信。

  5. SEO影响:搜索引擎通常更喜欢使用HTTPS网站,因为HTTPS提供了更高的安全性和数据完整性,可以提升网站的排名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值