มีใครช่วยอธิบายให้ฉันฟังได้ไหมว่าเอนทิตี HTTPคืออะไร
ฉันกำลังอ่านเอกสาร HTTPClient แต่ฉันไม่เข้าใจจริงๆว่าหมายถึงอะไร?
มีใครช่วยอธิบายให้ฉันฟังได้ไหมว่าเอนทิตี HTTPคืออะไร
ฉันกำลังอ่านเอกสาร HTTPClient แต่ฉันไม่เข้าใจจริงๆว่าหมายถึงอะไร?
คำตอบ:
HTTP นิติบุคคลเป็นส่วนใหญ่ของการร้องขอ HTTP หรือการตอบสนองประกอบด้วยบางส่วนของส่วนหัวและร่างกายถ้าปัจจุบัน ดูเหมือนว่าจะเป็นคำขอหรือการตอบกลับทั้งหมดที่ไม่มีคำขอหรือบรรทัดสถานะ (แม้ว่าจะมีการพิจารณาเฉพาะฟิลด์ส่วนหัวบางฟิลด์เท่านั้น)
เพื่อเป็นตัวอย่าง; นี่คือคำขอ:
POST /foo HTTP/1.1 # Not part of the entity.
Content-Type: text/plain # ┬ The entity is from this line down...
Content-Length: 1234 # │
# │
Hello, World! ... # ┘
และการตอบสนอง:
HTTP/1.1 200 OK # Not part of the entity.
Content-Length: 438 # ┬ The entity is from this line down...
Content-Type: text/plain # │
# │
Response body ... # ┘
&
&
ไม่ว่าจะเป็นนิติบุคคลด้วยเหรอ? อะไรคือความแตกต่าง?
&
เป็นHTMLอ้างอิงเอนทิตีตัวอักษรไม่ที่เดียวกันHTTP Entity
นี่คือ 3 กรณีง่ายๆ:
กรณีที่ 1. คุณกำลังอัปโหลด 3 ไฟล์ในคำขอเดียว ทั้ง 3 ไฟล์เป็น 3 เอนทิตี แต่ละคนมีของตัวเองContent-Type
เพื่อระบุว่าเป็นไฟล์ประเภทใด
กรณีที่ 2. คุณกำลังดูหน้าเว็บ เบราว์เซอร์ดาวน์โหลดไฟล์ html เป็นเอนทิตีในพื้นหลัง เนื่องจากสามารถอัปเดตเพจได้อย่างต่อเนื่องคุณจึงอาจได้รับเอนทิตีที่แตกต่างไปจากเดิม
กรณีที่ 3. คุณมีไฟล์304 Not Modified
. ไม่มีการโอนนิติบุคคล
กล่าวได้ว่าเอนทิตีคือส่วนที่เป็นทางเลือกภายในข้อความ http (ไม่ว่าจะเป็นการร้องขอหรือการตอบกลับ) ดังนั้นจึงเป็นความสัมพันธ์" บางส่วน " ระหว่างเอนทิตีและข้อความ
ฟิลด์ส่วนหัวบางช่องใช้กับMessage
like Transfer-Encoding
อธิบายวิธีการถ่ายโอนข้อความระหว่างตัวกลางดังนั้นอาจถูกเพิ่มหรือลบโดยแอปพลิเคชันใด ๆ ตามห่วงโซ่การร้องขอ / การตอบกลับ (hop-by-hop headers
) ในการเปรียบเทียบฟิลด์ส่วนหัวเหล่านั้นใช้กับEntity
คุณสมบัติบางอย่างซึ่งอธิบายขนาดของเอนทิตีประเภทอัลกอริทึมการบีบอัด ฯลฯ ...
อ่านเพิ่มเติมอ้างจาก RFC 2616 ส่วน 1.4, 4.5 และ 4.3:
request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain
รูปด้านบนแสดงตัวกลางสามตัว (A, B และ C) ระหว่างตัวแทนผู้ใช้และเซิร์ฟเวอร์ต้นทาง คำขอหรือข้อความตอบกลับที่เดินทางทั้งห่วงโซ่จะผ่านการเชื่อมต่อแยกกันสี่รายการ
มีฟิลด์ส่วนหัวไม่กี่รายที่มีการบังคับใช้ทั่วไปสำหรับทั้งข้อความคำขอและการตอบสนอง แต่ที่ไม่ได้นำไปใช้เป็นนิติบุคคลที่ได้รับการถ่ายโอน ช่องส่วนหัวเหล่านี้ใช้กับข้อความที่กำลังส่งเท่านั้น
ต้องใช้ Transfer-Encoding เพื่อระบุรหัสการโอนใด ๆ ที่แอปพลิเคชันใช้เพื่อให้แน่ใจว่าการถ่ายโอนข้อความนั้นปลอดภัยและเหมาะสม Transfer-Encoding เป็นคุณสมบัติของข้อความไม่ใช่ของเอนทิตีดังนั้นจึงอาจถูกเพิ่มหรือลบโดยแอปพลิเคชันใด ๆ ตามห่วงโซ่การร้องขอ / การตอบกลับ
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
โดยที่Transfer-Encoding
อาจ "เป็นกลุ่ม" ซึ่งหมายถึงวิธีการถ่ายโอนข้อความและContent-Encoding
อาจเป็น "gzip" ที่หมายถึงวิธีการบีบอัดเอนทิตี
ฉันเดา HttpClient Entity
การตั้งชื่อตาม HTTP Entity
HTTP เป็นโปรโตคอลที่สังเกตได้เมื่อเข้าถึงข้อมูลจากเครื่องระยะไกลผ่านเครือข่าย โดยปกติเครือข่ายคืออินเทอร์เน็ตและเครื่องระยะไกลเป็นเซิร์ฟเวอร์
เมื่อคุณขอข้อมูลจากบุคคล A ถึงบุคคล B คุณจะส่งข้อความถึงเขา (ขอใช้บริการ) บุคคล B ตอบกลับคุณ (การตอบกลับ) คำขอและการตอบกลับเป็นประเภทข้อความ HTTP
บุคคล A สามารถขอให้บุคคล B ทำบางสิ่งแทนการขอข้อมูล พูดว่าบุคคล A ต้องการให้บุคคล B จัดเก็บไฟล์ในตำแหน่งที่ปลอดภัย ดังนั้นบุคคล A จึงส่งไฟล์นั้น (เอนทิตี HTTP) ไปยังบุคคล B และขอให้เขาทำบางอย่าง (ข้อความ HTTP) ในกรณีนี้บุคคลกำลังส่งผ่าน "เอนทิตี" ในบริบทของ HTTP Entity เป็น payload ที่แนบมาพร้อมกับข้อความ
หวังว่าการเปรียบเทียบจะช่วยได้
ตามที่กล่าวไว้ในความคิดเห็นของ @ hawkeye-parker ดูเหมือนว่าเอนทิตีจะเลิกใช้แล้ว ทำให้การค้นหาในนี้ 2014 RFC , และคุณจะเห็นเกี่ยวกับหน่วยงาน XML และเนื้อหาของข้อความ แต่ไม่มีอะไรที่เกี่ยวกับนิติบุคคล Http
อย่างไรก็ตาม HttpClient แต่ยังรวมถึงไคลเอนต์ JaxRS มีsetEntity()
และgetEntity()
วิธีการ
เมื่อพิจารณาจากคำตอบที่ยอมรับแล้วห้องสมุดทั้งสองผิด! HttpClient.setEntity()
จะไม่ลบส่วนหัวที่ตั้งไว้ก่อนหน้านี้
HttpEntity
คือสิ่งที่คุณจะส่งผ่านในคำขอ (พร้อมส่วนหัว) และสิ่งที่คุณได้รับในการตอบกลับ สำหรับ Get Request เรากำลังส่งผ่าน String ง่ายๆ
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
สำหรับโพสต์เราจะผ่านคลาสเอนทิตีที่สมบูรณ์
public String createProducts(@RequestBody Product product) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);
return restTemplate.exchange(
"http://localhost:8080/products", HttpMethod.POST, entity, String.class
).getBody();
}
เอนทิตีเป็นสิ่งที่คล้ายข้อความประกอบด้วยส่วนหัวซึ่งข้อมูลเมตาเช่นตำแหน่งที่ตั้งภาษาการเข้ารหัส ...
และเป็นทางเลือกของเนื้อหา - เนื้อหาถูกจัดรูปแบบ ฯลฯ ตามที่ระบุไว้ในส่วนหัว
ในบรรดาคำตอบที่ดีที่เรามีที่นี่ฉันเชื่อว่ามันคุ้มค่าที่จะพูดถึงบางสิ่งที่มาจากRFC 2616โดยตรง(Hypertext Transfer Protocol - HTTP / 1.1) :
เอกลักษณ์
คำขอและข้อความตอบกลับอาจโอนเอนทิตีหากไม่ถูก จำกัด โดยวิธีการร้องขอหรือรหัสสถานะการตอบกลับ เอนทิตีประกอบด้วยฟิลด์ส่วนหัวของเอนทิตีและส่วนเนื้อหาของเอนทิตีแม้ว่าการตอบสนองบางอย่างจะรวมเฉพาะส่วนหัวของเอนทิตี
สรุป AA:กิจการอาจมีการโอนและมันสามารถเป็นส่วนหัว + ร่างกายหรือเพียงแค่ส่วนหัว
เนื่องจากมีลิงก์ด้านบนฉันจึงควบคุมตัวเองในการแสดงความคิดเห็นเพิ่มเติม