HTTP相关问题总结

一、HTTP请求报文格式

在这里插入图片描述
首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度;
在这里插入图片描述

1. 请求行(首行)

包括:http请求方法 + http请求URL + http版本号

(1)http请求方法

在这里插入图片描述

补充:GET方法和POST方法区别
在这里插入图片描述

(2)http请求URL

浏览器输入url:具体访问url网站的协议,需要查看(网站可以提供http/https协议的服务,不输入协议头,也可以访问,是因为客户端浏览器+系统和服务端服务器帮助我们自动设置好了)
在这里插入图片描述
在这里插入图片描述
url编码(urlencode) 和url解码(urldecode) :如上图中输入中文或特殊字符等,在浏览器即便看到是原始的中文,发送的数据实际会进行编码处理。

(3)http版本号(1.0/1.1/2.0)

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1. 1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。主要区别主要体现在:

1.缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存 判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodifed-Since, If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。
2.带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象, 例如客户端只是需要某个对象的一部分, 而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
3.错误通知的管理,在HTTP1.1中新增 了24个错误状态响应码,如409 (Conflict) 表示请求的资源与资源的当前状态发生冲突; 410 (Gone) 表示服务器上的某个资源被永久性的删除。
4. Host头处理,在HTTP1 .0中认为每台服务器都绑定一个唯一 的IP地址, 因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed
WebServers),并且它们共享- 一个IP地址。 HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误 (400 Bad Request)
5.长连接,HTTP 1.1支持长连接(PersistentConnection) 和请求的流水线(Pipelining) 处理,在一个TCP连接 上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,- -定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

补充:HTTPS与HTTP的区别

  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。 HTTP协议运行在TCP之上,所有传输的内容都是明文。
  • HTTPS运行在SSL/TLS之 上, SSL/TLS运行在TCP之上,所有传 输的内容都经过加密的。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

2. Header报头

Content-Type: 数据类型(text/html等); 响应报头
Content-Length: Body的长度; 请求报头和响应报头
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; 请求报头
User-Agent: 声明用户的操作系统和浏览器版本信息; 请求报头
referer: 当前页面是从哪个页面跳转过来的; 请求报头
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问; 响应报头
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能; 请求报头和响应报头

3. 请求体(请求正文)

请求体的格式:键1=值1&键2=值2
get请求的数据,是放在url上
post请求的数据,可以放在url上,也可以放在请求体

二、HTTP响应报文格式

在这里插入图片描述
首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.
在这里插入图片描述

1. 响应行(首行)

状态码

1xx表示通知信息,如请求收到了或正在进行处理。
2xx表示成功,如接受或知道了。
3xx表示重定向,如要完成请求还必须采取进一步的行动。
4xx表示客户的差错,如请求中有错误的语法或不能完成。
5xx表示服务器的差错,如服务器失效无法完成请求。

下面几种状态行在响应报文中是经常见到的。

200 ok {请求被成功处理}
202 Accepted {接受}
301 Moved Pe rmanently {永久性地转移了}
302 Found {临时性重定向}
400 Bad Request {请求中的语法错误}
403 Forbidden {该状态码表明对请求资源的访问被服务器拒绝了}
404 Not Found {找不到}
500 Internal Server Error {服务器端在执行请求时发生了错误}
502 Bad Gateway {服务器网关错误}
503 Service Unavailable {服务器暂时处于超负载或正在进行停机维护,现在无法处理请求}

Z06
发布了35 篇原创文章 · 获赞 5 · 访问量 1670

猜你喜欢

转载自blog.csdn.net/Chakra_Z06/article/details/105684442
今日推荐