java啥是响应信息?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java啥是响应信息?相关的知识,希望对你有一定的参考价值。
HttpURLConnection的getResponseMessage()方法获取HTTP响应信息。
响应信息,是指http请求响应吧,向网站服务器发送一个请求 ,服务器回返回一个响应,这个响应信息就是服务器返回的,比如你访问网站,网站返回一个404,那就说明这个页面不存在,望采纳 参考技术A 这个需要了解一下HTTP协议的知识,HTTP协议是最常见的一种网络应用协议,每当你打开一个网页,比如你提出这个问题,你就进行了若干次的HTTP协议。HTTP是请求-应答,通俗来讲就是一问一答,所谓的响应信息,就是服务器对你的回答。
通常来说,服务器会回答如下内容:
1,响应码,200表示OK,4xx表示各种错误
2,一些响应头部,头部说明了这次HTTP请求的基本信息
3,响应体,这个不一定有,是否有,有多长的内容,是什么类型的,都是2中说明的。
HTTP是一种协议,有多种语言多个版本的实现,题主题目中所提到的HttpURLConnection,是客户端的JAVA实现,当一个URL请求成功后,getResponseMessage会返回包含1,2,3(可选)的完整信息。 参考技术B 响应信息就是调用该方法后返回的报文。 参考技术C
HTTP请求一般包含三个部分,从上到下依次是:
1、第一行:请求方法 URI 协议/版本(例:GET /index.jsp HTTP/1.1)
2、几行header: 请求头信息(多行,例子:Connection: Keep-Alive)
3、请求体body: 请求体和请求头之间有一个空行,只能包含回车换行符(CRLF \\n\\r)
一个简单请求示例如下:
POST /login.actionHTTP/1.1
user-agent=Java/1.6.0_31
host=localhost:8080
accept=text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
connection=keep-alive
username=xxx&password=xxx
注:注意上面请求头和请求体之间必须有一个空行(回车换行符CRLF),这样HTTP服务器才知道请求体从哪里开始。注意请求头中Content-Length: 25是请求体中字节byte数。
Java示例:
HttpURLConnectionconn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)");
HTTP 响应信息
响应信息与请求信息类似,也包括三部分:
1、 协议 状态码 描述 (例: HTTP/1.1 200 OK)
2、 响应头信息
3、 响应体
一个响应示例如下:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: xxx
<html></html>
注:响应头与响应体之间也有一个空行,以表示响应体的开始。
使用 typescript,啥是最好的 Observable 类型来最好地表示没有内容的 HTTP 响应?
【中文标题】使用 typescript,啥是最好的 Observable 类型来最好地表示没有内容的 HTTP 响应?【英文标题】:Using typescript, what is a good Observable type to best represent a HTTP response with no content?使用 typescript,什么是最好的 Observable 类型来最好地表示没有内容的 HTTP 响应? 【发布时间】:2019-03-22 00:40:08 【问题描述】:使用 typescript、Angular 6+ 和 rxjs,如何最好地向调用者表示 HTTP 响应内容为空(Content-Length=0)?
如果没有在方法调用中指定类型(get
、post
等),则返回一个Observable<Object>
,这对响应内容具有误导性,因为可能会试图使用给定的对象:
let response: Observable<Object> = httpClient.post('...');
response.subscribe(o => ...);
在这种情况下,o
始终为 null,但这不是显式的,也不是由编译器检查的。
更好的解决方案是返回 Observable<null>
,但我发现语义不明确,因为 null 也可能指的是 null 数据(例如,没有电话号码的客户会将 phoneNumber 属性设置为 null)。
【问题讨论】:
看看这个:***.com/questions/38548407/… 【参考方案1】:您可以创建一个以Observable
形式发送请求的方法,例如:
// Add a new comment
addComment (body: Object): Observable<Comment[]>
let bodyString = JSON.stringify(body); // Stringify payload
let headers = new Headers( 'Content-Type': 'application/json' ); // ... Set content type to JSON
let options = new RequestOptions( headers: headers ); // Create a request option
return this.http.post(this.commentsUrl, body, options) // ...using post request
.map((res:Response) => res.json()) // ...and calling .json() on the response to return data
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
// Update a comment
updateComment (body: Object): Observable<Comment[]>
let bodyString = JSON.stringify(body); // Stringify payload
let headers = new Headers( 'Content-Type': 'application/json' ); // ... Set content type to JSON
let options = new RequestOptions( headers: headers ); // Create a request option
return this.http.put(`$this.commentsUrl/$body['id']`, body, options) // ...using put request
.map((res:Response) => res.json()) // ...and calling .json() on the response to return data
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
// Delete a comment
removeComment (id:string): Observable<Comment[]>
return this.http.delete(`$this.commentsUrl/$id`) // ...using put request
.map((res:Response) => res.json()) // ...and calling .json() on the response to return data
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
或者简单地使用HttpClient
like:
getConfigResponse(): Observable<HttpResponse<Config>>
return this.http.get<Config>(
this.configUrl, observe: 'response' );
addHero (hero: Hero): Observable<Hero>
return this.http.post<Hero>(this.heroesUrl, hero, httpOptions)
.pipe(
catchError(this.handleError('addHero', hero))
);
【讨论】:
【参考方案2】:您要查找的内容确实存在,其正确类型是Observable<void>
。就像你说的 null
是一个可以由任何 Observable 产生的常规值。在 RxJS 6 中,这由 empty()
表示,它与任何其他 Observable 一样,但它不发出任何 next
值,只是发送 complete
信号。
import empty, EMPTY from 'rxjs';
empty().subscribe(...) // will receive just the `complete` notification
// or you can use EMPTY
EMPTY.subscribe(...)
顺便说一句,您还可以使用 ignoreElements()
运算符将任何 Observable 转换为 Observable<void>
。
还有never()
和NEVER
Observables,但不要将它们误认为empty()
,因为它们不会发出任何东西(甚至不会发出complete
通知)。
【讨论】:
Observable<void>
在技术上是有效的,但它的语义很难推理:它会发出什么东西吗?在什么意义上是“无效”的价值? empty()
很好,但就像我对@Sunil Singh 说的那样,订阅方法的使用会根据是否有内容而改变(有时使用next
,有时使用complete
),这太糟糕了。
好吧,它必须改变。您如何区分有效值和您不想发出任何东西的情况?这就是complete
和error
通知的用途。当然,您可以使用null
,但您似乎想避免这种情况。 void
类型是 TypeScript 类型,不代表任何内容(如数据库中的 NULL
)。那么Observable<T>
是一个Observable,它发出next
类型为T
的项目。所以Observable<void>
是一个什么都不发射的 Observable。【参考方案3】:
您可以使用Observable.empty()
或
empty()
如果你已经从rxjs
导入
【讨论】:
它并不完美,因为它需要更改订阅方法(使用complete
回调而不是next
)。但我同意empty
是传达具有空 内容的已完成 HTTP 请求含义的最佳运算符。
@Clément 你可以使用subscribe( complete: () => ... )
以上是关于java啥是响应信息?的主要内容,如果未能解决你的问题,请参考以下文章