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>

    注:响应头与响应体之间也有一个空行,以表示响应体的开始。

参考技术D HttpURLConnection的getResponseMessage()方法获取HTTP响应代码。

使用 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)?

如果没有在方法调用中指定类型(getpost 等),则返回一个Observable&lt;Object&gt;,这对响应内容具有误导性,因为可能会试图使用给定的对象:

let response: Observable<Object> = httpClient.post('...');
response.subscribe(o => ...);

在这种情况下,o 始终为 null,但这不是显式的,也不是由编译器检查的。

更好的解决方案是返回 Observable&lt;null&gt;,但我发现语义不明确,因为 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&lt;void&gt;。就像你说的 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&lt;void&gt;

还有never()NEVER Observables,但不要将它们误认为empty(),因为它们不会发出任何东西(甚至不会发出complete 通知)。

【讨论】:

Observable&lt;void&gt; 在技术上是有效的,但它的语义很难推理:它会发出什么东西吗?在什么意义上是“无效”的价值? empty() 很好,但就像我对@Sunil Singh 说的那样,订阅方法的使用会根据是否有内容而改变(有时使用next,有时使用complete),这太糟糕了。 好吧,它必须改变。您如何区分有效值和您不想发出任何东西的情况?这就是completeerror 通知的用途。当然,您可以使用null,但您似乎想避免这种情况。 void 类型是 TypeScript 类型,不代表任何内容(如数据库中的 NULL)。那么Observable&lt;T&gt; 是一个Observable,它发出next 类型为T 的项目。所以Observable&lt;void&gt; 是一个什么都不发射的 Observable。【参考方案3】:

您可以使用Observable.empty()

empty() 如果你已经从rxjs 导入

【讨论】:

它并不完美,因为它需要更改订阅方法(使用complete 回调而不是next)。但我同意empty 是传达具有 内容的已完成 HTTP 请求含义的最佳运算符。 @Clément 你可以使用subscribe( complete: () =&gt; ... )

以上是关于java啥是响应信息?的主要内容,如果未能解决你的问题,请参考以下文章

Java开发中啥是垃圾回收?

Java里啥是麦文

电脑硬件信息啥是唯一的,或者不容易修改的。

Java里,,啥是二进制? 啥是base64?他们有啥区别?

java面试啥是多线程

链表—啥是链表