Java随笔-HTTP

请添加图片描述

定义

超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。

URL与URI

URI

统一资源标识符,用于识别互联网资源名称的字符串,HTTP使用统一资源标识符来传输数据和建立连接,web上的各种资源,比如HTML文档、视频、图片等都是由统一资源标识符进行定位。具体的格式如下:

格式:[协议名]: //[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]。

URL

统一资源定位符,用于识别互联网上某一处资源的地址。
基本规则:

http: //< host>:< port>/< path>?< searchpart>

比如:https://baike.baidu.com/item/8937042?fromtitle=URL&fromid=110640&fr=aladdin。

  1. 协议部分。http、https、ftp,都是协议,一般在协议后面添加“//”作为分隔符。
  2. 域名部分。baike.baidu.com就是域名,IP地址也可以作为域名。
  3. 端口部分。示例中没有写端口,如果有,写法为:baike.baidu.com:8080,在域名后面紧跟“:”。
  4. 虚拟目录。域名后面第一个“/”与最后一个“/”之间,示例中/item/就是虚拟目录部分。
  5. 文件部分。域名后面最后一个“/”到“?”为止,如果没有“?”就到“#”为止,如果都没有,就到参数之前都是文件部分。文件名部分是可以没有的,如果省略了,就使用默认的文件名。
  6. 参数部分。从“?”到“#”之间的部分都是参数部分,也可以叫搜索部分、查询部分。参数可以有多个,参数之间用“&”分隔,比如“fromtitle=URL&fromid=110640&fr=aladdin”。
  7. 锚部分。“#”后面的都是锚部分,非必须,可不要。

区别与联系

URL是URI的子集,URL都是URI,但是URI并不都是URL。URI中还有URN(统一资源名称),所以有些URI只是表示符,没有办法定位任何资源。

请求过程

  1. 首先进行DNS域名解析,因为本地浏览器、操作系统、DNS服务器都有DNS缓存,所以首先会搜索浏览器自身的DNS缓存。如果本地浏览器缓存中没有找到,就去操作系统的缓存中找,如果操作系统缓存中没有,就去hosts文件中去找,如果都没有就去域名服务器中去找。
  2. 通过三次握手建立TCP连接。
  3. 客户端发起HTTP请求。
  4. 服务端响应HTTP请求。
  5. 客户端解析html代码,并根据html中的代码按需向服务器请求下载资源。
  6. 客户端将内容渲染出来。
  7. 四次挥手关闭TCP连接。

一般来讲,服务端将客户端的请求数据返回之后就要关闭TCP请求,但是如果在头信息中使用了Connection:keep-alive,TCP连接会继续保持打开状态,服务端和客户端可以持续进行HTTP通信,这样做节约时间,节省带宽。

请求方法

方法描述
GET请求指定信息,并返回实体主体,且不对资源进行操作
HEAD返回中没有具体内容的GET,用于获取报头
POST对指定资源进行处理,请求数据包在请求体中,不是明文,安全性高于GET,可对资源进行创建和修改
PUT取代指定内容
DELETE删除指定内容
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
PATCHPUT的补充方法,用于对已知资源的局部更新
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断

请求消息结构

请求消息包括:请求行,请求头,空行,请求数据。
请添加图片描述

响应消息结构

响应消息保包括:状态行,消息报头,空行,响应数据。

  • 状态行,比如:HTTP/1.1 200 OK
  • 消息报头,比如:Date: Mon, 27 Jul 2022 14:22:63 GMT,Content-Length: 99,Content-Type: text/html; charset=utf-8等
  • 响应数据,html页

状态码

状态码,我们常用的就四种:200,404,500,301。

状态码描述
200请求成功
404找不到资源,404页面可定制
500服务器错误
301请求的资源被移动到其他位置了
100客户端应继续其请求
101切换协议
201成功请求并创建了新的资源
202已经接受请求,但未处理完成
203请求成功,但返回的meta信息不在原始的服务器,而是一个副本
204服务器成功处理,但未返回内容
205服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206服务器成功处理了部分GET请求
300请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
302请求资源只是临时被移动,客户端应继续使用原有URI
303使用GET和POST请求查看其它地址
304所请求的资源未修改,服务器返回此状态码时,不会返回任何资源,告诉客户端资源没有被修改
305所请求的资源必须通过代理访问
307临时重定向,与302类似,使用GET请求重定向
400客户端请求的语法错误
401请求要求用户的身份认证
402保留,将来使用
403服务器理解请求客户端的请求,但是拒绝执行此请求
405客户端请求中的方法被禁止
406服务器无法根据客户端请求的内容特性完成请求
407请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408服务器等待客户端发送的请求时间过长,超时
409服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410客户端请求的资源已经不存在,410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411服务器无法处理客户端发送的不带Content-Length的请求信息
412客户端请求信息的先决条件错误
413由于请求的实体过大,服务器无法处理,因此拒绝请求
414请求的URI过长(URI通常为网址),服务器无法处理
415服务器无法处理请求附带的媒体格式
416客户端请求的范围无效
417服务器无法满足Expect的请求头信息
501服务器不支持请求的功能,无法完成请求
502作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504充当网关或代理的服务器,未及时从远端服务器获取请求
505服务器不支持请求的HTTP协议的版本,无法完成处理

DNS劫持

DNS是域名系统,将域名与其具体的IP地址相互映射成一个分布式数据库,可以让用户更加方便进行访问,不然,每次访问都输入IP地址,谁记得住呀。比如:www.baidu.com是可以输入的,但是百度的IP是多少很多人都不知道,所以需要DNS将www.baidu.com解析成具体的IP地址。
DNS劫持就是将劫持DNS服务器,将映射表改掉,导致输入的正确的域名,但访问的却是其他的网站,就是返回一个不匹配的,错误的IP让用户访问。DNS劫持一般有三种情况。

  1. 错误域名解析到有广告的纠错导航网页。输入的错误域名,肯定跳转不到想要的页面,但是会跳转到一些官方的导航页面,电信和联通都有这样的域名纠错导航页面。
  2. 错误的域名跳转到导航页问题不算大,就怕这些导航页上有很多恶意的站点,总是跳转到一些广告页或游戏页面,比如:贪玩蓝月等等等等。
  3. 最严重的是正确的域名错误的页面,有时没有输错,就是页面不对,一般是运营商的一些节点被恶意控制了,或者设备中毒了,路由器被黑了,都有可能。所以一般不用运营商默认的DNS,容易被劫持,因为比较容易。

HTTP劫持

DNS劫持发生在请求中,而HTTP劫持更像是发生在返回中。通过向返回的数据中插入JS或其他的东西,导致正确的页面出现很多小广告,小弹窗,当然也有像DNS劫持那样直接对请求进行拦截返回错误信息。
一般防止HTTP劫持有两种方法:

  1. 使用https,因为多了一些加密和ssl握手,所以时间和性能可能会耗费一些。
  2. 对https进行简单加密,比如RSA对称加密,这样就没有快速获取http请求特征,不好劫持,当然这个需要请求方和服务方进行配合。为什么不用非对称加密,因为耗时。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值