打开百度,度娘告诉我javascript
http是一个简单的请求-响应协议,它一般运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及获得什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具备一个相似MIME的格式。这个简单模型是早期Web成功的有功之臣,由于它使得开发和部署是那么的直截了当
上面的描述可能过于专业术语了,简单的说,HTTP是一个约定协议规范,规范约定,客户端(Firefox、IE、 chrome)经过发起一个请求到服务端,服务端根据客户端的请求
返回对应的响应结果
。css
打个比方,咱们去零售店买东西,1块能够买棒棒糖,2块能够买果冻,五块能够买冰淇淋,我至关于客户端,售卖员至关于服务端,我对售卖员说(发起一个请求),给我来一个棒棒糖,顺带递给了他一块钱,售卖员根据个人描述和金钱,递给了我一个棒棒糖(响应),整个过程就是一个请求
-相应
的过程。html
上面的过程映射到咱们平常用浏览器(Chrome)打开一个百度页面搜索http
这个关键字,当咱们敲下回车键的同时java
chrome会向百度的服务器发起了一个请求,请求的资源路径为https://www.baidu.com/s?wd=ht... ,百度服务器根据咱们请求的关键字http
返回给咱们对应的搜索结果。web
说到HTTP就不得不说HTTP的产物URL,URL(Uniform Resource Locator,统一资源定位符) 其实就是咱们经常说的网址,好比www.baidu.com/s/a/v/s
,对于URL的格式,HTTP协议有相对应的规范设计chrome
协议 主机 端口 路径
上面简单的介绍了HTTP协议是什么,那么HTTP协议是如何工做的呢。首先你们须要知道的是,每个网址好比www.baidu.com
都是对外提供了一个端口来进行响应HTTP请求的,若是在请求的时候不声明端口,默认就是80端口,也就是说咱们常常请求的www.baidu.com
其实默认请求的是百度服务器的80端口,你也能够这样访问www.baidu.com:80
效果都是同样的。下面是具体的请求和响应的步骤json
咱们在客户端(浏览器)输入域名URL,回车请求数组
请求报文
响应报文
报文格式涉及到了两方面,请求报文格式和响应报文格式浏览器
请求报文也就是发起请求时的数据格式,当咱们用浏览器请求页面时,这个请求报文是由客户端帮咱们默认实现的tomcat
总体请求报文格式分为三大块,请求行,请求头部,请求数据
请求行
GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
请求头部,头部字段名:值 ,请求携带的头部信息,能够自定义,通常的头部信息包括,Host,User-Agent,Cookie,Accept等等
Accept,客户端可识别的类型,识别到对应的格式后,浏览器会对返回的数据作对应的处理,好比html就对数据作渲染,javascript就看成脚本语言来识别
GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi
响应报文格式就是服务端响应时的数据格式,当咱们在请求咱们的Servlet时,响应报文是由tomcat帮咱们默认实现的
与请求报文相似,响应报文主要包含,状态行,响应头部,响应主体内容
状态行
响应头部,响应头部主要是响应请求的描述信息,好比content_length表示响应内容的长度,content_type响应数据的格式,date响应时间等等
Content-Type,contentType是响应头部很重要的信息,浏览器经过contentType来识别当前服务端返沪ide响应内容的格式,
Set-Cookie,服务端在响应头部写入Set-Cookie,表示须要将当前Set-Cookie的值写入cookie,而且在下次请求的时候放入到请求头部带回服务端
Set-Cookie: userName=zhangsan; expires=Thu, 01-Jan-2020 00:00:01 GMT; path=/my 上面的头信息表示,将userName=zhangsan写入cookie, cookie的到期时间为2020年一月一日 path=/my,表示只有在请求/my,及/my的子目录的时带上这个cookie
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
在返回头的状态行的状态码表示当前请求结果的大体状态结果,状态码由三位数组成,常见的状态码有200,404,500,302等等,那么为何须要这么多状态码呢,主要是为了区分各类各样的状况,HTTP状态码的前第一位数表示表明了响应的五种状态之一
更多状态码的详细含义,https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660
知乎上有一个回答很形象,https://www.zhihu.com/questio...
HTTP是要基于TCP链接基础上的,简单的说,TCP就是单纯创建链接,不涉及任何咱们须要请求的实际数据,简单的传输。HTTP是用来收发数据,即实际应用上来的。
TCP是公路,HTTP是公路上跑的车。
因此,若是要把货物从a点运到b点,首先要在ab之间修路,这个工做由ip和tcp这俩伙伴完成(其实还有其它伙伴,但这俩出力最大,就由这俩代言了)。
路修好了之后,就能够“应用”了,公路应用于什么?固然是应用于车来车往了。跑啥车都行,好比跑http牌子的车,也能够跑mail牌的车
https://www.runoob.com/http/h...
https://baike.baidu.com/item/...
我曾在银色平原漫步也曾在青草之河垂钓
我便是平静的海面
又是汹涌的风暴
这片土地认识我