Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajax post 请求丢失 body #41

Closed
karosLi opened this issue Jul 18, 2019 · 8 comments
Closed

Ajax post 请求丢失 body #41

karosLi opened this issue Jul 18, 2019 · 8 comments

Comments

@karosLi
Copy link

karosLi commented Jul 18, 2019

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

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

@xiubojin
Copy link
Owner

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

@karosLi
Copy link
Author

karosLi commented Jul 20, 2019

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

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

@xiubojin
Copy link
Owner

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

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

#38 cookie

@karosLi
Copy link
Author

karosLi commented Jul 23, 2019

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

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

#38 cookie

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

@xiubojin
Copy link
Owner

xiubojin commented Jul 24, 2019

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
Copy link
Author

karosLi commented Jul 24, 2019

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
Copy link
Owner

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
Copy link
Author

karosLi commented Jul 25, 2019

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 请求。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants