HTTP详解

 1.1什么是HTTP 

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

文本:html,字符串,.....

超文本:图片,音乐,视频,定位,地图....

这些东西都可以通过HTTP来传输

默认端口为80端口

HTTPS(安全的)

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

HTTPS默认端口为443端口。

1.2两个时代

http1.0

     HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接。例如我们访问百度www.baidu.com,服务器会返回百度的索引页给客户端。1.0版本的话我们获得索引页后即连接断开。如果还想继续获得需要再次发送请求。

http2.0

   HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源。

1.3HTT请求

客户端---发请求(Request)-----服务器

我们来以百度为例:

 我们进行查看Headers标签下的内容

Request URL: https://www.baidu.com/     #请求地址
Request Method: GET               #请求方法为get方法/post方法
Status Code: 200 OK              #状态码:200
Remote(远程) Address: 39.156.66.18:443
Referrer Policy(协议): strict-origin-when-cross-origin
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  #webp为微信里面图片在线的一个格式
Accept-Encoding: gzip, deflate, br  #类型的编码
Accept-Language: zh-CN(中文),zh;q=0.9  #语言
Connection: keep-alive  #保持连接



Cookie: PSTM=1654129451; BAIDUID=C8C34697078B901487230C19632BA24E:FG=1; BD_UPN=12314353; BIDUPSID=F288F1E299692C5E6BA8952D080EB81E; H_PS_PSSID=; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BAIDUID_BFESS=C8C34697078B901487230C19632BA24E:FG=1; ab_sr=1.0.1_Zjc4NTY3NjA0N2YwOThiYTQ1MGRmNjZmMDM4NjVhOWE0MjA2YjAwNTA1M2JjZDg1MTg3ZGMyN2Y2ZDUwZWUxYzg2NTFmYjZjMjg2YjQxZTI3M2ExOTZjNGFjZjRjNDliMDhmODJlMWRlMmU3ZTUxMmJiNjI2MTFmMzM3NjAyODNlYmQyZTE0Mzc1YmE0ZjQ0YzAyMGQ0Mjc1ZDc1YmUyMA==; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_645EC=f1b7d4gWIEUXZoHwHQwUAT0%2BgpVbKzAjJBsdjcuBzZjxgPWHCFTQLaEdiRq7uFJOFmtM2UKjzsk2Wg; baikeVisitId=a94e337d-a48c-475f-acbe-f6b6f7b48d43; COOKIE_SESSION=605_0_3_4_4_15_0_0_3_3_0_1_121_0_0_0_1654132441_0_1654132957%7C4%230_0_1654132957%7C1; BA_HECTOR=8g0h8k21a40k2004811h9g46v14; BDSVRTM=0; ZFY=kljkZvq8Dwv58DJLuuvM9aU09w8ZodKoWH8N:AxXJPN0:C  #Cookie内容
Host: www.baidu.com
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36

请求行

请求行中的请求方式:GET

请求方式:Get/Post,HEAD,DELETE,PUT,TRACT 

get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全但是高效

post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全但是不高效.

这两个的具体区别我们在初识javaweb_蕾峰的博客-CSDN博客里面进行了详细的讲解。

我们可以通过修改网速来体现高效:

我们将网速修改为Slow 3G,进行回车即可体现出速度来。

消息头

Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding:告诉浏览器,支持哪种编码格式 GBK UTF-8(正常数据库所用格式)  GB2312  ISO8859-1(java的默认编码)
Accept-Language:告诉浏览器,它的语言环境
Connection:告诉浏览器,请求完成是断开还是保持连接
Host: 主机
Cache-Control:缓存控制

1.4HTTP响应

服务器----响应(Response)----客户端

百度·

Bdpagetype: 1           #服务器固定返回来的,为了监控电脑。
Bdqid: 0xde92bd060018dee2  #服务器固定返回来的,为了监控电脑。

Connection: keep-alive     #JDBC里面的连接,保持连接,走的HTTP1.1.
Content-Type: text/html; charset=utf-8   #编码类型

Date: Thu, 02 Jun 2022 01:30:50 GMT   #当前的时间
Server: BWS/1.1    #浏览器的服务信息
Set-Cookie: BDSVRTM=27; path=/   #Cookie地址
Set-Cookie: BD_HOME=1; path=/    #Cookie地址
Set-Cookie: H_PS_PSSID=36464_36455_31253_36453_35915_36166_36487_36517_36530_36055_36519_26350_36301_36                                                                        
469_36311; path=/; domain=.baidu.com    #Cookie内容
Strict-Transport-Security: max-age=172800   #脚本安全,设置了一个最大的大小
Traceid: 1654133450035847476216038089056488840930
Transfer-Encoding: chunked
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1  #设置浏览器的响应兼容性

1.响应体:

Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding:告诉浏览器,支持哪种编码格式 GBK UTF-8  GB2312  ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Connection:告诉浏览器,请求完成断开还是保持连接
Host: 主机
Refresh:告诉客户端,多久刷新一次。
Location:让网页重新定位,
Cache-Control:缓存控制

2.响应状态码:(重要部分)

200:请求响应成功  200

3XX:请求重定向  307

重定向:客户端访问一个地址,服务器返回一个新的地址,让客户端重新去访问这个新的地址。

 4XX:找不到资源     404

资源不存在

 5xx:服务器代码错误    500   502(网关错误)所访问的服务器崩了,即会出现这个问题。

我们找到如下所示的网关界面:点击设置,搜索找到以太网,找到更改适配器选项。

 进入更改适配器选项后,右键点击以太网,点击属性。

找到TCP/IPv4协议,点击进入界面。

 进入界面后,看到默认网关里面,能够上网的配置的都是3网段,如果改成2网段,电脑会立马断网。如果使用的是无线连接,则没有网关。 

常见面试题:

当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示出来,经历了什么?

1.(域名解析)在客户端,浏览器输入地址后,首先会在windows系统文件的hosts中查找是否有对应的ip地址,如果没有则需要向DNS域名解析服务器询问该域名对应的ip地址。

2.获取相应的IP地址后,建立TCP连接,TCP三次握手。

第一次握手:客户端发送SYN(同步序列编号)包(seq=x)到服务器,并进入SYN-SENT状态,等待服务器的确认

第二次握手:服务器收到了SYN包为了确认客户端的SYN所以发送一个ACK(ack=x+1,已经收到序列号为j的数据包准备接受序列号为j+1的),同时自己也发送一个SYN包(seq=y,服务器的初始序列号),此时服务器进入了SYN-RECV状态。

第三次握手:客户端收到服务端的SYN+ACK包,向服务器发送确认包ACK(ack=y+1 seq=x+1),这个包发送完毕客户端和服务端进入ESTABLISHED状态,连接建立成功。

seq:用来标识在TCP发端到TCP收端发送的数据字节流,他表示在这个报文段中的第一个数据字节在数据流中的序号

ack:期待收到的下一个序号,一般是上次已经收到的字节加1.
3.(建立起TCP连接后发起http请求)客户端向服务器端发送请求,包含请求行,请求头。主要的两种请求方式(GET与POST)

-->GET:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据的内容,不安全,但高效。

-->POST:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。

4.(服务器响应http请求)服务器处理请求,并返回响应,包含状态码,响应头,响应体。

5(浏览器解析http代码)浏览器收到响应,解析http代码渲染页面,并在浏览器页面展示出来。

6.(断开连接)http1.0短连接,http1.1长连接。
 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值