xiubojin / JXBWKWebView

An component WebView for iOS base on WKWebView
MIT License
735 stars 115 forks source link

Ajax post 请求丢失 body #41

Closed karosLi closed 5 years ago

karosLi commented 5 years ago

//获取bodyParam NSString bodyParam = request.allHTTPHeaderFields[@"bodyParam"]; NSData bodyData =[bodyParam dataUsingEncoding:NSUTF8StringEncoding]; newRequest.HTTPMethod = @"POST"; newRequest.HTTPBody = bodyData;

代码中这段,只是解决首次请求的body丢失问题。

xiubojin commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

karosLi commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

xiubojin commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

karosLi commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

所以针对问题本身,是会丢失 ajax body的。

xiubojin commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

所以针对问题本身,是会丢失 ajax body的。

对,本来想hook ajax请求来着,但是忙没时间自测,不能上。

有个曲线救国的方案,这个库提供了JSBridge,可以让h5到native来拿数据,拿到数据之后放到body里再发ajax请求。

karosLi commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

所以针对问题本身,是会丢失 ajax body的。

对,本来想hook ajax请求来着,但是忙没时间自测,不能上。

有个曲线救国的方案,这个库提供了JSBridge,可以让h5到native来拿数据,拿到数据之后放到body里再发ajax请求。

恩,我也在写hook ajax,还在调试中,确实还需要大量测试。你刚说的曲线救国,最终还是会回到 ajax,那body还是会丢失的。

xiubojin commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

所以针对问题本身,是会丢失 ajax body的。

对,本来想hook ajax请求来着,但是忙没时间自测,不能上。 有个曲线救国的方案,这个库提供了JSBridge,可以让h5到native来拿数据,拿到数据之后放到body里再发ajax请求。

恩,我也在写hook ajax,还在调试中,确实还需要大量测试。你刚说的曲线救国,最终还是会回到 ajax,那body还是会丢失的。

不会啊,这个方案我已经在用了。

karosLi commented 5 years ago

ajax post请求的body怎么会丢失呢?你做什么操作了吗?

WKWebView 只要注册了 http 拦截,ajax body 就会丢失的。 你这个是native代码上把body放在了请求头上,然后通过请求头取出之前的body,这个没有问题,但是这个是首次同步请求,不是异步的ajax请求,如果也想异步ajax请求不丢失body,那H5侧也需要把body放在请求头里才行,只是这样让H5侧处理比较麻烦。另外的话,请求头不适合放很长的数据,会有限制。

#38 cookie

所以针对问题本身,是会丢失 ajax body的。

对,本来想hook ajax请求来着,但是忙没时间自测,不能上。 有个曲线救国的方案,这个库提供了JSBridge,可以让h5到native来拿数据,拿到数据之后放到body里再发ajax请求。

恩,我也在写hook ajax,还在调试中,确实还需要大量测试。你刚说的曲线救国,最终还是会回到 ajax,那body还是会丢失的。

不会啊,这个方案我已经在用了。

恩,懂你意思,那你这样就需要 H5 去增加代码来支持把数据先给native了,或者是简单的 hook ajax send 方法,把body传给 native保存起来,然后端上真正在发送数据时,把之前保存的body取出来,继续发送 ajax 请求。