小言_互联网的博客

一篇文章弄懂web的请求过程

405人阅读  评论(0)

如何发起一个http连接?

http连接与socket连接区别不大,只不过outputStream write写的数据需要符合http.在建立socket之前,必须根据地址栏里的url的域名DNS解析出ip地址,然后根据IP地址和端口号(没有端口号默认为80端口)建立socket。然后浏览器根据url发送一个get或者post类型的http请求头,通过outputStream write发送到目标服务器,等待服务器通过inputStream read返回数据,最后断开这个连接。
由此可以看出:HTTP是应用层协议,基于TCP协议,HTTP 是短链接

如何发起一个HTTP请求:

  • 使用各种浏览器,在地址栏输入url
  • 通过Java的httpClient进行url的请求
  • 使用Linux curl命令 通过curl + URL发起HTTP请求

Http解析:

B/S架构的核心就是HTTP,要理解HTTP,最重要的就是熟悉HTTP Header.
HTTP Header控制着用户数据的传输,还控制着浏览器的渲染行为,例如:当客户访问一个没有的资源时,就会返回一个404状态码。

常见的Http请求头:
请求头 说明
Accept-Charset 指定客户端接受的字符集
Accept-Encoding 用于指明可接受的内容编码,如Acceptp-Encoding:gzip.deflate
Accept-Language 用于指定一种自然语言,如 Accept-Language :zh-cn
Host 用于指定被请求资源的Internet主机和端口号,如Host:www.taobao.com
User-Agent 客户端将它的操作系统,浏览器和其他属性告诉服务器
Connection 当前连接是否保存,如Connection:Keep-Alive
常见的HTTP响应头:
响应头 说明
Server 使用的服务器名称,如Server:Apache/1.3.6(Unix)
Content-Type 用来指明发送给接收者的实体正文的媒体类型,如 Content-Type:text/html;charset=GBK
Content-Encoding 与请求报头Accept-Encoding对应,告诉浏览器,服务器采用的是什么压缩编码
Content-Language 描述了资源所用的自然语言,与Accept-Language对应
Content-Length 指明实体正文的长度,用以字节的方式存储的十进制数字来表示
Keep-Alive 保持连接的时间,如Keep-Alive:timeout=5,max=120
常见的HTTP状态码:
状态码 说明
200 客户端请求成功
302 临时跳转,跳转的地址通过Location指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在
500 服务器发生不可预期的错误
查看HTTP请求的工具:

谷歌或火狐等浏览器 F12即可看到请求信息。

浏览器缓存机制:

浏览器缓存是非常重要的机制,可以通过ctrl+f5组合键来刷新缓存。
当使用ctrl+f5组合键刷新一个页面时,HTTP请求头会增加一些请求头,,它告诉服务端我们要获取最新的数据而不是缓存。

DNS域名解析:

当用户在浏览器中输入www.xxx.com时,DNS会解析:

  1. 浏览器会检查缓存中是否有没有这个域名对应的ip地址,如果有,则解析结束
  2. 如果浏览器中没有,浏览器会查找操作系统缓存中是否有该域名对应的DNS解析结果。window可以通过C盘中的host文件来配置
  3. 如果还没有解析结果,去本地域名服务器中去做DNS解析服务,比如校园接入互联网,那么DNS服务器肯定会在校园内
  4. 如果还没有解析结果,就直接到Root Server域名服务器请求解析
  5. 把解析结果返回给用户,用户根据TTL值缓存在本地系统中,域名解析过程结束
清除缓存的域名:

windows 下执行:ipconfig/flushdns 命令来刷新缓存
Liunx下: /etc/init.d/nscd restart来清除缓存

学习年限不足,知识过浅,说的不对请见谅。

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。


转载:https://blog.csdn.net/weixin_43326401/article/details/105186430
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场