HTTP 那些事

最近做项目的时候遇到一些关于HTTP的坑,现在又重新来补。希望对HTTP还没有头绪的少年们一些帮助,不说废话,走你~~

什么是HTTP?

超文本传输协议(HTTP--HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。【大白话就是计算机之间必须遵循的一种协议规则,彼此之间才能相互通信。以前只是电脑,现在手机,电视冰箱什么的只能终端都是可以的】

Http使用流程怎么样的呢?

Http客户端发起一个请求,创建端口

Http服务器在端口监听客户端请求

Http服务器向客户端返回状态和内容

例如:打开谷歌浏览器搜索一个网页

1. Chrome搜索自身的DNS缓存【看自身有木有缓存,然后看缓存有木有过期,网页查看方式:chrome://net-internals/#dns】

2. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)

3. 读取本地的HOST文件【HOST路径---C:\Windows\System32\drivers\etc】

4. 浏览器发起一个DNS的一个系统调用【一般都是宽带运营商提供的,】

    4.1 宽带运营商服务器查看本身缓存

    4.2 运营商服务器发起一个迭代DNS【从顶级到com域到官网域(注册商提供),找到之后,运营商服务器把结果返回操作系统内核同时缓存起来,操作系统内核把结果返回浏览器,最终浏览器拿到网页对应的IP地址】

5. 浏览器获得域名对应的IP地址后,发起HTTP  “三次握手”【浏览器随机端口向服务器web程序发送TCP连接请求,通过层层路由设备到网卡到内核TCP/IP协议栈、防火墙过滤最后到web服务端】

6. TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。比如:用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。

7. 服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果数据返回给浏览器,会把完整的HTML页面代码返回给浏览器。

8. 浏览器拿到网页完整HTML的页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都需要经过上面的主要七步骤。

9. 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现出来。

Http请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

 

关于Get与Post的区别:

GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
GET书签可收藏,POST为书签不可收藏。
GET能被缓存,POST不能缓存 。
GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

【来源于:https://sunshinevvv.coding.me/blog/2017/02/09/HttpGETv.s.POST/】

这里提到了http1.1,顺便说一下,http2.0与http1.1的主要区别~~

HTTP/2采用二进制格式而非文本格式

HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行

使用报头压缩,HTTP/2降低了开销

HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

http状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

 

常见的的状态码如下:



http协议的主要特点

简单快速,灵活,无连接,无状态。

简单快速:每个资源uri是固定的。访问那个资源输入那个uri。

灵活:通过一个HTTP协议可以处理不同数据类型。

无连接:连接一次会断掉。

无状态:客户端与服务端是两种身份,http建立连接。

HTTP content-type

MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来决定浏览器将以什么形式、什么编码读取这个文件。

这个也很常用比如:上传下传的会遇到坑,请求成功显示不出来或者请求错误的时候,确认一下自己的content-type是否对应。

格式:

1. 类型格式:type/subtype(;parameter)? type  

2. 主类型,任意的字符串,如text,如果是*号代表所有;   

3. subtype 子类型,任意的字符串,如html,如果是*号代表所有;   

4. parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数。

 例如: Content-Type: text/html;charset:utf-8;

常见的媒体格式类型如下:

·     text/html : HTML格式

·     text/plain :纯文本格式      

·     text/xml :  XML格式

·     image/gif :gif图片格式    

·     image/jpeg :jpg图片格式 

·     image/png:png图片格式

   以application开头的媒体格式类型:

·    application/xhtml+xml :XHTML格式

·    application/xml     : XML数据格式

·    application/atom+xml  :Atom XML聚合格式    

·    application/json    : JSON数据格式

·    application/pdf       :pdf格式  

·    application/msword  : Word文档格式

·    application/octet-stream : 二进制流数据(如常见的文件下载)

·    application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为         key/value格式发送到服务器(表单默认的提交数据的格式)

   另外一种常见的媒体格式是上传文件之时使用的:

·     multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

     以上就是我们在日常的开发中,经常会用到的若干content-type的内容格式。

关于content-type可查看【来源于:https://blog.csdn.net/qq_23994787/article/details/79044908】

猜你喜欢

转载自blog.csdn.net/qq_28004379/article/details/80237207