如何发起一个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会解析:
- 浏览器会检查缓存中是否有没有这个域名对应的ip地址,如果有,则解析结束
- 如果浏览器中没有,浏览器会查找操作系统缓存中是否有该域名对应的DNS解析结果。window可以通过C盘中的host文件来配置
- 如果还没有解析结果,去本地域名服务器中去做DNS解析服务,比如校园接入互联网,那么DNS服务器肯定会在校园内
- 如果还没有解析结果,就直接到Root Server域名服务器请求解析
- 把解析结果返回给用户,用户根据TTL值缓存在本地系统中,域名解析过程结束
清除缓存的域名:
windows 下执行:ipconfig/flushdns 命令来刷新缓存
Liunx下: /etc/init.d/nscd restart来清除缓存
学习年限不足,知识过浅,说的不对请见谅。
世界上有10种人,一种是懂二进制的,一种是不懂二进制的。
转载:https://blog.csdn.net/weixin_43326401/article/details/105186430
查看评论