2011-09-02 77 views
6

Dưới đây là một đoạn trích từ một bài viết trên Wikipedia:URL yêu cầu HTTP có phải là một phần của tiêu đề yêu cầu HTTP không?

Ngược lại với GET phương thức yêu cầu mà chỉ có một địa chỉ URL và tiêu đề là gửi đến máy chủ, yêu cầu POST cũng bao gồm một nội dung thư.

Dựa vào đó, có vẻ như URL được gửi riêng biệt với tiêu đề, nhưng nếu vậy, tại sao chúng tôi sử dụng phương pháp header() trong PHP để đặt URL chuyển hướng đến?

header("Location: http://google.com"); 
+3

Bạn đang nhầm lẫn với yêu cầu HTTP và phản hồi HTTP. Chức năng tiêu đề PHP thêm tiêu đề mới vào tiêu đề RESPONSE, GET và POST là các phương thức REQUEST. – CaNNaDaRk

+0

Ah ... Điều này có ý nghĩa. –

+0

Trong câu trả lời của tôi, bạn có một ví dụ về một YÊU CẦU và một RESPONSE và bạn được giải thích tiêu đề là như thế nào. – CaNNaDaRk

Trả lời

9

Khi bạn muốn duyệt URL từ trình duyệt của mình, bạn nhập URL. Trình duyệt đặt url bên trong một yêu cầu HTTP như thế này:

GET /path/to/resource.php?var=data1&othervar=data2 HTTP/1.1 
Host: example.com 
Connection: keep-alive 
"empty line" 

Sau đó, một máy chủ web cung cấp cho bạn một câu trả lời như thế này:

HTTP/1.0 200 OK 
Date: Fri, 02 Sep 2011 14:37:36 GMT 
Server: Apache 
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 149 
Content-Type: text/javascript; charset=utf-8 
Connection: keep-alive 
"empty line" 
"149 bytes of Response data" 

Mỗi dòng như thế này "Header-Name: header_value \ r \ n "là một tiêu đề.
Chức năng tiêu đề PHP thêm tiêu đề cho phản hồi trước khi gửi cho trình duyệt của người dùng.
Trong ví dụ của bạn tiêu đề là:

Location: http://google.com 

Và nó được thêm vào ngay sau tiêu đề cuối cùng trước khi "dòng trống" (mà là một dòng mà chỉ chứa một \ r \ n).
yêu cầu POST là khác nhau từ các yêu cầu GET vì bạn có một cơ thể yêu cầu sau khi "dòng trống"):

POST /path/to/resource.php HTTP/1.1 
Host: example.com 
Connection: keep-alive 
Content-Length: "number of bytes in the body" 
"empty line" 
variable=data&othervar=data2 

Tóm lại một yêu cầu HTTP được thực hiện như thế này:

  1. Yêu cầu/hàng phản hồi (POST hoặc GET theo sau là url và phiên bản http cho yêu cầu, phiên bản Http theo sau là mã phản hồi và chuỗi phản hồi cho phản hồi) đã kết thúc với \ r \ n
  2. tiêu đề yêu cầu/phản hồi (tiêu đề-name: header_value \ r \ n)
  3. trống hàng (\ r \ n)
  4. đáp ứng/yêu cầu cơ thể

PS. Hàng được ALWAYS đóng bởi "\ r \ n" byte ("dòng trống" được tạo thành chỉ bằng hai byte đó).

+0

Giá trị báo giá đầu tiên là "GET/path ...' của tiêu đề yêu cầu? –

+2

Không thực sự, "GET ... HTTP/1.1" và "POST ... HTTP/1.1" là ROQU REQUEST, được theo sau bởi tiêu đề yêu cầu. – CaNNaDaRk

+0

Xin cảm ơn! Điều đó làm cho nó rõ ràng hơn nhiều. –

2

header()thêm một tiêu đề cho tập tin.

Vì vậy, nếu bạn muốn thiết lập Content-Type:

header("Content-type: text/javascript"); 

Và vân vân ...

Location chỉ là một tiêu đề bạn có thể thiết lập và/hoặc thay đổi với php header() chức năng

Từ doc:

các specia thứ hai Trường hợp l là tiêu đề "Vị trí:". Nó không chỉ gửi tiêu đề này trở lại trình duyệt mà còn trả về mã trạng thái REDIRECT (302) cho trình duyệt trừ khi mã trạng thái 201 hoặc mã 3xx đã được đặt.

+0

Đây là một đoạn trích khác (lần này từ tài liệu PHP): 'header() được sử dụng để gửi tiêu đề HTTP thô.' –

+0

@EmanuilRusev - làm thế nào để thay đổi câu trả lời của tôi? – Neal

+0

@Emanuil ... tất cả tiêu đề là 'đã gửi' ... đó là ý tưởng của tiêu đề ... đọc nội dung cập nhật cho câu trả lời của tôi – Neal

0

Có tiêu đề phản ứng và yêu cầu tiêu đề

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Bạn đặt tiêu đề vị trí trong PHP là một phản ứng với một yêu cầu. Trình duyệt xem xét phản hồi và hành động tương ứng.

Vì vậy, bạn truy cập trang gốc và tiêu đề vị trí yêu cầu trình duyệt đi đến một nơi khác.

Các vấn đề liên quan