Http


1.1 什么是HTTP

HTTP(超文本传输协议):是一个简单的请求响应协议,它通常运行在TCP上。

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

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

  • 默认端口号:80

HTTPS(security):安全的

  • 默认端口:443

 


1.2 两个时代

  • http1.0

    • HTTP/1.0:客户端与web服务器连接后,一次请求只能获得一个web资源,想要获得多个web资源,需要多次请求。

  • http2.0

    • HTTP/1.1:客户端与web服务器连接后,一次请求可以获得多个web资源。减少请求的次数。

 


1.3 网站请求响应

General:

 Request URL: https://www.baidu.com/                 #网站域名
 Request Method: GET #请求方式
 Status Code: 200 OK #状态码
 Remote Address: 14.215.177.39:443 #远程地址
 Referrer Policy: strict-origin-when-cross-origin #协议

Request Headers:

 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
 Accept-Encoding: gzip, deflate, br
 Accept-Language: zh-CN,zh;q=0.9
 Cache-Control: max-age=0
 Connection: keep-alive
 Cookie: BAIDUID=653E8EDB284CCCFF51781E108BB738AE:FG=1; BIDUPSID=653E8EDB284CCCFF51781E108BB738AE; PSTM=1600873555; BDUSS=9GenhXR0RsMkRxd0MxZjdxWVZjM0l6VUJpWXZFTkJmbGxlWXFERDRNMHB0amhnRVFBQUFBJCQAAAAAAAAAAAEAAADqHgi4c3VwZXLEvrezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpEWApKRFgTE; BDUSS_BFESS=9GenhXR0RsMkRxd0MxZjdxWVZjM0l6VUJpWXZFTkJmbGxlWXFERDRNMHB0amhnRVFBQUFBJCQAAAAAAAAAAAEAAADqHgi4c3VwZXLEvrezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpEWApKRFgTE; BD_UPN=12314753; __yjs_duid=1_96b510c32700437405677586841a1e961619365097704; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=; BAIDUID_BFESS=653E8EDB284CCCFF51781E108BB738AE:FG=1; COOKIE_SESSION=86298_1_1_0_8_1_0_0_1_1_0_0_86375_0_77_0_1621683831_1621482886_1621683754%7C9%23352446_13_1621482876%7C8; delPer=0; BD_CK_SAM=1; PSINO=6; BD_HOME=1; H_PS_645EC=6f16EEfzE%2BmvEYHQjLCcTPJqfCh%2BzAZVEzBO0s%2FAxYKzGYUnEH3BqKvBd6Y; BA_HECTOR=a505ak81258g0g0gc11gajgfd0q
 Host: www.baidu.com
 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"
 sec-ch-ua-mobile: ?0
 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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

Response Headers:

 Bdpagetype: 2
 Bdqid: 0x8fd00336000308d7
 Cache-Control: private
 Connection: keep-alive
 Content-Encoding: gzip
 Content-Type: text/html;charset=utf-8
 Date: Sun, 23 May 2021 02:46:44 GMT
 Expires: Sun, 23 May 2021 02:46:44 GMT
 Server: BWS/1.1
 Set-Cookie: BDSVRTM=360; path=/
 Set-Cookie: BD_HOME=1; path=/
 Set-Cookie: H_PS_PSSID=; path=/; domain=.baidu.com
 Strict-Transport-Security: max-age=172800
 Traceid: 1621738004045655297010362786273042827479
 Transfer-Encoding: chunked
 X-Ua-Compatible: IE=Edge,chrome=1

 

请求中的请求方式:GET POST ......

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

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

 

响应状态码:

  • 200:请求成功。

  • 3xx:请求重定向,到新的位置去。

  • 4xx:路由错误,找不到资源。

  • 5xx:服务器代码错误, 502:网关错误。

 

面试题:

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

作为客户端,浏览器接收到地址之后,首先会到windows系统文件hosts中查找是否有需要劫持的ip地址,若没有则需要询问DNS域名解析服务器该域名对应的ip地址。(DNS缓存) 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存

获取到正确的ip地址后,客户端会与服务器建立TCP连接(三次握手),(网络层、数据链路层、物理层)

客户端向服务端发送请求,包含请求行、请求头、请求正文。多种请求方式(GET,POST、PUT等)

服务端处理请求,并返回响应,包含状态码、响应头、响应体

浏览器收到响应,解析渲染页面,展示出来

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